如何给MFC对话框设置背景图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何给MFC对话框设置背景图片相关的知识,希望对你有一定的参考价值。
现在的问题是我想在对话框的不同地方同时设置两张图片;
CPaintDC dc1(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem1;
dcMem1.CreateCompatibleDC(&dc1);
CBitmap bmpBackground1;
BITMAP bitmap1;
bmpBackground1.LoadBitmap(IDB_MUSIC2);
bmpBackground1.GetBitmap(&bitmap1);
dcMem1.SelectObject(&bmpBackground1);
dc1.StretchBlt(0,0,rect.Width(),rect.Height()*2/15,&dcMem1,0,0,
bitmap1.bmWidth,bitmap1.bmHeight,SRCCOPY);
CPaintDC dc2(this);
CDC dcMem2;
dcMem2.CreateCompatibleDC(&dc2);
CBitmap bmpBackground2;
BITMAP bitmap2;
bmpBackground2.LoadBitmap(IDB_MUSIC1);
bmpBackground2.GetBitmap(&bitmap2);
dcMem2.SelectObject(&bmpBackground2);
dc2.StretchBlt(rect.Width()*10/21,rect.Height()*2/15,rect.Width(),rect.Height(),&dcMem2,0,0,
bitmap2.bmWidth,bitmap2.bmHeight,SRCCOPY);
我就把它复制了一下,可是这样就出现断点了,而我随便删除一个又可以,请问大侠们有什么别的办法吗 ?
锐英源这有例子。 参考技术B picture 控件几个都可以 放到你想的位置 加你想要的图片本回答被提问者采纳
MFC设置对话框背景和边框颜色
对于对话框,只需要重载默认的消息处理函数就行了:
// 重载默认的消息处理函数,主要处理WM_MOVE WM_PAINT WM_NCPAINT WM_NCACTIVATE WM_NOTIFY这// 几个消息就可以了
LRESULT CMyDialog::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam); if (!::IsWindow(m_hWnd)) return lrst; if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY) { CDC* pWinDC = GetWindowDC(); if (pWinDC) DrawBorder(pWinDC); ReleaseDC(pWinDC); } return lrst; //return CDialog::DefWindowProc(message, wParam, lParam); }
// 重画边框的具体代码 void CMyDialog::DrawBorder(CDC *pDC) { if (m_hWnd ) { CBrush Brush(RGB(255, 0, 0)); CBrush* pOldBrush = pDC->SelectObject(&Brush); CRect rtWnd; GetWindowRect(&rtWnd); CPoint point; //填充顶部框架 point.x = rtWnd.Width(); point.y = GetSystemMetrics(SM_CYFRAME)+1; pDC->PatBlt(0, 0, point.x, point.y, PATCOPY); //填充左侧框架 point.x = GetSystemMetrics(SM_CXFRAME); point.y = rtWnd.Height(); pDC->PatBlt(0, 0, point.x, point.y, PATCOPY); //填充底部框架 point.x = rtWnd.Width(); point.y = GetSystemMetrics(SM_CYFRAME) + 1; pDC->PatBlt(0, rtWnd.Height()-point.y, point.x, point.y, PATCOPY); //填充右侧框架 point.x = GetSystemMetrics(SM_CXFRAME); point.y = rtWnd.Height(); pDC->PatBlt(rtWnd.Width()-point.x, 0, point.x, point.y, PATCOPY); } }
以上代码虽然是针对对话框的,不过,对于一般的窗口,稍微修改一下,估计也是可以的。
如果出現对话框的边框颜色没有修改,可以用:
InvalidateRect(NULL); // 在边框改变的对话框中
或者如果有父窗口,在父窗口中调用:
RedrawWindow(NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN );
这样应该就差不多了。
---------------------------------------------------------------------------------------------------------------------
以下为修改对话框背景颜色方法:
重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):
void CExampleDlgDlg::OnPaint() { if (IsIconic()) … else { CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景 CDialog::OnPaint(); }
或者在OnInitDialog函数中调用
SetBackgroundColor(RGB(0,255,0));
以上是关于如何给MFC对话框设置背景图片的主要内容,如果未能解决你的问题,请参考以下文章