代码之家  ›  专栏  ›  技术社区  ›  Sanmveg saini

GetOpenFileName函数未打开对话框

  •  1
  • Sanmveg saini  · 技术社区  · 7 年前

    所以我有这个简单的代码,因为我是win32新手,所以不要期望我编写非常困难的代码,然而,这是我的winProc

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                  /* handle the messages */
        {
            case WM_DESTROY: PostQuitMessage (0); break;
            case WM_CREATE : make_controls(hwnd); break;
            case WM_COMMAND: handle_commands(hwnd, wParam, lParam); break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    } 
    

    这是 handle_commands 作用

    void handle_commands(HWND hwnd, WPARAM wp, LPARAM lp){
        if( HIWORD(wp) == BN_CLICKED && LOWORD(wp) == openBtn ){
    // openBtn is the only button in the whole application 
            OPENFILENAME ofn;       // common dialog box structure
            char szFile[260];       // buffer for file name
            HWND hwnd;              // owner window
            HANDLE hf;              // file handle
    
    // Initialize OPENFILENAME
            ZeroMemory(&ofn, sizeof(ofn));
            ofn.lStructSize = sizeof(ofn);
            ofn.hwndOwner = hwnd;
            ofn.lpstrFile = szFile;
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
    // use the contents of szFile to initialize itself.
            ofn.lpstrFile[0] = '\0';
            ofn.nMaxFile = sizeof(szFile);
            ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
            ofn.nFilterIndex = 1;
            ofn.lpstrFileTitle = NULL;
            ofn.nMaxFileTitle = 0;
            ofn.lpstrInitialDir = NULL;
            ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    
    // Display the Open dialog box.
    
            if (GetOpenFileName(&ofn)==TRUE)
                hf = CreateFile(ofn.lpstrFile,
                                GENERIC_READ,
                                0,
                                (LPSECURITY_ATTRIBUTES) NULL,
                                OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL,
                                (HANDLE) NULL);
        }
    }// this is the end of the handle_commands functions
    

    但问题是它没有打开任何对话框

    据我所知,互联网上的人们都成功地用相同的代码打开了网站。

    是的!我已经包括了commdlg。h和相应的库

    提前感谢!

    1 回复  |  直到 7 年前
        1
  •  5
  •   Sanmveg saini    7 年前

    所以问题是 handle_commands , hwnd 已更改。那是什么意思 OPENFILENAME 结构不知道其正确的所有者,因此,尽管单击按钮会触发正确的代码,但仍无法打开对话框。

    所以只需注释掉 HWND hwnd 中的行 handle\u命令 作用