MFC中属性表单,向导,Tab控件演示实例

刚刚学习MFC编程不久,师兄交代了几个小任务,现将自己的工作再梳理一面,以加深理解,另外也与在搞这一块的新手们分享!

要达到的目的是这样的,在第一个和第二个页面各输入一个值,再把这两个值求和的结果输入到第三个页面中来。在一个框架界面上共用三种方法达到了这个目的,分别是属性表单,向导和Tab控件页!

1.主界面


操作步骤:(1)首先是打开VS,新建工程,选择MC APP WIZARD,选择基于对话框的模式,点击完成就可以新建一个                基于对话框的MFC框架了。

          (2)删除主对话框上的控件按钮,添加三个按钮和一个编辑文本框控件,修改其Caption和ID号,并为按                钮添加消息响应!

2.属性页

MFC上属性表单和向导的创建在VC++深入详解一书上讲解的很详细,在这里不在赘述,只挑重点说明。

操作步骤:         

(1)创建三个属性页类型的对话框,在每个属性页上添加静态文本框和编辑框控件,并修改相应Caption和ID号。


(2)特别需要注意的是每一个对话框资源要想对其进行操作,都必须将其与对应的类相关联。我们的主对话框程序也有一个类与之关联,同样,这里新添加的三个对话框要新增三个类与他们分别关联起来,新类的基类选择属性页类。另外由于后面涉及到传递参数并进行算数运算,所以这里面的三个编辑框要关联三个int类型的成员变量。


(3)第三步就是创建了,首要要在主对话框中新建三个成员变量,类型分别是之前跟三个属性页相关联是新建的类,在属性页按钮的消息响应函数中,首先构建一个属性表单类型的对象,再用该对象调用AddPage()函数添加属性页,具体代码如下:if()循环语句实现将计算结果的字符串返回到主页面下的编辑框中,      


注意CPropertysheet类的DoModal函数返回值是IDOK或IDCANCEL。但是如果属性表单被创建为向导,那么该函数返回值将是ID_WIZFINISH 或 IDCANCEL。 此外,当点击确定导致DOModal函数返回后,属性表单窗口就被销毁了, 但tabpropsheet这个属性表单对象的生命周期并没有结束。因此,任然可以利用这个对象去访问他的内部成员。记住,窗口和对象并不是同一事物。


(4)还有一部分工作没有完成的是如何实现将第一页和第二页的值进行相加,并传递给第三个参数。这里要用到一个UpdateData的函数,他的作用是将与控件和控件相关联的变量之间相互传递值。当形式为Updatedata(TRUE)时,表示从列表框中取值到变量,当为UpdateData(FALSE)时,表示把变量中的值显示到列表框,缺省值为TRUE;但是这种方法作用仅限在当前类所对应的对话框。那么现在就有个问题,在什么时候选择更新第一页的值呢,第一页的值是我们在当前页面输入的,必须在输入后进行更新,这里就用到一个虚函数,OnKillActive,它是在从第一页切换到第二页时执行的,重写此虚函数,并在此虚函数中调用UpdateDate();第二页也是如此,另外需要注意的是,在第三页的OnSetActive函数中,还需要实现第一个值和第二个值的相加!它也是个虚函数,表示刚刚切换到第三页上去的状态,相关代码如下:

 

此处调用了两个父窗口指针得到主程序框窗口对象的指针,再调用主框架类的成员变量,再通过它调用第一、二个页面的值。这里有点复杂,看起来就像绕了个大圈子!至此属性表单创建的全部步骤业已完成。


3.向导

由属性表单转到向导很简单,只需在调用DoModal函数之前调用SetWizardMode()函数即可,但是后面我们还发现有点“小问题”需要修改,就是把下面的“确定”,"取消"按钮替换成上一步,下一步!这个就是在我们上面提到过的OnSetActive虚函数中实现的。具体代码在上面的代码中有显示。



4.Tab控件页

Tab控件页其实是一种比较巧妙的方法,他的好处是没有下面一排不需要的按钮,页面显得比较简洁。但是Tab控件页的操作稍微要麻烦一点。

操作步骤:

(1)首先如属性表单的创建类似,创建三个属性页类型的对话框,另外还要创建一个Tab控件页的主框,主要用于放置Tab控件页。在Tab控件页的主框上放置一个Tab control控件,用于页面的切换,并将其关联一个CTabctrl类型的成员变量,再在下面放置一个静态文本框,用于放置三个属性页类型的对话框进去。在四个对话框上分别放置相关的编辑框控件和静态文本框控件,如属性页控件一样。


(2)将这四个对话框分别关联相关的类,基类都是CDialog,再将各编辑框控件与成员变量相关联,在控件页主框的类中新建三个成员变量,类型依次是上面新建的另外三个类的类型,在主框的类中,我们要实现以下功能,①Tab控件中三个选择项值的添加 ②Tab属性页下层窗口的创建 ③Tab属性页下层窗口的显示 ④Tab控件中不同键之间切换时值的传递与运算。


下面依据这四个方面分类讲解:

 Tab控件中三个选择项的值的添加是通过与Tab控件相关联的成员函数调用InsertItem函数实现的,这个在对话框开始创建时的OnInitDialog函数中完成,这里的初始化函数是我们生成的虚函数,具体代码如下:

Tab属性页下层窗口的创建和显示:我们首先要理解Tab控件页是怎么创建的,其实是这样的,首先我们添加好三个窗口,只是初始时我们只要第一个窗口显示出来,这也是上面最后两行代码的意思,后面通过切换Tab控件切换时发送的消息控制窗口的隐藏与显示。具体的创建与显示的代码段如下:


Tab控件中不同键之间切换时值的传递与运算:为Tab控件页添加消息响应函数,在函数中,实现切换时窗口的显示与值的传递与运算,具体代码如下:

其中当切换到第三个键值是,GetCurSel返回的数是2,在此基础上进行判断并执行取值与运算。

最后,在Tab控件页按钮的消息响应的函数中,创建Tab控件页主对话框并在返回函数中传递字符串到程序主框下方的列表框中。

        

回想下在这个编程中主要遇到的问题在于各窗口编辑框中值得获得和运算,另外就是Tab控件页中页码的添加,显示切换,最让人头疼的是新建的对话框属性的设置,这个在创建Tab控件对话框时出现了错误,而且调试了很久才发现错误,需要注意一下属性的设置:style:child;

至此,这个小作业的全部任务完成了,一开始动手时觉得很难,处处碰壁,现在回过头想想,只要搞懂MFC基本的那一套东西,还是挺简单的,所以说,对于这样的东西,多遍,多写,多积累才是王道!!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值