MFC設定視窗背景顏色(很全很強大)
如何修改frame視窗的背景顏色?
MDI視窗的客戶區是由frame視窗擁有的另一個視窗覆蓋的。為了改變frame視窗背景的顏色,只需要這個客戶區的背景顏色就可以了。你必須自己處理WM_ERASEBKND訊息。下面是工作步驟:
建立一個從CWnd類繼承的類,就叫它CMDIClient吧;
在CMDIFrameWnd中加入CMDIClient變數;(具體情況看下面的程式碼)
#include "MDIClient.h" class CMainFrame : public CMDIFrameWnd { ... protected: CMDIClient m_wndMDIClient; } |
過載CMDIFrameWnd::OnCreateClient,下面是這段程式碼,請注意其中的SubclassWindow();
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) ) { m_wndMDIClient.SubclassWindow(m_hWndMDIClient); return TRUE; } else return FALSE; } |
最後要在CMDIClient中加入處理WM_ERASEBKGND的函式。
如何改變view的背景顏色?
若要改變CView,CFrameWnd或CWnd物件的背景顏色需要處理WM_ERASEBKGND訊息,下面就是一個範例程式碼:
BOOL CSampleView::OnEraseBkgnd(CDC* pDC) //設定brush為希望的背景顏色 //儲存舊的brush //畫需要的區域 return TRUE; } |
若要改變CFromView繼承類的背景顏色
下面是一個範例程式碼:
HBRUSH CMyFormView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) switch (nCtlColor) case CTLCOLOR_BTN: pDC->SetBkMode(TRANSPARENT); } CBrush* back_brush; } } return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor)); } |
如何修改frame視窗的背景顏色?
MDI視窗的客戶區是由frame視窗擁有的另一個視窗覆蓋的。為了改變frame視窗背景的顏色,只需要這個客戶區的背景顏色就可以了。你必須自己處理WM_ERASEBKND訊息。下面是工作步驟:
建立一個從CWnd類繼承的類,就叫它CMDIClient吧;
在CMDIFrameWnd中加入CMDIClient變數;(具體情況看下面的程式碼)
#include "MDIClient.h" class CMainFrame : public CMDIFrameWnd { ... protected: CMDIClient m_wndMDIClient; } |
過載CMDIFrameWnd::OnCreateClient,下面是這段程式碼,請注意其中的SubclassWindow();
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) ) { m_wndMDIClient.SubclassWindow(m_hWndMDIClient); return TRUE; } else return FALSE; } |
最後要在CMDIClient中加入處理WM_ERASEBKGND的函式。
如何改變view的背景顏色?
若要改變CView,CFrameWnd或CWnd物件的背景顏色需要處理WM_ERASEBKGND訊息,下面就是一個範例程式碼:
BOOL CSampleView::OnEraseBkgnd(CDC* pDC) //設定brush為希望的背景顏色 //儲存舊的brush //畫需要的區域 return TRUE; } |
若要改變CFromView繼承類的背景顏色
下面是一個範例程式碼:
HBRUSH CMyFormView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{
pDC->SetBkMode(TRANSPARENT);
//不加任何處理或設定背景為透明
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
}