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;}



0 0
原创粉丝点击