单击 EDIT 控件时 WINAPI 保存对话框打开两次
WINAPI save dialog opens twice when clicking on EDIT control
我有一个带有指定 ID (IDC_FILE_NAME_INPUT
) 的 Win32 EDIT
控件,我希望在单击此控件时打开 保存对话框 .
我在 window 处理器的 WM_COMMAND
消息中处理这个:
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_FILE_NAME_INPUT:
{
SetFocus(hWnd); // If I remove this the dialog opens every time it's closed
OPENFILENAME ofn;
wchar_t szFileName[MAX_PATH] = TEXT("");
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("Text Files (*.txt)[=10=]*.txt[=10=]All Files (*.*)[=10=]*.*[=10=]");
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
ofn.lpstrDefExt = TEXT("txt");
if (GetSaveFileName(&ofn))
{
}
break;
}
}
}
break;
当我单击 EDIT
控件时,对话框会打开,但当我关闭它时(取消、保存或 X),它又出现了。只有这一次,当我再次关闭它时,它会保持关闭状态。如果我删除 SetFocus(hWnd);
部分,它会一直打开自己,直到我关闭整个应用程序。我需要知道如何让 EDIT
在对话框打开后立即失去焦点,或者我应该用 WM_COMMAND
之外的另一条消息来做到这一点
EDIT
控件的父控件被发送 WM_COMMAND
用于大量不同的事件。这记录在这里:https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx。看看以这种方式通知了多少不同的事件。
您正在以相同的方式处理所有此类通知。相反,您需要区分在 wParam
的高位字中传递的通知代码。您需要测试该通知代码并仅响应特定事件或感兴趣的事件。因此,仅检测该控件的事件通知是不够的,您还必须检测它是哪个事件。
我有一个带有指定 ID (IDC_FILE_NAME_INPUT
) 的 Win32 EDIT
控件,我希望在单击此控件时打开 保存对话框 .
我在 window 处理器的 WM_COMMAND
消息中处理这个:
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_FILE_NAME_INPUT:
{
SetFocus(hWnd); // If I remove this the dialog opens every time it's closed
OPENFILENAME ofn;
wchar_t szFileName[MAX_PATH] = TEXT("");
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("Text Files (*.txt)[=10=]*.txt[=10=]All Files (*.*)[=10=]*.*[=10=]");
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
ofn.lpstrDefExt = TEXT("txt");
if (GetSaveFileName(&ofn))
{
}
break;
}
}
}
break;
当我单击 EDIT
控件时,对话框会打开,但当我关闭它时(取消、保存或 X),它又出现了。只有这一次,当我再次关闭它时,它会保持关闭状态。如果我删除 SetFocus(hWnd);
部分,它会一直打开自己,直到我关闭整个应用程序。我需要知道如何让 EDIT
在对话框打开后立即失去焦点,或者我应该用 WM_COMMAND
EDIT
控件的父控件被发送 WM_COMMAND
用于大量不同的事件。这记录在这里:https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx。看看以这种方式通知了多少不同的事件。
您正在以相同的方式处理所有此类通知。相反,您需要区分在 wParam
的高位字中传递的通知代码。您需要测试该通知代码并仅响应特定事件或感兴趣的事件。因此,仅检测该控件的事件通知是不够的,您还必须检测它是哪个事件。