孙鑫VC视频教程笔记之第八课“对话框(下)”

  1.      逃跑按钮的实现:

核心是对话框上的按钮捕获WM_MOUSEMOVE,而不是让对话框来捕获这个消息,因为如果对话框捕获的话,当指针移动到窗口上就触发了。

1.      创建一个CTestButton类,派生于CButton

2.      Dialog上的两个按钮在创建变量(m_btn1m_btn2)的时候让他们的类型选用TestButton类。

3.      CTestButton类创建一个成员指针变量,CTestButton* m_pBtn用来保存当前button对象所对应的另一个button对象的地址。

4.      Dialog类的OnInitDialog方法中添加:

m_btn1.m_pBtn=&m_btn2;

m_btn2.m_pBtn=&m_btn1;

5.      CTestButton类创建On_MouseMove的消息响应函数。

6.      在其中添加如下代码:

ShowWindow(SW_HIDE);

           m_pBtn->ShowWindow(SW_SHOW);

CButton::OnMouseMove(nFlags, point);

 

2.      属性与向导对话框:

Insert->Resource->Dialog->IDD_PROPPAGE_LARGE/MEDIUM/SMALL

手动添加三个属性页对话框prop1prop1prop3

CPropertySheet sheet("page sample"); //创建属性表单。

      CProp1 prop1; //在使用类中将之声明为成员变量

      CProp2 prop2;

      CProp3 prop3;

      sheet.AddPage(&prop1);

      sheet.AddPage(&prop2);

      sheet.AddPage(&prop3);

      sheet.DoModal();//模态显示属性设置对话框

      sheet.Create(); //非模态显示属性对话框

sheet.SetWizardMode(); //设置向导模式

 

在向导模式下,对于第一个属性页应该没有上一页这个按钮,对于最后一个属性页应该没有下一页按钮,而是完成按钮。在每个属性页(CProp)类中的OnSetActive函数中使用SetWizardButtons方法,添加如下代码:

//因为上下页按钮属于属性表单窗口,是属性页窗口的父窗口,所以调用GetParent方法

((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT); //第一页

((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT); //第二页

((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH); //最后一页

 

在向导模式下,在点击上下页和完成的按钮时,应该对属性页的当前页上的内容进行检测,如果检测不通过,则不能进入下一页。那么检测的代码应该放在OnWizardNext(非结束页)OnWizardFinish(结束页)方法中。(还有一个是OnWizardBack),这些函数都是虚函数,而不消息响应函数。

你可能感兴趣的:(孙鑫VC视频教程笔记之第八课“对话框(下)”)