对CDialog的m_ofn成员增添钩子后钩子函数没有被调用,请前辈们帮忙看一下
对CDialog的m_ofn成员添加钩子后钩子函数没有被调用,请前辈们帮忙看一下
为了实现Open对话框包含预览图片功能,创建了个简单的单文档MFC工程,从CDialog类派生一个COpenFileDialog类,并在COpenFileDialog类的构造函数中对m_ofn做定制,如下:
OFNHookProc钩子函数已实现:
对菜单中的“打开”项添加相应的消息响应函数,并且在里面实例化一个COpenFileDialog类对象,如下:
问题是在程序运行时(单击菜单中“打开”项)钩子函数并没有被调用,这是为什么?麻烦前辈指导一下,偶感激不尽。。。
------解决方案--------------------
CBmpOpenFileDialog 和 COpenFileDialog 什么关系?
为了实现Open对话框包含预览图片功能,创建了个简单的单文档MFC工程,从CDialog类派生一个COpenFileDialog类,并在COpenFileDialog类的构造函数中对m_ofn做定制,如下:
- C/C++ code
COpenFileDialog::COpenFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { m_ofn.lpstrFilter = _T("Bitmaps (*.bmp)\0*.bmp\0 All Files (*.*)\0*.*\0\0"); m_ofn.Flags |= (OFN_HIDEREADONLY |OFN_ENABLEHOOK| OFN_EXPLORER |OFN_ENABLETEMPLATE); m_ofn.hInstance = AfxGetInstanceHandle(); m_ofn.lpTemplateName = MAKEINTRESOURCE(IDC_PREVIEW); m_ofn.lpfnHook = OFNHookProc; }
OFNHookProc钩子函数已实现:
- C/C++ code
UINT APIENTRY OFNHookProc( HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam ) { ..... }
对菜单中的“打开”项添加相应的消息响应函数,并且在里面实例化一个COpenFileDialog类对象,如下:
- C/C++ code
void COpenFileDialogView::OnFileOpen() { CBmpOpenFileDialog dlg; dlg.DoModal(); // TODO: 在此添加命令处理程序代码 }
问题是在程序运行时(单击菜单中“打开”项)钩子函数并没有被调用,这是为什么?麻烦前辈指导一下,偶感激不尽。。。
------解决方案--------------------
CBmpOpenFileDialog 和 COpenFileDialog 什么关系?
- C/C++ code
UINT CALLBACK OFNHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) { TRACE(_T("OFNHookProc hdlg=%08XH uiMsg=%08XH wParam=%08XH lParam=%08X\n"), (UINT)hdlg, (UINT)uiMsg, (UINT)wParam, (UINT)lParam); return 0; }
------解决方案--------------------
Windows Vista style file dialogs do not support certain members and flags of the CFileDialog. As a result, these will have no effect.
The following is a list of the members that are not supported by Windows Vista:
lpstrCustomFilter
lpstrInitialDir
lCustData
lpfnHook
lpTemplateName
啥系统? 好像Vista系统不支持