gpt4 book ai didi

最初未绘制组合框下拉列表

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:51 25 4
gpt4 key购买 nike

正如标题所述,我的问题是 WinAPI 组合框的扩展列表在打开时显示为空白。但是,任何后续更新(如移动光标时)都会重绘受影响的项目。此外,该列表不会响应任何鼠标输入。这在 Windows XP 和 7 中都会发生。

据我所知,在 Spy++ 中模态列表接收 WM_ERASEBKGND 但未处理 WM_PAINT。顺便说一句,在模态对话框中显示组合框效果很好,但将控件创建为常规顶级窗口的一部分或生成与无模态子窗口相同的对话框模板则不然。

我猜我忘记了一些相当基本和令人尴尬的东西,例如没有设置剪辑样式或在消息循环中调用 DoDialogMagic 或类似的东西,但我似乎无法自己弄清楚。

无论如何,这是一个最小的重现案例:

#include <windows.h>
#include <commctrl.h>
#include <tchar.h>
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "comctl32.lib")

INT CALLBACK _tWinMain(HINSTANCE instance, HINSTANCE parent, LPTSTR commands, INT show) {
static const TCHAR title[] = _T("Combo Problem");
HWND hwnd;
HWND combo;
MSG msg;

/* First create our parent window */
const WNDCLASS cls = {
/* style */ 0,
/* lpfnWndProc */ DefWindowProc,
/* cbClsExtra */ 0,
/* cbWndExtra */ 0,
/* hInstance */ instance,
/* hIcon */ NULL,
/* hCursor */ LoadCursor(NULL, IDC_ARROW),
/* hbrBackground */ (HBRUSH) (COLOR_INACTIVEBORDER + 1),
/* lpszMenuName */ NULL,
/* lpszClassName */ title
};
RegisterClass(&cls);
hwnd = CreateWindow (
/* lpClassName */ title,
/* lpWindowName */ title,
/* dwStyle */ WS_OVERLAPPEDWINDOW | WS_VISIBLE,
/* x */ CW_USEDEFAULT,
/* y */ CW_USEDEFAULT,
/* nWidth */ 125,
/* nHeight */ 70,
/* hWndParent */ NULL,
/* hMenu */ NULL,
/* hInstance */ instance,
/* lpParam */ NULL
);

/* Now create and populate the combo box itself */
InitCommonControls();
combo = CreateWindow (
/* lpClassName */ _T("COMBOBOX"),
/* lpWindowName */ _T(""),
/* dwStyle */ CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE,
/* x */ 10,
/* y */ 10,
/* nWidth */ 100,
/* nHeight */ 150,
/* hWndParent */ hwnd,
/* hMenu */ NULL,
/* hInstance */ instance,
/* lpParam */ NULL
);
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM) _T("Alpha"));
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM) _T("Beta"));
SendMessage(combo, CB_ADDSTRING, 0, (LPARAM) _T("Gamma"));

/* Finally run the message pump */
while(GetMessage(&msg, hwnd, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

最佳答案

您正在向 GetMessage 传递一个 hwnd,这通常不是您想要的,只需使用 NULL。

关于最初未绘制组合框下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7379549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com