带模板和挂钩的Windows API GetOpenFileName
我试图使用带有GetOpenFileName的模板,但没有成功。我在MSDN或网络上几乎没有找到关于这个主题的内容。我的尝试是基于我在这里看到的 我的代码如下。模板注释显示了我在模板尝试中对代码b4所做的更改;主要是删除某些行。将显示正常的Windows资源管理器类型open Windows,但没有我希望使用模板进行的添加。我根本不确定钩子函数中应该包含什么,但我知道它不会被调用,因为我在那里设置了断点带模板和挂钩的Windows API GetOpenFileName,windows,templates,getopenfilename,Windows,Templates,Getopenfilename,我试图使用带有GetOpenFileName的模板,但没有成功。我在MSDN或网络上几乎没有找到关于这个主题的内容。我的尝试是基于我在这里看到的 我的代码如下。模板注释显示了我在模板尝试中对代码b4所做的更改;主要是删除某些行。将显示正常的Windows资源管理器类型open Windows,但没有我希望使用模板进行的添加。我根本不确定钩子函数中应该包含什么,但我知道它不会被调用,因为我在那里设置了断点 // Global variable OPENFILENAME IFN; //
// Global variable
OPENFILENAME IFN;
// In WndProc
case WM_CREATE:
IFN.hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // TEMPLATE
IFN.hwndOwner = hWnd; // TEMPLATE
break;
// In WndProc menu processing
case IDM_INPUT_FILE:
{
// OPENFILENAME IFN; // TEMPLATE
strcpy (szFile,"NEWEXPORT.GED");
IFN.lStructSize = sizeof(IFN);
// IFN.hwndOwner = hWnd; // TEMPLATE
// IFN.hInstance = NULL; // TEMPLATE
IFN.lpstrFilter = "All\0*.*\0GEDCOM\0*.GED\0";
IFN.nFilterIndex = 2;
IFN.lpstrCustomFilter = NULL;
IFN.lpstrFile = szFile;
IFN.nMaxFile = 510;
IFN.lpstrFileTitle = NULL;
IFN.lpstrInitialDir = NULL;
IFN.lpstrTitle = NULL;
IFN.Flags = OFN_FILEMUSTEXIST || OFN_PATHMUSTEXIST || OFN_EXPLORER || OFN_ENABLETEMPLATE || OFN_ENABLEHOOK ; // TEMPLATE
IFN.lpstrDefExt = NULL;
IFN.lpfnHook = FileAddOn; // TEMPLATE NULL;
IFN.lpTemplateName = MAKEINTRESOURCE(IDD_FILEADDON); // TEMPLATE
if (!GetOpenFileName(&IFN))
{
Beep (1000,500);
break;
}
// **************** Hook function
UINT_PTR CALLBACK FileAddOn (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return TRUE;
}
// IDD_FILEADDON was made with the visual C dialog editor and has the following properties
// Style=Child, Border=none,clip siblings,3D look
必须使用
|
标记OPENFILENAME,而不是|
OMG!至少现在这里有一个例子。谢谢。知道为什么桌面、网络等按钮没有出现吗?#定义_WIN32_WINNT 0x0500,然后再包含windows标题(称为位置栏)没有乐趣。可能是因为我使用的是旧的sdk或旧的visual c,但本文暗示您不能使用places栏和钩子过程。好的,明白了!立即移动定义b4窗口。h成功了。这将向openfilename结构添加更多字段,包括FlagsEx。