0

我在 Windows 平台上使用 C++/MFC 进行编码(使用 MS VS2008。)我有这个设置为只读的编辑控件(基本上是一个文本框)。控件显示一些基本信息。我想在我的应用程序中添加一个“复活节彩蛋”,即当用户 Ctrl+Shift 单击此编辑控件时,它必须显示一些附加信息。问题是如何使用 MFC/本机 WinAPI 捕获这样的点击事件?

4

2 回答 2

1

最直接的方法是使用SetWindowLong和捕获WM_LBUTTONDOWN事件对编辑控件进行子类化。然后,您需要调用GetAsyncKeyState或等效检查特定键是否被按下,并显示消息。

于 2012-04-18T01:30:17.157 回答
0

无需进行子类化。抓住WM_PARENTNOTIFY

case WM_PARENTNOTIFY: {
    if (LOWORD(wParam) == WM_LBUTTONDOWN)
        printf("x: %i, y: %i\n", LOWORD(lParam), HIWORD(lParam));
}
break;

默认情况下,对话框中的子窗口具有WS_EX_NOPARENTNOTIFY样式,因此不会通知父窗口。您应该删除此样式。

case WM_INITDIALOG: {
    HWND hChildWnd = GetDlgItem(hWnd, IDC_CHILD);
    LONG style = GetWindowLong(hChildWnd, GWL_EXSTYLE);
    style &= ~WS_EX_NOPARENTNOTIFY;
    SetWindowLong(hChildWnd, GWL_EXSTYLE, style);
    ...

PS我希望还不算太晚:D

于 2020-08-01T18:12:23.920 回答