RT,希望大家能给个例子。

解决方案 »

  1.   

    自绘标题栏void CIbsServerSafeDlg::DrawTitleBar(CDC *pDC)
    {
    if (!m_hWnd) return; CRect rtWnd, rtButtons, rtClient;
    GetWindowRect(&rtWnd); //整个Window的相对于屏幕的矩形
    GetClientRect(&rtClient);
    //取得整个Title bar的矩形
    m_rtTitle.left = GetSystemMetrics(SM_CXFRAME) - 1;
    m_rtTitle.top = GetSystemMetrics(SM_CYFRAME) ;
    m_rtTitle.right = rtWnd.right-rtWnd.left-GetSystemMetrics(SM_CYFRAME) + 1;
    m_rtTitle.bottom = m_rtTitle.top + GetSystemMetrics(SM_CYCAPTION);
    //重画Title Bar CEnBitmap bmp;
    CString strFile = CUtilityEx::GetBasePath() + "images\\bgtitle.bmp";
    bmp.LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp"); //准备画XP风格按钮
    CEnBitmap* pBitmap = new CEnBitmap;
    CBitmap* pOldBitmap;
    BITMAP bmpInfo;
    CDC* pDisplayMemDC=new CDC;
    pDisplayMemDC->CreateCompatibleDC(pDC); //平铺标题
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\bgtitle.bmp");
    pBitmap->GetBitmap(&bmpInfo);
    pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
    pDC->BitBlt(m_rtTitle.left, m_rtTitle.top, m_rtTitle.Width(), m_rtTitle.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    pDisplayMemDC->SelectObject(pOldBitmap);
    pBitmap->DeleteObject();
    //m_rtTitle.top   += 1;
    m_rtTitle.right += 1;
    m_rtTitle.right -= 1;
    //重画图标
    m_rtIcon.left = rtClient.left + 5;
    m_rtIcon.top = GetSystemMetrics(SM_CYFRAME);
    m_rtIcon.right = m_rtIcon.left + 16;
    m_rtIcon.bottom = m_rtIcon.top + 16; //pDC->DrawIcon(m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
    ::DrawIconEx(pDC->m_hDC, m_rtIcon.left, m_rtIcon.top, AfxGetApp()->LoadIcon(IDR_MAINFRAME), 
    m_rtIcon.Width(), m_rtIcon.Height(), 0, NULL, DI_NORMAL);
    m_rtIcon.OffsetRect(rtWnd.TopLeft());  //重画关闭button
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\exit_nor.bmp");
    pBitmap->GetBitmap(&bmpInfo);
    rtButtons.left = m_rtTitle.right - bmpInfo.bmWidth - 4;
    rtButtons.top = m_rtTitle.top;
    rtButtons.right = rtButtons.left + bmpInfo.bmWidth;
    rtButtons.bottom = rtButtons.top + bmpInfo.bmHeight;
    pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
    pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    pDisplayMemDC->SelectObject(pOldBitmap);
    m_rtButtExit = rtButtons;
    m_rtButtExit.OffsetRect(rtWnd.TopLeft()); 
    pBitmap->DeleteObject(); //重画最大化/恢复button
    if (IsZoomed())
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\res_norm.bmp");
    else
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\max_norm.bmp");
    pBitmap->GetBitmap(&bmpInfo);
    rtButtons.right = rtButtons.left - 1;
    rtButtons.left = rtButtons.right - bmpInfo.bmWidth; pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
    pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    pDisplayMemDC->SelectObject(pOldBitmap);
    m_rtButtMax = rtButtons;
    m_rtButtMax.OffsetRect(rtWnd.TopLeft());
    pBitmap->DeleteObject(); //重画最小化button
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\min_norm.bmp");
    pBitmap->GetBitmap(&bmpInfo);
    rtButtons.right = rtButtons.left - 1;
    rtButtons.left = rtButtons.right - bmpInfo.bmWidth;
    pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
    pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    pDisplayMemDC->SelectObject(pOldBitmap);
    m_rtButtMin = rtButtons;
    m_rtButtMin.OffsetRect(rtWnd.TopLeft());
    pBitmap->DeleteObject(); //重画帮助button
    pBitmap->LoadImage(CUtilityEx::GetBasePath() + "images\\hel_norm.bmp");
    pBitmap->GetBitmap(&bmpInfo);
    rtButtons.right = rtButtons.left - 1;
    rtButtons.left = rtButtons.right - bmpInfo.bmWidth;
    pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
    pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    pDisplayMemDC->SelectObject(pOldBitmap);
    m_rtButtHelp = rtButtons;
    m_rtButtHelp.OffsetRect(rtWnd.TopLeft());
    pBitmap->DeleteObject(); CFont titleFont;
    if( !titleFont.GetSafeHandle() )
    {
    VERIFY(titleFont.CreateFont(
    12,                        // nHeight
    0,                         // nWidth
    0,                         // nEscapement
    0,                         // nOrientation
    FW_BOLD,                 // nWeight
    FALSE,                     // bItalic
    FALSE,                     // bUnderline
    0,                         // cStrikeOut
    GB2312_CHARSET,              // nCharSet
    OUT_DEFAULT_PRECIS,        // nOutPrecision
    CLIP_DEFAULT_PRECIS,       // nClipPrecision
    DEFAULT_QUALITY,           // nQuality
    DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
    _T("宋体"))); 
    }
    CFont *OldFont;
    OldFont = pDC->SelectObject(&titleFont); //重画caption
    int nOldMode=pDC->SetBkMode(TRANSPARENT);
    COLORREF clOldText=pDC->SetTextColor(RGB(0, 0, 0));
    m_rtTitle.right-=GetSystemMetrics(SM_CYSMICON);
    m_rtTitle.left += 16;
    m_rtTitle.top  += 3;
    pDC->SetTextColor(RGB(255, 255, 255));
    pDC->DrawText((LPSTR)"华盾服务器安全专家",-1, &m_rtTitle, DT_LEFT);
    pDC->SetBkMode(nOldMode);
    pDC->SetTextColor(clOldText); pDC->SelectObject(OldFont);
    ReleaseDC(pDisplayMemDC);
    delete pDisplayMemDC;
    delete pBitmap;
    }
      

  2.   

    一种办法是自绘。直接修改的话,字体可以重载OnSetFont消息,颜色的话重载OnCtlColor消息不知道行不行。如果装了VS2008sp1的话,使用向导创建工程后,状态条的类是CMFCStatusBar,
    这个类提供了更改字体颜色和背景颜色的方法。
      

  3.   

    最简单是就是在状态栏的各个Pane上贴上CStatic控件,WM_CTLCOLOR消息中修改CStatic的颜色和字体样式。