我目前正在尝试限制“GetOpenFileName()”对话框的目录浏览,并试图弄清楚如何获取ComboBox项的完整路径。具体来说,我如何获得项目的完整路径?
例如,如果我有一个“Images”文件夹,完整路径为“D:/ MyFolder / MyStuff / Images”,我该如何获得整个路径?就目前而言,我只能获取文件夹本身的名称 - 在本例中,我只能提取“图像”,而没有关于文件夹完整路径的信息。
到目前为止,我已经对对话框进行了分类,并且能够拦截发送给它的所有Windows消息。我已经能够通过查找项目的HWND,然后将其传递给GetWindowText()来提取ComboBox中每个项目的文本名称。但是,这只给了我可见的名称,而不是完整的文件路径。
有没有办法检索列出项目的完整文件路径?
//Callback function for OPENFILENAME struct (the lpfnHook property points to this)
static UINT_PTR CALLBACK checkIfValidDirectory(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
if( msg == WM_INITDIALOG)
{
SetWindowSubclass(GetParent(hDlg), MyCallback, wParam, lParam);
}
}
LRESULT CALLBACK MyCallback(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
switch (msg)
{
case WM_COMMAND:
char buf[128];
DWORD controlCode = HIWORD (wParam);
int controlIdentifier = (int) LOWORD (wParam);
HWND childHandle = (HWND) lParam;
GetWindowText(childHandle , buf, 128);
MessageBox(NULL, buf, "Alert", MB_YESNO);
break;
}
}
上面的代码会提醒comboBox中给定项目的文本名称,但是如何获取该项目的FULL-PATH?
重要编辑:啊,我应该提一下,我的意思是在实际导航内部对话框的同时获得完整路径!不是在选择文件之后。我选择它后可以得到文件的全名(也就是说,在对话框中点击“打开”),但是我无法在对话框中获得我当前正在查看的目录的完整路径。