您的位置:首页 > 大数据 > 人工智能

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

2014-03-20 09:18 369 查看
解决方案

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"

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: