0

我一直不敢问,因为我确信答案很简单,但是我现在已经在这件简单的事情上撞墙了好几天,并且没有取得任何进展。

我有一个基本窗口,里面有一个像这样的复选框(忽略所有标准的 WndProc 样板),并且允许对话处理(在我的完整应用程序中,我有输入字段,我允许通过选项卡):

hwnd := CreateWindowEx(WS_EX_CLIENTEDGE, g_szClassName, "Sample", WS_VISIBLE + WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 350, 420, NIL, menu, MyInstance(), NIL);
gfhwnd := CreateWindowEx(WS_EX_CLIENTEDGE, "Button", "", WS_CHILD + BS_CHECKBOX + WS_TABSTOP, 250, 130, 17, 17, hwnd, NIL, MyInstance(), NIL);
ShowWindow(hwnd, SW_SHOWNORMAL);
ShowWindow(gfhwnd, SW_SHOWNORMAL);

 WHILE GetMessage( Msg, NIL, 0, 0) DO
    IF NOT IsDialogMessage(hwnd, Msg) THEN
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    END; (* IF *)
 END; (* WHILE *)

我的理解是复选框应该直接启用,并且可以通过单击或键盘打开/关闭。但是,它不会。它总是关闭。如果单击(或激活键盘),按钮会短暂闪烁,然后返回未选中状态。如果我在 WM_COMMAND 中捕获消息,它总是告诉我我单击了“检查”框。我从来没有收到过“UNCHECK”事件。所以,至少它是内部一致的。由于我收到消息,它似乎已启用。

到目前为止,我已经尝试了许多变体来捕获点击,然后强制复选框进入/退出选中状态(包括为其分配自定义 ID)。但是,在我通过 Google 找到的所有各种方法中,它们都不起作用。在所有情况下,该复选框都非常牢固地“未选中”。关于复选框在 Windows 中的工作方式,我缺少哪些微小但至关重要的知识?

4

0 回答 0