大家好,我有一个动态创建的小对话框,它有一个文本框和一个按钮..如果用户按下 TAB 键,它必须在两个控件(文本框和按钮)之间切换......我尝试使用 SetwindowPos.. .但它似乎没有解决我的问题......请给我一个解决方案......在下面的代码中......我也尝试在taborder中包含主窗口......仍然不起作用
//创建对话框
HWND dialogHandle = CreateWindowEx(0,WC_DIALOG,L"Security Alert",WS_OVERLAPPEDWINDOW|WS_VISIBLE,600,300,280,160,NULL,NULL,NULL,NULL);
//create textboxcontrol within the dialog
HWND textBoxHandle = CreateWindowEx(WS_EX_CLIENTEDGE,L"EDIT",L"",WS_CHILD|WS_VISIBLE |ES_PASSWORD | WS_TABSTOP,123,48,110,25,dialogHandle,(HMENU)IDD_TEXTBOX,NULL,NULL);
//create button
HWND buttonHandle = CreateWindowEx(NULL,L"Button",L"OK",WS_CHILD|WS_VISIBLE| WS_TABSTOP,151,85,85,25,dialogHandle,(HMENU)ID_PASSWORD_OK,NULL,NULL);
Run Code Online (Sandbox Code Playgroud)
//设置窗口位置
SetWindowPos(NULL,textBoxHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(textBoxHandle,buttonHandle,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Run Code Online (Sandbox Code Playgroud)
在您的消息循环中,您需要调用IsDialogMessage要由对话框处理的键盘事件(例如 Tab 键)。这在此处进行了描述。
下面是一个例子:
while (GetMessage(&msg, NULL, 0, 0) > 0) {
if (!IsDialogMessage(dialogHandle, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Run Code Online (Sandbox Code Playgroud)