我正在使用Dialog向用户询问输入信息,但我的窗口会挂起'用户完成后(控件不再响应,但它仍然可见)并且仅在应用程序退出时消失。
这是我的代码:
LRESULT CALLBACK Level2Auth(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch (Message)
{
case WM_CREATE:
{
{... do stuff ...}
CreateWindow(L"BUTTON", L"Connect",
WS_VISIBLE | WS_CHILD | WS_BORDER,
370, 10, 70, 20,
hwnd, (HMENU)1, NULL, NULL);
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case 1:
{
{... retrieve input ...}
Level2Auth(NULL, WM_DESTROY, NULL, NULL);
break;
}
default:
{
break;
}
}
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
消息循环:
INT WINAPI launchLevel2Auth()
{
MSG Msg; HWND hwnd;
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, L"Level2AuthPopUp", L"Remote PKCS#11 PIN entry", WS_VISIBLE | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
100,
NULL, NULL, hInstance, NULL);
if (hwnd == NULL) {
return 0;
}
while (GetMessage(&Msg, NULL, 0, 0) > 0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
我的目的是在文本字段中检索一些数据作为" Connect"单击按钮,然后关闭窗口。
非常感谢您的回答。
答案 0 :(得分:2)
当您直接使用WM_DESTROY
消息调用自己的消息处理程序时,您将绕过任何需要由WINAPI框架完成的清理。相反,请使用DestroyWindow
:
...
switch (LOWORD(wParam))
{
case 1:
{
{... retrieve input ...}
DestroyWindow (hwnd);
// Level2Auth(NULL, WM_DESTROY, NULL, NULL);
break;
}
...
进一步阅读的文章:Destroying Windows in WINAPI。