【问题标题】:Does overriding OnNcPaint() affect the painting of the client area of a window?重写 OnNcPaint() 会影响窗口客户区的绘制吗?
【发布时间】:2009-01-08 03:41:25
【问题描述】:

我想改变窗口标题栏的外观,所以我决定重写CMainFrameOnNcPaint() 方法。但是当我这样做时,我发现了一个问题。如果有另一个窗口覆盖了我的窗口,我快速拖动窗口,我的窗口客户区的内容就消失了,直到我停止拖动才出现。

我覆盖的OnNcPaint() 如下所示:

void CMainFrame::OnNcPaint()
{
    CDC* pWinDC = GetWindowDC();
    //do some drawing
    ReleaseDC(pWinDC);
}

我的方法有问题吗? 谢谢!

【问题讨论】:

    标签: c++ windows mfc onncpaint


    【解决方案1】:

    除非您使用设置为排除客户区域的剪切区域,否则您可以OnNcPaint() 对其进行绘制。所以...如果你的绘图逻辑不能被修改以通过其他方式排除客户端,请先设置一个适当的剪辑区域:

    CRect rect;
    GetWindowRect(&rect);
    ScreenToClient(&rect);
    CRect rectClient;
    GetClientRect(&rectClient);
    rectClient.OffsetRect(-rect.left, -rect.top);
    rect.OffsetRect(-rect.left, -rect.top);
    pWinDC->ExcludeClipRect(&rectClient);
    // ...
    // draw stuff here
    // ...
    pWinDC->SelectClipRgn(NULL);
    

    【讨论】:

    • 客户端矩形不包括滚动条之类的东西,因此这将允许 ncpaint 绘制它们。仅供参考。
    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多