📄 通用对话框.txt
字号:
用MFC和ClassWizard子类化Window的通用对话框
(hangwire发表于2002-1-16 0:43:19)
为了子类化Windows通用对话框(如CFileDialog),我们必须创建一个"子对话框模板"并将这个模板绑定到自己的CFileDialog派生类中。这个模板必须只包含你添加到此对话框中的控制。
从所周知,系统将你的对话框模板放在常规对话框的顶层,MFC的消息处理例程是到达不了你的对话框控制的,所以你无法编写代码处理CFileDialog派生类中的消息映射。如果有人解决了这个问题,我愿洗耳恭听。
在Visual C++ 6.0中,这个问题得到了部分解决。MFC消息例程运行的很好,但是你无法用ClassWizard来添加消息处理器和成员变量。另外,如果想要用ClassWizard从CFileDialog派生一个类,"Dialog ID"输入框会被屏蔽掉,从而无法添加对话框的代码。
为了解决这个问题,本文提供如下技巧:
用ClassWizard从CDialog(而不是CFileDialog)派生自己的类,然后修改派生类的基类(改为CFileDialog)和构造函数。这样你的类将从CFileDialog派生,并且ClassWizard将仍然可以处理你添加的对话框控制。
下面是实现这个技巧的步骤:
1、创建模板
2、用ClassWizard绑定一个CDialog 派生类,如命名为CMyFileDialog
3、在头文件中的CMyFileDialog定义中插入下面的代码行:
DECLARE_DYNAMIC(CMyFileDialog)
然后修改构造函数声明:
CMyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
4、在实现文件中插入下面的代码
IMPLEMENT_DYNAMIC(CMyFileDialog, CFileDialog)
然后修改构造函数定义
CMyFileDialog::CMyFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName,
dwFlags, lpszFilter, pParentWnd)
{
m_ofn.Flags |= OFN_ENABLETEMPLATE | OFN_PATHMUSTEXIST |
OFN_FILEMUSTEXIST | OFN_SHAREAWARE | OFN_ALLOWMULTISELECT;
m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_ABOUTBOX1);
}
5、最后,用CFileDialog 代替头文件和实现文件中的CDialog 引用。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -