对话框设置背景图片.doc
文本预览下载声明
对话框设置背景图片
CRect rect;
GetClientRect(rect);
CDC *pDC=GetDC(); //这句值得记忆,如何获取当前DC
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP3);
memdc.SelectObject(bitmap);
pDC-BitBlt(0,0,rect.Width(),rect.Height(),memdc,0,0,SRCCOPY);
对于一般的空间及本功能对话框设置背景图片的中心思想大致是:获取本当前对话框坐标及句柄,然后创建图片对象,并加载控件,然后客户对话框选中图片对象并进行转换(最后一句)。
这些都是在OnPaint()下进行的。
Invalidate():立即重绘客户对话框(即立即刷新对话框),调用OnPaint()相关的消息映射。
路径显示图片
MFC界面加载图片大致有两个方法:通过BITMAP控件直接加载 和 通过路径动态加载图片。
通过BITMAP 加载图片很简单没有技术含量。在Resource页面下,添加Resource,然后导入图片(注意是BMP格式的,其他格式暂时没有研究),重命名等设置一下;接下来在对话框中添加picture control 控件,在type中选择bitmap,然后在image 中选择导入的加入的那个BITMAP就可以了。
通过路径加载图片相对复杂一点。picture control保持默认就可以。
CPaintDC dc(this);
HBITMAP bmpHandle;
bmpHandle = (HBITMAP)LoadImage(NULL,_T(图片路径),IMAGE_BITMAP,0,0,LOADFROMFILE);
//路径要使用双CBitmap bmpPicture;
CDC mdcPicture;
CBitmap *bmpFromHandle = bmpPicture.FromHandle(bmpHandle);
CRect rctPicture;
GetDlgItem(picture控件)-GetWindowRect(rctPicture);
//上面那一句很重要,GetDlgItem,获取相关控件
//关联相关控件,比如按钮控件 m_btn.SubclassDlgItem
mdcPicture.CreateCompatibleDC(dc);
CBitmap *bmpPrevious = mdcPicture.SelectObject(bmpFromHandle);
ScreenToClient(rctPicture);
dc.BitBlt(rctPicture.left,rctPicture.top,rctPicture.Width();rctPicture.Heigth(),mdcPicture,0,0,SRCCOPY);
dc.SelectObject(bmpPrevious);
控件背景设置
加载ON_WM_CTLCOLOR消息映射,在相关的响应OmCltcolor响应函数中,添加以下代码可以修改相关控件的背景颜色等。
switch (nCtlColor) {
case CTLCOLOR_EDIT: //这些是相关的控件名称
case CTLCOLOR_MSGBOX:
case CTLCOLOR_DLG :
case CTLCOLOR_STATIC : //在此加入你想要改变背景色的控件消息
pDC-SetBkMode(TRANSPARENT);
HBRUSH B = CreateSolidBrush(RGB(120,182,74)); //COLOR是你想设置的颜色
return (HBRUSH) B; // default: //其他控件设置自己默认的颜色和背景刷.
}
打开文件并获取文件地址
CFileDialog dlg(TRUE,_T(bmp),_T(.bmp),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(位图文件(*.BMP)|*.BMP||));
dlg.DoModal();
CString m_strPath = dlg.GetPathName();
MessageBox(m_strPath);
Invalidate();
显示全部