mfc实现以图片作为对话框的背景

 下载列表:

 程序下载

 源代码下载




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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值