您的位置:首页 > 运维架构

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值。

三、样例

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: