MFC图片控件-加载位图以及添加消息响应
1. 在类向导中添加类Picture1,以CStatic为基类。(新建类以便添加消息响应,若只是主对话框的一个对象,只能添加几个有限的消息,无右键点击,鼠标悬停等)
2. 为图片控件添加变量,先修改ID,由IDC_STATIC改为IDC_PIC_STATIC(不改加不了变量),变量类型改为Picture,变量名m_Pic1。控件属性中的Notify设置为true(默认false,触发事件不会传入父窗口)。
3. 在资源视图中导入位图IDB_BITMAP1
4. 加载位图(写在程序需要加载的地方,例如点击按钮)
CBitmap bitmap1; // CBitmap对象,用于加载位图
HBITMAP hBmp1; // 保存CBitmap加载的位图的句柄
HBITMAP hBmp1; // 保存CBitmap加载的位图的句柄
bitmap1.LoadBitmap(IDB_BITMAP1); // 将位图IDB_BITMAP1加载到bitmap
hBmp1 = (HBITMAP)bitmap1.GetSafeHandle(); // 获取bitmap加载位图的句柄
m_Pic1.SetBitmap(hBmp1); // 设置图片控件m_jzmPicture的位图图片为IDB_BITMAP1
hBmp1 = (HBITMAP)bitmap1.GetSafeHandle(); // 获取bitmap加载位图的句柄
m_Pic1.SetBitmap(hBmp1); // 设置图片控件m_jzmPicture的位图图片为IDB_BITMAP1
若为静态文本框,加载位图需要多一行代码
CBitmap bitmap2;
HBITMAP hBmp2;
HBITMAP hBmp2;
m_Pic2.ModifyStyle(0, SS_BITMAP); //修改样式为位图
bitmap2.LoadBitmap(IDB_BITMAP2);
hBmp2 = (HBITMAP)bitmap2.GetSafeHandle();
m_Pic2.SetBitmap(hBmp2);
bitmap2.LoadBitmap(IDB_BITMAP2);
hBmp2 = (HBITMAP)bitmap2.GetSafeHandle();
m_Pic2.SetBitmap(hBmp2);
5. 添加消息响应
(1)右键控件弹出菜单:
在类向导中选择类Picture1,添加OnRButtonDown消息
先建一个菜单IDR_MENU1,注意菜单要有两级,父级菜单不会显示,所以把要显示的菜单项都写在子级菜单中。
处理程序代码如下:
void Picture1::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMenu menu; //定义下面要用到的cmenu对象
menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单
CMenu *pPopup = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMenu menu; //定义下面要用到的cmenu对象
menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单
CMenu *pPopup = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint point1;//定义一个用于确定光标位置的位置
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, GetParent());//在指定 位置显示弹出菜单
CStatic::OnRButtonDown(nFlags, point);
}
CStatic::OnRButtonDown(nFlags, point);
}
(2)鼠标悬停
添加消息OnMouseMove。(若用OnMouseHover没有反应)