下载列表:
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);
ON_WM_ERASEBKGND()
ON_WM_DESTROY()
ON_WM_CTLCOLOR()
CdialogDlg::CdialogDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CdialogDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//创建空白画刷
brushHollow.CreateStockObject(HOLLOW_BRUSH);
}
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