我开发了一个win32应用程序,并使用this example创建了颜色选择器。当用户在颜色对话框中单击“确定”时,我更新了if this之类的语句来更改我的应用程序的背景,但没有任何变化。我的错误在哪里?
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);
}