在MFC中可以通过Picture Control控件显示位图,也可以通过CBitmap类显示位图。
1 通过Picture Control控件显示位图
Picture Control控件实际上就是静态控件,即CStatic类。可以通过该控件的属性或者对该控件的成员变量,实现位图的显示。
1.1 通过设置控件属性显示位图
在VS2008中创建一个基于对话框的MFC程序。
1.1.1 创建控件
从“工具箱”中将Picture Control控件拖入到对话框中,如图1所示。
图1 将Picture Control控件拖入到对话框中
1.1.2 导入位图
将要显示的位图导入到项目中,导入的方法见《MFC导入图标文件的方法》。
1.1.3 设置控件属性
选中创建的Picture Control控件,之后在右键菜单中选择“属性”,在控件属性栏中,将“Type”的值选择为“Bitmap”,并且将“Image”的值选择为在“1.1.2 导入位图”中导入的位图ID。此时,在资源编辑窗口中就已经显示了该位图,如图2所示。
图2 设置属性后的Picture Control控件
1.2 通过控件成员变量实现位图的显示
首先将“1.1.3 设置控件属性”中提到的Picture Control控件的属性修改为默认值“Frame”。
1.2.1 为控件添加成员变量
选择该控件,在右键菜单中选择“添加变量”。之后,在“添加成员变量向导”对话框中将“类别”设置为“Control”,变量名设置为“m_image”,如图3所示。
图3 为控件添加变量
1.2.2 通过成员变量设置控件
从“1.1 通过设置控件属性显示位图”中可以看出,在控件中显示位图,首先要将控件的“类型”属性设置为“Bitmap”,之后指定要显示的位图。通过成员变量设置控件属性时,也是按照这个顺序。
(1)设置控件类型属性
通过为控件添加的成员变量m_image,调用其成员函数ModifyStyle()来设置控件的类型属性。在基于对话框程序的OnInitDialog()函数中添加如下代码
m_image.ModifyStyle(SS_CENTER, SS_BITMAP, 0);
其中,ModifyStyle()
的第一个参数表示删除控件的
SS_CENTER
属性;第二个参数表示为控件添加SS_BITMAP
属性;第三个参数0
表示不移动控件的位置。
(2)设置控件要显示的位图
通过成员变量m_image设置要显示的位图,首先要获得该位图的句柄。在OnInitDialog()函数中通过Windows API函数LoadBitmap()获取指定位图的句柄。
HBITMAP hBitmap = ::LoadBitmap(
AfxGetInstanceHandle()
, MAKEINTRESOURCE(IDB_BITMAP1)
);
其中,AfxGetInstanceHandle()
函数的作用是获取包含位图的程序的实例句柄;
IDB_BITMAP1
是在“
1.1.2
导入位图”中导入的位图
ID
。位图的句柄保存在
hBitmap
中。
接下来通过控件的成员变量m_image调用其成员函数SetBitmap()来设置要显示的位图。
m_image.SetBitmap(hBitmap);
其中,hBitmap
是要显示位图的句柄。
通过以上代码,也可以实现在Picture Control控件中显示指定的位图。