Introduction
I was trying to paint the background color (paint entire window) of CToolbar
. In that, I could paint only the toolbar window and not the entire area of the toolbar window which is "AfxControlBar
" (CToolbar's parent window). Then I found the solution for painting the "AfxControBar
", and I thought I should share the solution with you all.
Using the code
In your application, override OnNotify
member function in your CMainFrame
to handle the WM_NOTIFY
message for painting the AfxControlBar
.
In MainFrm.h file, declare the following member variable and member function:
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);
}