簡體   English   中英

使用 Direct2D 在非客戶區繪圖

[英]Draw in the nonclient area with Direct2D

在此頁面上: https://docs.microsoft.com/en-us/windows/win32/gdi/wm-ncpaint解釋了如何使用 GDI 在非客戶區繪圖。

如何使用 Direct2D 在 window 的非客戶區繪圖,而無需處理 GDI 或 GDI+?

首先, WM_NCPAINT是舊的。 使用它將禁用 window 的 DWM 主題,從而提供 windows 經典/7 基本外觀。 所以不要這樣做。

但是要使用任何渲染 API 在客戶區繪制,請從 window 中刪除標准 window 幀,方法是在WM_NCCALCSIZE消息中的 wParam 為真時返回 0。

case WM_NCCALCSIZE:
    if (static_cast<bool>(wParam))
           return 0;
    return DefWindowProc(hwnd, msg, wParam, lParam);

如果要保留標准邊界,請重新計算 WM_NCCALCSIZE 中的WM_NCCALCSIZE邊界。

然后要獲得“客戶區”標題欄,請使用DwmExtendFrameIntoClientArea並從TOP擴展它。

確保處理WM_NCHITTEST以便拖動 window 也可以工作。

確保在 direct2d 中預乘您的ALPHA 在 (0,0) 處繪制一個矩形將在您的新自定義 window 的標題欄中繪制一個矩形。

參見: https://github.com/oberth/custom-chrome

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM