65.9K
CodeProject 正在变化。 阅读更多。
Home

绘制 CToolbar 父窗口 (AfxControlBar)。

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.38/5 (11投票s)

2008年3月27日

CPOL
viewsIcon

51962

downloadIcon

934

绘制 CToolbar 父窗口 (AfxControlBar) 的背景。

引言

我试图绘制 CToolbar 的背景颜色(绘制整个窗口)。 在此过程中,我只能绘制工具栏窗口,而无法绘制整个工具栏窗口区域,即“AfxControlBar”(CToolbar 的父窗口)。 然后我找到了绘制“AfxControlBar”的解决方案,我认为应该与大家分享这个解决方案。

使用代码

在您的应用程序中,重写 CMainFrame 中的 OnNotify 成员函数,以处理用于绘制 AfxControlBarWM_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);
}
© . All rights reserved.