WinAPI:GetOpenFileName、GetSaveFileName、OFNHookProc
2015-11-02 13:50
375 查看
一、GetSaveFileName
函数功能:该函数创建一个Open公共对话框,使用户指定驱动器、目录和文件名、或使用户打开文件。
函数原型:BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenfileName函数返回时,此结构包含有关用户文件选择的信息。
返回值:如果用户指定了一个文件名,点击OK按钮,返回值为非零。由OPENFILENAME结构的IPstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open对话框或错误出现,返回值为零。
二、GetSaveFileName
函数功能:该函数创建一个Save公共对话框,以便用户指定驱动器、目录和文件名。
函数原型:BOOL GetSaveFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向一个包含初始化对话框信息的OPENFILENAME结构。当GetsaveFileName函数返回时,此结构含有关于用户文件选择的信息。
返回值:如果用户指定了一个文件名且点击OK按钮,返回值为非零值。由OPENFILENAME结构中的归IpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Save对话框或错误出现,返回值为零。
三、OFNHookProc
函数功能:该挂钩函数是应用程序定义的或库定义的回调函数,此回调函数与Explorer_Style和Save As公共对话框一起使用。函数贮存从公共对话框发送来的消息或通知LPOFNHOOKPROC类型定义一个指向回调函数指针,OFNHOOKProc是应用程序定义的或库定义的函数名的位置占有者,当创建一个Open或Save As公共对话框时,如果没有指定OFN_EXPLORER标志且需一个挂钩函数。必须用旧式的OFNHookProcOldSttyle挂钩函数。这种情况下对话框将显示旧式的用户界面。
函数原型:UINT CALLBACK OFNHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);
参数:
hdlg:指向Open或Save as对话框的子对话框的句柄。用GetParent函数可得到指向Open或Save As对话框窗口的句柄。
uiMsg.标识存放的消息。
wParam:指定有关消息的其他信息。精确的意义要根据uiMSg参数的值来决定。
IParam;指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。如果uiMsg参数显示了WM_INITDIALOG消息,IParam是一个指向OPENFILENAME结构的指针。该结构含有创建对话框时指定的值。
返回值:如果挂钩函数返回零,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省对话框函数忽略消息。对于CDN_SHAREVIOLATION和CDN_FILEOK通告消息,挂钩函数应该返回非零值,以表明已经利用SetWindowLong函数设置了一个非零DWL_MSGRESULT值。
三、样例
函数功能:该函数创建一个Open公共对话框,使用户指定驱动器、目录和文件名、或使用户打开文件。
函数原型:BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenfileName函数返回时,此结构包含有关用户文件选择的信息。
返回值:如果用户指定了一个文件名,点击OK按钮,返回值为非零。由OPENFILENAME结构的IPstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open对话框或错误出现,返回值为零。
二、GetSaveFileName
函数功能:该函数创建一个Save公共对话框,以便用户指定驱动器、目录和文件名。
函数原型:BOOL GetSaveFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向一个包含初始化对话框信息的OPENFILENAME结构。当GetsaveFileName函数返回时,此结构含有关于用户文件选择的信息。
返回值:如果用户指定了一个文件名且点击OK按钮,返回值为非零值。由OPENFILENAME结构中的归IpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Save对话框或错误出现,返回值为零。
三、OFNHookProc
函数功能:该挂钩函数是应用程序定义的或库定义的回调函数,此回调函数与Explorer_Style和Save As公共对话框一起使用。函数贮存从公共对话框发送来的消息或通知LPOFNHOOKPROC类型定义一个指向回调函数指针,OFNHOOKProc是应用程序定义的或库定义的函数名的位置占有者,当创建一个Open或Save As公共对话框时,如果没有指定OFN_EXPLORER标志且需一个挂钩函数。必须用旧式的OFNHookProcOldSttyle挂钩函数。这种情况下对话框将显示旧式的用户界面。
函数原型:UINT CALLBACK OFNHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);
参数:
hdlg:指向Open或Save as对话框的子对话框的句柄。用GetParent函数可得到指向Open或Save As对话框窗口的句柄。
uiMsg.标识存放的消息。
wParam:指定有关消息的其他信息。精确的意义要根据uiMSg参数的值来决定。
IParam;指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。如果uiMsg参数显示了WM_INITDIALOG消息,IParam是一个指向OPENFILENAME结构的指针。该结构含有创建对话框时指定的值。
返回值:如果挂钩函数返回零,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省对话框函数忽略消息。对于CDN_SHAREVIOLATION和CDN_FILEOK通告消息,挂钩函数应该返回非零值,以表明已经利用SetWindowLong函数设置了一个非零DWL_MSGRESULT值。
三、样例
UINT_PTR CALLBACK OpenFileNametHook (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) { switch(uiMessage) { case WM_INITDIALOG: { int a = 3; } break; default: break; } return 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case ID_TEST: { TCHAR szFile[MAX_PATH] = {0x00}; OPENFILENAME ofn = {sizeof(OPENFILENAME)}; //ZeroMemory( &ofn , sizeof( ofn)); ofn.lStructSize = sizeof ( ofn ); ofn.hwndOwner = hWnd ; //ofn.lpstrFile = TEXT("C:\\Users\\Public\\Pictures\\Sample Pictures\\菊花.jpg") ; //ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof( szFile ); ofn.lpstrFilter = TEXT("All\0*.*\0Text\0*.TXT\0Bmp\0*.bmp"); ofn.nFilterIndex =1; ofn.lpstrFileTitle = NULL ; ofn.nMaxFileTitle = 0 ; ofn.lpstrInitialDir=NULL ; ofn.Flags = OFN_ENABLEHOOK ; ofn.lpfnHook = OpenFileNametHook; GetOpenFileName(&ofn); GetSaveFileName(&ofn); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
相关文章推荐
- Nginx开启Gzip压缩大幅提高页面加载速度
- file_get_content、fsockopen和curl之间的优缺点
- Virtualbox WDDM 用户模式显示驱动之OpenAdapter
- Linux切换账号
- KISSY整体架构流程
- linux—用nc命令监控检测服务器端口
- Flume学习11_Flume1.5.0的安装使用及传输数据到Hadoop2.2
- Linux常用命令集锦
- 修改linux最大连接数
- centos 编译 vlc-android
- [ahk]xCopyPlus批量复制某类文件
- xshell怎样打印
- 如何限制IP和指定用户,通过SSH登陆linux服务器
- hadoop安装指南
- CentOS下Mysql数据库的安装与配置
- CentOS下Mysql数据库的安装与配置
- 虚拟机安装 CentOS 6.7
- Linux & Python 导航目录
- linux patch 命令小结
- 《深入理解Linux内核》软中断/tasklet/工作队列