解决方案 »

  1.   

    OnNcPaint中指定特定的字体,然后调用基类的OnNcPaint?没有试过,lz可以试试看
      

  2.   

    我是菜鸟。麻烦您告诉我下,在哪调用OnNcPaint?
    LRESULT CMainFrame::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
    {
    if (nMsg==WM_NCPAINT)
    {
    OnNcPaint(); }
    return CMainFrame::DefWindowProc(nMsg,wParam,lParam);
    }
    我也不懂这个代码,然后显示是堆栈溢出麻烦了。
      

  3.   

    DefWindowProc这个是窗口过程的核心,不要自己去改写点击类,在属性窗口中点击消息标签,WM_NCPAIT,将OnNcPaint点出来
      

  4.   

    谢谢您。我在OnNcPaint()中重绘字体后,标题栏就只剩字体了。最大化那三个按钮也找不到了。整个标题栏都是白色,并且非全屏的时候,点击窗口以外的地方,就会变成系统初始化的标题栏。这是为什么呢?
    void CMainFrame::OnNcPaint()
    {
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CFrameWndEx::OnNcPaint()
        CDC* pDC = GetWindowDC();
    int x = GetSystemMetrics(SM_CXSIZE)+GetSystemMetrics(SM_CXBORDER)+GetSystemMetrics(SM_CXDLGFRAME);
    int y = GetSystemMetrics(SM_CYDLGFRAME);
    CRect CapRct;
    GetWindowRect(&CapRct);
    int y1 = GetSystemMetrics(SM_CYICON)-GetSystemMetrics(SM_CYDLGFRAME)-GetSystemMetrics(SM_CYBORDER);
    int x1 = CapRct.Width ()- GetSystemMetrics(SM_CXSIZE)-GetSystemMetrics(SM_CXBORDER)-GetSystemMetrics(SM_CXDLGFRAME);

    CapRct.left  = x;
    CapRct.top = y;
    CapRct.right = x1;
    CapRct.bottom = y1;

    //pDC->FillSolidRect(&CapRct,RGB(0,0,0));
    CFont* pCurFont = GetFont();
    LOGFONT m_lf;
    memset(&m_lf, 0, sizeof(LOGFONT));       // zero out structure
    m_lf.lfHeight = 20;  
    m_lf.lfQuality=NONANTIALIASED_QUALITY;
    _tcsncpy_s(m_lf.lfFaceName, LF_FACESIZE,_T("Times New Roman"), 20);
    CFont capfont ;
    capfont.CreateFontIndirect (&m_lf);
    pCurFont = pDC->SelectObject (&capfont);
    pDC->DrawText(L"My Caption" , &CapRct,  DT_CENTER ); //最好定义一个m_strCaption类成员
    pDC->SetBkColor(RGB(255,255,0));

    }
    这是代码。
      

  5.   

    恐怕: SM_CYCAPTION      Height, in pixels, of a normal caption area. 
    是个常数