在我正在使用的一个程序中(仅使用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);
}