下载列表:
1建立对话框类型mfc项目,不支持缩放,最大最小化,这样可以保证图片正常显示
2将准备好的图片添加到项目中去,ID设置为IDB_BACKGROUND
3在生成的Dialog派生类头文件中添加如下变量
protected: //对话框背景设置变量 CBitmap bitmapBackground; CBrush brushHollow; CSize sizeBitmap;
4在生成的Dialog派生类头文件中添加如下消息函数
//当窗口背景要被擦除时,此函数会被调用 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//框架调用此函数,通知窗口其将被消毁 afx_msg void OnDestroy();
//当子控件被绘制时,会调用此函数 afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor);
5对应的在源文件中添加消息映射
ON_WM_ERASEBKGND() ON_WM_DESTROY() ON_WM_CTLCOLOR()
6在构造函数中创建空白画刷
CdialogDlg::CdialogDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CdialogDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //创建空白画刷 brushHollow.CreateStockObject(HOLLOW_BRUSH); }
7在OnInitDialog函数中设置窗口大小(与图片大小就保持一致),加载背景图片,保存图片大小
BOOL CdialogDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here //设置窗口位于屏幕中心,大小为485x299 MoveWindow(0,0,485,299); //加载背景图片,保存图片的大小 bitmapBackground.LoadBitmapW(IDB_BACKGROUND); BITMAP bitmapStruct; bitmapBackground.GetBitmap(&bitmapStruct); sizeBitmap=CSize(bitmapStruct.bmWidth,bitmapStruct.bmHeight); return TRUE; // return TRUE unless you set the focus to a control }
8在OnEraseBkgnd中绘制背景
BOOL CdialogDlg::OnEraseBkgnd(CDC* pDC) { CDialog::OnEraseBkgnd(pDC); //画出背景图片 CDC dc; dc.CreateCompatibleDC(pDC); CBitmap* pOldBitmap=dc.SelectObject(&bitmapBackground); CRect rtClient; GetClientRect(&rtClient); pDC->BitBlt(0,0,sizeBitmap.cx,sizeBitmap.cy,&dc,0,0,SRCCOPY); return TRUE; }
9在OnDestroy函数中释放资源
void CdialogDlg::OnDestroy() { CDialog::OnDestroy(); //释放资源 bitmapBackground.DeleteObject(); brushHollow.DeleteObject(); }
10在OnCtlColor中设置背景模式为透明,返回空白控件画刷,
这样就它们就会直接出现在背景图片上
HBRUSH CdialogDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor) { //设置背景模式为透明 pDC->SetBkMode(TRANSPARENT); //返回空白画刷 return brushHollow; }
备注:关于相关函数的详细说明,请参见mfc.项目类型不同,方法可能不同,请查阅相关资料进行更改.
以上内容属于个人理解,仅供参考,不保证正确. 如果发现错误或有建议请与我联系,谢谢.
email: linjieligc@qq.com
qq:914196158
程序设计交流群:250967270
Citius, Altius, Fortius