【框架-MFC】MFC MainFrame主客户区添加背景图片或颜色

解决方案

1、使用 virtual BOOL PreTranslateMessage(MSG* pMsg);截获WM_PAINT消息,并推送WM_PAINT消息

2、在OnPaint事件中添加背景图片或颜色

demo:

MainFrame.h
	afx_msg void OnPaint();
	virtual BOOL PreTranslateMessage(MSG* pMsg);

MainFrame.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CBCGPMDIFrameWnd)
	ON_WM_PAINT()
END_MESSAGE_MAP()
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
	if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT)
		PostMessage(WM_PAINT); 
	return CBCGPMDIFrameWnd::PreTranslateMessage(pMsg);
}

void CMainFrame::OnPaint()
{
//	CPaintDC dc(this); // device context for painting
	CDC dc,memdc;
	dc.m_hDC=::GetDC(this->m_hWndMDIClient);
	CRect rect;
	CBitmap bitmap;
	BITMAP szbitmap;
	bitmap.LoadBitmap(IDB_BMP_START);
	bitmap.GetObject(sizeof(BITMAP),&szbitmap);

	CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
	memdc.CreateCompatibleDC(&dc);
	CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
	GetClientRect(&rect);
	StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
	memdc.SelectObject(oldbitmap);
	memdc.DeleteDC();
	dc.DeleteDC();
	CBCGPMDIFrameWnd::OnPaint();
}
resource.h
#define IDB_BMP_START                   147
*.rc
/
//
// Bitmap
//
IDB_BMP_START           BITMAP                  "res\\图片5.BMP"


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值