GDI编程

由于最近一直在搞GDI(GDI+)和图片处理的东西,怕自己忘记(其实已经忘得差不多),就仿照网上的BITMAPINFO查看器,写了个东西。

工程下载地址:点击打开链接

运行效果如图:

虽然比较(很)难看,但本人觉得图片显示那块还是做得不错的。嘿嘿。

图片显示的实现是:先把位图文件加载到内存当中(这里我很偷懒,没有任何检查!),然后通过双缓冲显示位图。为了能实现图片的移动,我是创建了两个兼容DC,先在一个兼容dc上做完所有的位拷贝再拷贝到窗口dc上,可能这里做的太麻烦了(毕竟技术菜啊)。

对话框头文件添加的内容有:

public:
	afx_msg void OnBnClickedButton1();
	afx_msg void OnBnClickedButton2();

	BYTE* m_buf;				//指向加载到内存的位图文件
	BITMAPFILEHEADER* m_bmfh;	//指向文件头
	BITMAPINFO* m_bmi;			//指向位图信息结构
	BYTE* m_dibs;				//指向dib数据
	void Show(int x, int y);	//显示位图
	void TreeShow(void);		//树形控件

	int X;				//X偏移
	int Y;				//Y偏移
	CPoint old;			//记录移动时的上一个点
	BOOL flag;			//标记鼠标左键是否被按下

	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);		//左键
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);		//移动
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);		//左键弹起

图片显示的关键代码:

void CBITMAP2Dlg::Show(int x, int y)
{
	CDC* pdc = GetDlgItem(IDC_DDD)->GetDC();
	CRect rect;
	GetDlgItem(IDC_DDD)->GetWindowRect(&rect);
	ScreenToClient(&rect);
	CDC bk,kb;
	bk.CreateCompatibleDC(pdc);
	HBITMAP bmbk = CreateCompatibleBitmap(pdc->m_hDC,rect.Width(),rect.Height());
	HBITMAP oldbm = (HBITMAP)bk.SelectObject(bmbk);

	kb.CreateCompatibleDC(pdc);
	HBITMAP bmkb = CreateDIBitmap(pdc->m_hDC,&m_bmi->bmiHeader,CBM_INIT,m_dibs,m_bmi,DIB_RGB_COLORS);
	HBITMAP oldbm2 = (HBITMAP)kb.SelectObject(bmkb);
	bk.BitBlt(0,0,rect.Width(),rect.Height(),NULL,0,0,WHITENESS);
	bk.BitBlt(0,0,rect.Width(),rect.Height(),&kb,x,y,SRCCOPY);
	pdc->BitBlt(0,0,rect.Width(),rect.Height(),&bk,0,0,SRCCOPY);

	kb.SelectObject(oldbm2);
	DeleteObject(bmkb);
	DeleteDC(kb);
	bk.SelectObject(oldbm);
	DeleteObject(bmbk);
	DeleteDC(bk.m_hDC);
	ReleaseDC(pdc);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端说吧

Html2canvas - 项目中遇到的那些坑点汇总(更新中...)

8305
来自专栏cs

ASP.NET常用的一些服务器控件

文本框控件TextBox, TextMode:值SingleLine表示单行文本,MultiLine表示多行文本,等等。 ? textbox.jpg ...

2846
来自专栏hbbliyong

WPF中播放声音媒体文件

这段时间我们小组要给部门的Annual Meeting準备一个WPF的抽奖程序,为了增加程序的有趣性,我们在程序中需要播放背景音乐等。由於对之前从未使用过WPF...

3726
来自专栏菩提树下的杨过

Flash/Flex学习笔记(17):按键捕获

先来看简单的单个按键捕获: package { import flash.display.Sprite; import fl.controls.Label...

2169
来自专栏zcqshine's blog

ajaxFileUpload+ThinkPHP+jqGrid 图片上传与显示

3014
来自专栏非著名程序员

关于Gif图展示的问题和感想,我只能帮大家这么多了

每天跟我要展示gif图demo的人很多,我有点纳闷,大家不知道很多第三方库都可以加载gif吗?比如Glide和Fresco都可以啊,大家不用它加载gif图吗?我...

2435
来自专栏小灰灰

im4java + imagemagic 搭建一个图片处理服务

imagemagic + im4java 进行图片处理 利用 imagemagic 对图片进行处理,java工程中,使用im4java来操作imagemagi...

1947
来自专栏ml

CEF使用的几个注意点

    CEF为chrome浏览器的切入其他浏览器中的轻量级框架。 开发的客户端的时候,这是作为界面显示的首先,可以增强客户的易变性,可塑性。 在开发的过程中(...

51710
来自专栏林德熙的博客

win10 uwp 渲染原理 DirectComposition 渲染 例子创建工程如何写显示CompositionSurfaceBrush

本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制。

551
来自专栏HT

拓扑图弹力布局呈现Flickr图片搜索结果

十年前有值得分享的图片我都存在Flickr上,可惜yahoo收购了Flickr之后堕落​好多年,最近yahoo在梅姐带领下Flickr团队终于恢复了生机,个人免...

1829

扫码关注云+社区