簡體   English   中英

無法更改窗口背景

[英]Can't change background of window

我開發了一個 win32 應用程序並使用這個示例創建了一個顏色選擇器。 我更新,如果像聲明這個改變我的應用程序的背景,當用戶點擊“確定”,在顏色對話框,但沒有任何變化。 我的錯誤在哪里?

if (ChooseColor(&cc) == TRUE) {
    HBRUSH hbrush = CreateSolidBrush(cc.rgbResult);
    rgbCurrent = cc.rgbResult;
    SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG)hbrush);
}

以下代碼將起作用。

首先,SetClassLongPtr() 返回先前的值,在本例中,即先前設置為窗口類 (hWnd) 的 HBRUSH。 您應該刪除該對象以避免內存泄漏。

之后,調用 InvalidateRect() 使顏色更改生效。 因為當窗口需要重新繪制時會使用新創建的畫筆。

InvalidateRect() 將 WM_ERASEBKGND 發送到窗口。

if (ChooseColor(&cc) == TRUE) {
    HBRUSH hbrush = CreateSolidBrush(cc.rgbResult);
    HBRUSH hOldBrush = (HBRUSH)SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG_PTR)hbrush);

    DeleteObject(hOldBrush);
    InvalidateRect(hWnd, NULL, 1);
}

暫無
暫無

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

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