WinAPI:GetOpenFileName、GetSaveFileName、OFNHookProc
来源:互联网 发布:c语言数字字符怎么表示 编辑:程序博客网 时间:2024/06/05 00:49
一、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值。
三、样例
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;}
- WinAPI:GetOpenFileName、GetSaveFileName、OFNHookProc
- 子类化GetOpenFileName/GetSaveFileName, 以及钩子函数OFNHookProc的使用的简要说明
- 通用对话框GetOpenFileName&&GetSaveFileName
- GetOpenFileName/GetSaveFileName之Crash和pdfshell.dll
- 使用 OPENFILENAME 以及 GetOpenFileName、GetSaveFileName 实现打开,保存对话框
- 文件打开(保存)对话框:GetOpenFileName和 GetSaveFileName
- getSaveFileName
- 使用GetOpenFileName和GetSaveFileName函数会改变当前目录的问题
- GetOpenFileName
- 资源地址;浏览和打开文件;GetOpenFileName;GetSaveFileName;OPENFILENAME;PtrToStringChars;.NET类库的打开文件夹操作
- GetSaveFileName函数
- GetSaveFileName函数
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- window.prompt的确定和取消
- 解决使用Viewpager+fragment时Viewpager与其他View的冲突
- HTML5网页录音和压缩
- Android快速开发系列 10个常用工具类
- UIImage 拉伸特定的方法
- WinAPI:GetOpenFileName、GetSaveFileName、OFNHookProc
- PHP笔记
- 关于魅族手机调用系统相册剪裁页面无法载入图片的问题。
- gridview嵌套listview事件冲突和xutils、handler、asyn的异步操作
- N的M次方大数模板
- 欢迎使用CSDN-markdown编辑器
- 使用Masonry创建一个下拉式菜单
- Android滑动解锁控件
- 创业在腾讯、在阿里巴巴、在团中央机构!