c++ - 查找“33614080”的 mfc 大型机 OnCommand 消息
问题描述
编辑3:这不好-每次窗口失去焦点时都会发送向右箭头键-不良行为。
我尝试在用户单击关闭框时进行拦截,但到目前为止我还没有在类向导中找到它。如果有人知道如何检测此事件,请告诉我。
原始帖子:
编辑 2:我已经编辑了不使用幻数的解决方案的代码,但正如 Mark Ransom 所指出的,这不是为输入提示选择特定按钮的正确方法,因此这可能正常工作,但它是一个黑客。
我在 MFC 中有一个旧版应用程序,在退出以保存更改时会有提示。当输入提示打开时,当提示用户在 CMainFrame 窗口中保存更改时,应选择“否”按钮。这样用户就可以按 Enter 键退出,而无需使用鼠标来选择它。是的,我知道用户可以简单地按“N”键来激活“否”按钮,但需要选择“否”按钮,以便用户可以按 Enter 键退出。
使用消息循环:
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
在提示保存更改之前,我可以在窗口关闭时检测到一条消息。
所以我添加了这个数值,并发送右箭头键在输入消息提示中选择“否”。
编辑:添加 switch 语句的开头以显示正在评估的内容。
// this is part of 'BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)'
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch( wParam )
{
...
//case 33614080:
//SendRightArrowKey();
//break;
default:
WORD loWord = LOWORD(wParam);
if (ID_RECORD_FIRST == loWord)
{
WORD HiWord = HIWORD(wParam);
unsigned short value = HiWord;
char buff[32];
_itoa(value, buff, 10);
if (EN_KILLFOCUS == value )
{
SendRightArrowKey();
}
return TRUE;
}
}
return CFrameWnd::OnCommand(wParam, lParam);
}
void SendRightArrowKey()
{
INPUT output[2];
ZeroMemory(&output, sizeof(output));
// Right arrow key down
output[0].type = INPUT_KEYBOARD;
output[0].ki.wVk = VK_RIGHT;
output[0].ki.time = 0;
output[0].ki.dwExtraInfo = 0;
// Right arrow key up
output[1].type = INPUT_KEYBOARD;
output[1].ki.wVk = VK_RIGHT;
output[1].ki.dwFlags = KEYEVENTF_KEYUP;
output[1].ki.time = 0;
output[1].ki.dwExtraInfo = 0;
int retval1 = SendInput(2, output, sizeof(INPUT));
}
这适用于 win32 和 x64,但感觉就像一个 hack——尤其是因为我找不到数字代码 33614080 的任何定义。应该有一个常量或宏用于为 WParam 发送的 windows 消息,以防万一Microsoft 曾经更改此值。
有谁知道这个 WParam 值可能代表的常量,或者默认选择“否”按钮的另一种方式?
提前感谢您的任何回复。
感谢 Adrian 弄清楚这些值。
解决方案
推荐阅读
- python - 从 amazon.ca 上刮掉产品标题
- php - 将数据库中的数据显示到表单中?
- php - 使用 MySQL 的 Android 登录页面上的用户名和密码错误
- vue.js - Pwa 错误地考虑 api 缓存而不是 db?
- rust - 如果我从不将 MutexGuard 分配给变量,它在哪里?
- php - PHP:在数组 1 深度到多深度 json 之间转换
- swift - Swift 4.1 中的侧边菜单
- javascript - 如何创建像 CTRL+F 这样的函数来获取 PDF 和 HTML 上的字符串
- c++ - SpaceBeforeCpp11BracedList 选项在 macOS 中通过 Homebrew 安装的 clang 格式是否不可用?
- unity3d - 如何以编程方式在 Unity 中设置 RectTransform?