绘制 CToolbar 父窗口 (AfxControlBar)。






2.38/5 (11投票s)
绘制 CToolbar 父窗口 (AfxControlBar) 的背景。

引言
我试图绘制 CToolbar
的背景颜色(绘制整个窗口)。 在此过程中,我只能绘制工具栏窗口,而无法绘制整个工具栏窗口区域,即“AfxControlBar
”(CToolbar 的父窗口)。 然后我找到了绘制“AfxControlBar
”的解决方案,我认为应该与大家分享这个解决方案。
使用代码
在您的应用程序中,重写 CMainFrame
中的 OnNotify
成员函数,以处理用于绘制 AfxControlBar
的 WM_NOTIFY
消息。
在 MainFrm.h 文件中,声明以下成员变量和成员函数
class CMainFrame : public CMDIFrameWnd
{
.....
CBrush m_BrushDocBar;
BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
.....
}
在 MainFrm.cpp 中,在构造函数中创建一个纯色画笔,如下所示:
CMainFrame::CMainFrame()
{
m_BrushDocBar.CreateSolidBrush(RGB(0, 255, 255));
}
在 MainFrm.cpp 中,提供 OnNotify()
函数的定义,如下所示:
BOOL CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { LPNMHDR pnmh = (LPNMHDR) lParam; if(pnmh->hwndFrom == m_wndToolBar.m_hWnd) { LPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW) lParam; CRect rect; CWnd* pWnd = m_wndToolBar.GetParent(); TCHAR szClassName[200]; GetClassName(pWnd->m_hWnd, szClassName, 200); CString strTemp = szClassName; if(strTemp.Find(_T("AfxControlBar")) >= 0) { SetClassLong(pWnd->m_hWnd, GCL_HBRBACKGROUND, (LONG)m_BrushDocBar.GetSafeHandle()); } } return CMDIFrameWnd::OnNotify(wParam, lParam, pResult); }