繁体   English   中英

单击EDIT控件时,WINAPI保存对话框将打开两次

[英]WINAPI save dialog opens twice when clicking on EDIT control

我有一个分配了ID( IDC_FILE_NAME_INPUT )的Win32 EDIT控件,并且希望单击该控件时打开“ 保存”对话框 我在窗口处理器的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控件时,对话框打开,但是当我关闭对话框( CancelSaveX )时,它再次出现。 只有这次,当我再次关闭它时,它保持关闭状态。 如果我删除SetFocus(hWnd); 部分,它会一直保持打开状态,直到我关闭整个应用程序为止。 打开对话框后,我需要知道如何使EDIT失去焦点,或者我应该用除WM_COMMAND其他消息来执行此操作

对于众多不同事件,将EDIT控件的父级发送给WM_COMMAND 在此处进行记录: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb775458(v=vs.85).aspx 看一下以这种方式通知了多少个不同的事件。

您以相同的方式处理所有此类通知。 相反,您需要区分以wParam的高位单词传递的通知代码。 您需要测试该通知代码,并且仅响应一个或多个特定事件。 因此,仅检测该控件的事件通知是不够的,还必须检测它是哪个事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM