有沒有辦法改變MFC(2005)中MDIParent窗口的背景顏色?設置背景顏色CMDIFrameWnd
我試着攔截了ON_WM_CTLCOLOR和ON_WM_ERASEBKGND,但都沒有工作。 OnEraseBkgnd可以工作,但它會被標準的WM_CTL顏色覆蓋。
乾杯
有沒有辦法改變MFC(2005)中MDIParent窗口的背景顏色?設置背景顏色CMDIFrameWnd
我試着攔截了ON_WM_CTLCOLOR和ON_WM_ERASEBKGND,但都沒有工作。 OnEraseBkgnd可以工作,但它會被標準的WM_CTL顏色覆蓋。
乾杯
CMDIFrameWnd實際上被稱爲MDIClient窗口的另一個窗口覆蓋。這是一篇關於如何繼承這個MDIClient窗口並更改背景顏色的Microsoft文章。我自己試了一下,效果很好。
只是猜測在這裏,但嘗試處理ON_WM_PAINT。
創建一個類派生的CWnd(CClientWnd例如)
在您的CWnd派生類手柄
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint(void);
afx_msg void OnSize(UINT nType, int cx, int cy);
您需要以下消息映射條目:
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_WM_SIZE()
在OnEraseBkgnd中只返回TRUE,你會完成所有的在OnPaint的工作
在OnPaint中,做任何你喜歡的事情。要填充顏色,你可以做
CBrush brush;
brush.CreateSolidBrush(COLORREF(RGB(80, 160, 240)));
CRect clientRect;
GetClientRect(clientRect);
CPaintDC dc(this);
dc.FillRect(clientRect, &brush);
在OnSize中調用超類,然後無效以強制重繪。
在大型機,聲明一個成員CClientWnd(m_clientWnd例如)
在您的主機的OnCreate,首先調用父類的,然後
m_clientWnd.SubclassWindow(m_hWndMDIClient);
似乎有一個簡單的解決方案這個問題在VS2008中至少有:
在
的CMainFrame :: OnPaint中()
{
..
//獲取背景窗口
的CWnd * PWND = CWnd的:: FromHandle(m_hWndMDIClient)的直流;
CPaintDC dc1(pWnd);
//然後在這個DC
}
花花公子繪製或塊傳送,沒有我給實際的答案,而不是答案的鏈接? – 2008-10-15 00:21:40