![](/img/trans.png)
[英]Handling WM_NCPAINT “breaks” DWM glass rendering on Vista/Aero
[英]Issues with handling ON_WM_NCPAINT() message and OnNCPaint() override. (Overriding default MFC window border) [2020]
我正在嘗試為我的 Windows 應用程序創建一個“暗模式”主題,並且在覆蓋 OnNcPaint() function 時遇到了一些不一致的問題。 請原諒那個巨大的紅色盒子。 我只是以這種方式着色它以顯示問題。
這是我最初的 function:
void CSoftwareDlg::OnNcPaint() {
Default(); //I can also use "CDialgoEx::OnNcPaint();" here for the same result because it just calls "Default..."
CDC* pDC = GetWindowDC();
CRect rect;
GetWindowRect(&rect);
rect.top = 0;
rect.left = 0;
rect.bottom = rect.Size().cy;
rect.right = rect.Size().cx;
pDC->FillRect(rect, &m_brushRed);
ReleaseDC(pDC);
}
我還可以添加一個Sleep(1000);
達到一些不同的結果,但不值得張貼圖片。 最終......我的覆蓋並不是真正的“覆蓋”,因為它應該基於我看過的大量示例代碼。 我知道Default();
是某種線程回調 function,但我不知道如何進一步解決此問題。
我是否需要等待Default();
命令? 我是否需要將OnNcPaint()
實現為某種回調 function? 我需要覆蓋其他功能嗎?
正如@dxiv 所說,請處理WM_NCACTIVATE
消息,
像這樣(win32下),
case WM_NCACTIVATE:
{
// Paint the non-client area now, otherwise Windows will paint its own
RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW);
}
break;
不確定您的客戶區域是否也需要保持相同的顏色。
如有必要,您可以額外處理WM_ERASEBKGND
消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.