ウィンドウの背景を変更するために使用したいドロップダウンメニューがあります。ウィンドウはデフォルトで「冬の背景」になっています。
wClass.hbrBackground = CreatePatternBrush(LoadBitmap(hInst, MAKEINTRESOURCE(WinterBG)));
ドロップダウンメニューの項目が選択されると、CBN_SELCHANGEが開始され、選択した項目の長さと文字列が取得されます。それに基づいて背景を変えてほしい。
case WM_COMMAND:
{
switch(HIWORD(wParam))
{
case CBN_SELCHANGE:
{
ItemIndex = SendMessage((HWND)lParam, (UINT)CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
int ItemLen = SendMessage((HWND)lParam, (UINT)CB_GETLBTEXTLEN, (WPARAM)0, (LPARAM)0);
char* ListItem = (char*)malloc(ItemLen+1);
(char)SendMessageA((HWND)lParam, (UINT)CB_GETLBTEXT, (WPARAM)ItemIndex, (LPARAM)ListItem);
//////////////////////////////////////////////////////////////////////////////////////////////////
// I am certain this can be optimized
if ( ItemLen == 5 && ListItem[0] == 'S' ) // Spring
{
MessageBox(NULL, L"Spring chosen", L"Confirmed", MB_ICONINFORMATION | MB_OK);
HBRUSH brush = CreatePatternBrush(LoadBitmap(wClass.hInstance, MAKEINTRESOURCE(SpringBG)));
SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG)brush);
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
}
.....
SetClassLongPtrが期待どおりに機能していません。ウィンドウを更新した後(InvalidateRectとUpdateWindowがそれを達成することを読みました)、何も変更されません。背景は「WinterBG」に残ります。
SetClassLongPtrを正しく使用していますか?そうでない場合、他にどのように背景を変更できますか?