Диалоговое окно сохранения WINAPI открывается дважды при нажатии на элемент управления EDIT

У меня Win32 EDIT управление с присвоенным идентификатором (IDC_FILE_NAME_INPUT) и я хочу Сохранить диалог чтобы открыть, когда этот элемент управления нажата.
Я справлюсь с этим в 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)\0*.txt\0All Files (*.*)\0*.*\0");
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 управление, диалог открывается, но когда я его закрываю (отменить, Сохранить или же Икс), это появляется снова. Только на этот раз, когда я закрываю его снова, он остается закрытым. Если я удалю SetFocus(hWnd); частично, он просто продолжает открываться, пока я не закрою все приложение. Мне нужно знать, как сделать EDIT потерять фокус, как только откроется диалоговое окно, или, может быть, я должен сделать это с другим сообщением, чем WM_COMMAND

0

Решение

EDIT родительский элемент управления отправлен WM_COMMAND для множества разных событий. Это задокументировано здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx. Посмотрите, сколько различных событий уведомляется таким образом.

Вы обрабатываете все такие уведомления одинаково. Вместо этого вам нужно различать код уведомления, который передается в старшем слове wParam, Вам необходимо проверить этот код уведомления и отвечать только на конкретное событие или события, представляющие интерес. Таким образом, недостаточно обнаружить уведомление о событии для этого элемента управления, вы также должны определить, какое это событие.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]