在我正在使用的一个程序中(仅使用Win32 API),我试图使用打开文件对话框来选择一个文件,该文件的路径随后将出现在程序的编辑框或列表框中。我的打开文件对话框正在运行(使用OpenFileName),但是我不确定如何将所选文件的路径显示在编辑框中。

我尝试使用SendMessage函数来执行此操作,但未解决任何问题。

这是我用于打开文件对话框的代码(以及将路径发送到编辑框的位置):

   int OpenDialog(HWND hWnd)
    {
    OPENFILENAME ofn;
    TCHAR szFile[MAX_PATH];
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = '\0';
    ofn.hwndOwner = hWnd;
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = TEXT("txt Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrInitialDir = NULL;
    ofn.lpstrFileTitle = NULL;
    ofn.lpstrDefExt = "txt";
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

    if(GetOpenFileName(&ofn))
     {
       // the function to send the path name to the edit box would be here
     }
    }


这是我用于编辑框的代码:

    CreateWindow(TEXT("Edit"), TEXT(""),
    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,
    20, 20, 380, 20, hWnd, NULL, hInstance, NULL);


我有如何执行此功能的功能或技术吗?我是否需要对编辑框进行编码,以便可以实现? (示例代码将不胜感激:)

(我在Windows 8上使用CodeBlocks 13.12)

提前致谢。

最佳答案

首先,您需要将句柄按住到编辑框,以便以后可以重新使用它。您将需要从要在编辑框上调用SetWindowText的函数中访问该句柄。因此,HWND可以是该类的成员变量,也可以是全局变量。您设计的是什么。

HWND hEditBox = CreateWindow(TEXT("Edit"), TEXT(""),
    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE,
    20, 20, 380, 20, hWnd, NULL, hInstance, NULL);


在GetOpenFileName之后调用SetWindowText。

 if(GetOpenFileName(&ofn))
 {
    SetWindowText(hEditBox, ofn.lpstrFile);
 }

08-16 14:01