ATL 的CFileDialog 的一个Bug?
来源:互联网 发布:红包随机分配算法 编辑:程序博客网 时间:2024/05/22 06:08
欢迎访问作者的个人主页(http://www.mrspace.net/)
今天发现ATL 的一个Bug。
首先贴一段MSDN 上面的范例代码:
void CChildFrame::OnFileOpen() {
char CChildFrame::szFilters[]= "MyType Files (*.my)|*.my|All Files (*.*)|*.*||"; CFileDialog fileDlg (TRUE, "my", "*.my", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); if( fileDlg.DoModal ()==IDOK ) { CString pathName = fileDlg.GetPathName(); CString fileName = fileDlg.GetFileTitle (); SetWindowText(fileName); }}
代码很简单,首先把CFileDialog DoModal 显示一下,然后获取GetPathName。这就是通过CFileDialog 选择一个文件的代码。
同样的代码在ATL 里面是不能正常工作的,因为ATL 的GetFilePath 实现完全依靠这个对话框的句柄!DoModule以后你叫我哪里找句柄去?ft...
// code of CFileDialogImpl::GetFilePath() in atldlgs.h
int GetFilePath(LPTSTR lpstrFilePath, int nLength) const
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT((m_ofn.Flags & OFN_EXPLORER) != 0);
return (int)GetFileDialogWindow().SendMessage(CDM_GETFILEPATH, nLength, (LPARAM)lpstrFilePath);
}
所以在ATL 里面,开始那样的代码你就需要直接访问这个对话框的成员变量m_ofn 来获取对话框取得的信息。
我不明白,ATL 做了那么多努力,以便普通的Win32 桌面开发能够很容易的从MFC 转换过来,为什么在代码表现的细节上却完全不考虑MFC 程序员的感受?
更何况,就这样的情况,CFileDialog 似乎根本就没有办法“优美”的用起来了,要么你不用它的DoModule,要么你直接去访问一个类的成员变量。
到底是我理解错了还是ATL 的Bug?
- ATL 的CFileDialog 的一个Bug?
- CFileDialog的bug?
- ATL的BUG
- (原)CfileDialog 为何抛出异常,其实这是mfc 的一个bug
- atl的一个问题
- 一个未能解决的问题CFileDialog
- CFileDialog设置多选时的一个问题
- 一个定制CFileDialog对话框的实例
- 一个定制CFileDialog对话框的实例
- 一个定制CFileDialog对话框的实例
- CFileDialog设置多选时的一个问题
- 一个定制CFileDialog对话框的实例
- CFileDialog的bug?还是我哪里错了
- CFileDialog 多选文件,取得的文件路径错误BUG
- 学习ATL的一个习作 : )
- 一个简单的ATL的例子
- 一个简单的ATL的例子 url
- 关于 CFileDialog 对话框多选功能的一个问题
- 《Robust Java》读书笔记
- 怎样制作自解压的jar文件
- JBuilder 9.0开发实用技巧七招
- IDL设计的别扭
- 关于table per subclass继承映射的注意点
- ATL 的CFileDialog 的一个Bug?
- 认清现实,才能找回理想
- 孙鑫C++视频笔记(11)图形的保存和重绘
- 基于Microsoft Windows Server 2003的MCSE认证需求
- 数据库设计
- 如何让JBuilder9支持Struts 1.1
- 孙鑫VC++视频教程(12)文件操作
- 2005年华为招聘--C语言笔试试题
- 浅谈Object Pascal的指针