无模式对话框的问题

numen27 2004-03-23 02:58:18
再做PropertySheet的时候,要添加属性页,属性页是无模式对话框
一般都这么做:
声明:
CPropertyPage* m_pPage1;
CPropertyPage* m_pPage2;
.......
然后在属性框初始化的时候:
m_pPage1 = new CPropertyPage;
m_pPage2 = new CProperyPage;
m_pPage->Create(.....);
m_pPage->Create(....);
AddPage(m_pPage1);
AddPage(m_pPage2);
然后在CPropertyPage的OnPostNcDestroy里面加入delete this

但是如果在PropertySheet中,你申明的属性页成员变量如果不是指针,即:
CPropertyPage m_page1;
CPropertyPage m_page2;
然后再属性框初始化的时候:
m_page1.Create(...);
m_page2.Create(...);
AddPage(&m_page1);
AddPage(&m_page2);
在PropertyPage的OnPostNcDestroy里面不加入delete this一句
也可以运行,并且不会内存泄漏

第二种做法是不是不合理?
...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
numen27 2004-03-24
  • 打赏
  • 举报
回复
// Add two pages to a CPropertySheet object, then show the
// CPropertySheet object as a modal dialog. Both CStylePage
// and CColorPage are CPropertyPage-derived classes created
// by ClassWizard.

CPropertySheet dlgPropertySheet("Simple PropertySheet");

CStylePage stylePage;
CColorPage colorPage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);

dlgPropertySheet.DoModal();
看了一下MSDN,看来PropertyPage如果可以是模式对话框。
nlstone 2004-03-24
  • 打赏
  • 举报
回复
第二种方法使用更爽快,CPropertyPage会在CProperSheet析构时析构,不用管生命周期,永远不用担心"释放了不该释放的东西";并且这里CPropertyPage好像不用Create吧
快乐鹦鹉 2004-03-24
  • 打赏
  • 举报
回复
create方法肯定是要用的。
numen27 2004-03-24
  • 打赏
  • 举报
回复
不用Create方法?这个说法我不认同,非模式对话框就得用Create创建,要不你把Create方法放到对话框的构造函数里面去。
maomaostevencao 2004-03-23
  • 打赏
  • 举报
回复
第二中方法不需要再调用create方法了。page页的生命期和propertysheet相同,因此没有必要使用非模态方法创建。
第二种方法比第一种更合理。
koally 2004-03-23
  • 打赏
  • 举报
回复
不懂,相信红星/
快乐鹦鹉 2004-03-23
  • 打赏
  • 举报
回复
没有啊。也可以。没有问题的。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧