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

1.      逃跑按钮的实现:

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

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

2.      在Dialog上的两个按钮在创建变量(m_btn1,m_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

手动添加三个属性页对话框prop1,prop1,prop3

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),这些函数都是虚函数,而不消息响应函数。


原文地址:http://blog.csdn.net/roger_ge/article/details/2929841


试了向导模式...没有反映...

直接sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);了

sheet.SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);调整位置。


你可能感兴趣的:(点击打开链接,VC++)