ok,给我发一个,我来看一下。[email protected]
解决方案 »
- 窗口间的切换
- 什么叫当前目录,和应用程序所在目录有什么区别?
- 如何将CScrollView类的滚动条随显示的 多次textout内容的多少而变
- #define __T(x) L##x如何解它?
- 哪位有编写 Outlook Express(not Outlook)的插件的资料?
- 惊天大秘密!移动强过联通的原因,绝对真实!(转载)
- VC6,ADO, Foxpro的DBF , SQL 的长度?
- 小弟用sdk+winsock写了个下载工具,想加入ie超级链接拖放功能,要用到com吗?帮忙看一下吧
- ole-storage
- 怎么改变的按钮等控件的背景颜色??50分!!!我说话算数
- 大家一起来讨论一下,vc的哪个宏最有用
- 小问题,请高手见教:VC++生成的程序需要哪些DLL文件?
[email protected]
ok,ok
很多菜鸟也想知道一个why.所以我将老杜的信粘添到这里.与大伙同享.老杜同志.不会有意见吧?我现在决定给你50大元.不够再跟我说.最后发现,自己派生的CDialogBar的子类中的DoDataExchange好像就是没有作用――准确地说是它从来没有被调用过,不能怪它――我试过在OnCreate和OnRButtonUp中显式地调用UpdateData(FALSE)以间接地调用它,结果出错,原因是根本找不着与IDC_MY_LIST相对应的窗口对象。其实在该类的任何地方调用GetDlgItem(IDC_MY_LIST)得到的都是空指针。
没办法,指好把初始化工作放到CMainFrame中来完成,结果就好了(见CMainFrame::OnCreate())。先调用UpdateData(FALSE),使ListCtrl对象真正与资源联系起来,加入标题头。
我暂时得出的结论是:最好在CMainFrame完成一切工作,要不干脆不要生成自己的CDialogBar子类。
CDialog::DoModal() -> CDialog::CreateDlgIndirect()
CWnd::CreateDlgIndirect()
::CreateDlgIndirect()
CDialog::OnInitDialog()
CDialog::UpdateData()
CMyDlg:: DoDataExchange()
CDialog::DoDataExchange()
CWnd::SubclassWindow()无模式的对话框通过 Create() 建立.到此, 你定义的: m_MyList 才和 HWND 联系上.你只是定义了CDialogBar, 但是并没有建立 m_MyList 对象和 HWND 得联系.
所以会出错误.BTW, 对于CDialogBar, 我使用的时候, 一般都市直接利用 GetDlgItem() 对象指针, 然后使用.
一般不需要建立派生类.
MFC 中有一个 CHtmlView 的例子, 使用了 CDialogBar, 你可以参考使用.