GetOpenFileName函数未打开对话框
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GetOpenFileName函数未打开对话框相关的知识,希望对你有一定的参考价值。
所以我有这个简单的代码,因为我是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 ' ' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = ' ';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All *.* Text *.TXT ";
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和相应的库
提前致谢!
答案
所以问题是在handle_commands
,hwnd
已被改变。这意味着OPENFILENAME
结构因此不知道它的正确所有者,虽然单击该按钮正在触发正确的代码,但它仍然没有打开对话框。
所以只要注释HWND hwnd
函数中的handle_commands
线
以上是关于GetOpenFileName函数未打开对话框的主要内容,如果未能解决你的问题,请参考以下文章
增加 GetOpenFileName 文件选择对话框的文件名字段中的字符数
如何在pyside中为QtGui.QFileDialog.getOpenFileName定义一个QDir?