就下载 —— 安全下载、无毒手机软件、绿色软件官方下载网站最近更新|下载排行|热门标签|收藏本站

您现在的位置是:就下载 > IT资讯 > 软件教程 > MFC里面的PropertySheet使用

MFC里面的PropertySheet使用

时间:2014-10-17 09:54:59 来源: 复制分享

我是一个问题少年,之前买过一本” Programming Windows”,上册看过一些,大约知道Win32程序怎么写,怎么工作的.来到新公司,我就准备用Programming Windows里面那种Sample那种形式写程序.

老天就喜欢和我开玩笑,普通的控件的消息响应之类还比较好处理(无非就是那个Switch…case…比较大而已),可以Leader偏偏决定用PropertySheet控件(一复杂控件).用Win32 API对于刚写Native代码的我(到现在写了一个星期)简直就是一个不可能完成的任务.让写一个小程序,后台那些东西我两天就搞定,单单这个PropertySheet我两天都没搞定.

后来看到WTL里面直接可以创建PropertySheet,可是被告知,不允许使用WTL……无奈,只能转投MFC,人生第一次使用MFC……

废话少说,直接说得到的PropertySheet相关的经验.

CPropertySheet和CPropertyPage是两个基类,通常你不需要继承这两个类,不过需要个性化的需求,就需要继承这两个类了.

首先说明,Page类其实就是一个Dialog,里面响应了Notify消息,可以拿到SetActive,KillActive两种比较重要的消息,里面可以做很多个性化的东西;

Sheet类是一个封装类,用来管理Page,例如可以拿到现在有多少个Page,获取当前Active的Page,设置第几个Page为Active等等,更重要的是,他还可以动态的Add , Remove Page.下面讲怎么动态添加删除Page.

假设有CMyPropertySheet和CMyPropertyPage,分别继承自上面那两个类.

CMyPropertySheet里面添加一个成员:

std::vector<CMyPropertyPage*> _PropertyPageCache;

成员RefreshPages来实现动态添加删除Page,只是提供一个简单的Demo,剩下的自由发挥.


view sourceprint?01 void RefreshPages()

02

03 {

04

05 int pageCount= this->GetPageCount();

06

07 int insertCount=5;

08

09 for (int i=0;i<_PropertyPageCache.size();i++)

10

11 {

12

13 delete _PropertyPageCache[i];

14

15 }

16

17 _PropertyPageCache.clear();

18

19 for (int i=0;i<insertCount;i++)

20

21 {

22

23 CMyPropertyPage* page= new CMyPropertyPage;

24

25 page->Construct(IDD_MYDIALOG);

26

27 page->m_psp.pszTitle=L”Demo”;

28

29 page->m_psp.dwFlags|=PSP_USETITLE;

30

31 this->AddPage(page);

32

33 _PropertyPageCache.push_back(page);

34

35 }

36

37 for (int i = 0;i<pageCount;i++)

38

39 {

40

41 this->RemovePage(0);

42

43 }

44

45 }


 

Remove可以(最好)在后面完成,因为如果删完了的话,CMyPropertySheet会直接跳出消息循环……

 

OK,现在你的PropertySheet就能完成动态增删的功能,剩下的就是看你想在什么地方动态增删Page了,哪里需要,就把this指针给谁~~简单吧

 

PS:

曾经试过如果不cache这些Page的话,PropertySheet也创建了,但是Page的Title都不对,而且点击都会崩溃,因为我也没研究过怎么具体使用Win32来完成这个功能(对底层不了解),不过根据这几天写Native Code经验判断,是所谓的野指针,访问的内存地址不对.

因为我之前是一个C#.NET程序员,所以对内存访问(控制)有一点不了解,在这上面磕磕绊绊很多次,所以我直接去用自由存储,结果发现解决这个问题……歪打正着吧……

上一篇:web工作流管理系统开发之十六 主子流程参数传递的实现

本文地址:软件教程 >> http://www.9xz.net/it/ruanjianjiaocheng/20701.html

下一篇:如何用小马PE快速、全新安装Win7/Vista/2008/2008R2等等

  • 打印
推荐阅读
热门专题
推荐内容
热点内容