Tip: Painting the CToolbar's Parent Window (AfxControlBar)
Posted
by Paresh Chitte
on April 23rd, 2008
Using the Code
In your application, override OnNotify member function in your CMainFrame to handle the WM_NOTIFY message for painting the AfxControlBar.
class CMainFrame : public CMDIFrameWnd { ..... CBrush m_BrushDocBar; BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult); ..... }
In MainFrm.cpp, in constructor create a solid brush as follows:
CMainFrame::CMainFrame() { m_BrushDocBar.CreateSolidBrush(RGB(0, 255, 255)); }
In MainFrm.cpp, provide the definition of OnNotify() function as follows:
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); }