C++笔记:对话框
来源:优易学  2011-12-21 18:12:31   【优易学:中国教育考试门户网】   资料下载   IT书店

  记得以前上学的时候听一个老师说过,计算机技术的核心是输入输出和二进制。Windows应用程序工作的基本流程就是从用户那里得到数据,经过相应的处理之后,再把处理结果输出到屏幕和其他的输出设备上。为了实现这个过程,就需要一个很重要的接口—对话框。

  7.1对话框的基本知识

  在MFC中,所有的控件类都是从CWnd类派生而来。以前做过一些其他开发技术的开发工作,相对其他IDE而言,VC下提供的控件很少,但是基本可以满足开发需要了。

  对话框的种类主要分2中,模态对话框和非模态对话框。

  模态对话框:指当前显示时,程序会暂停执行,知道关闭这个模态对话框后才能继续执行其他任务(个人感觉这个只是一个相对暂停的概念,暂停的只是针对用户操作部分,我们运行一个杀毒软件程序,杀毒过程中如果有一些参数设定,会出现一些模态对话框,但是这个时候杀毒程序还是会继续执行的)。

  非模态对话框:对其他操作没有影响,这个容易理解些。

  7.2 对话框的创建和显示

  在Resources选项卡Dialog目录下,可以添加一个新的对话框。添加一个对话框之后,类视图可以看到也相应添加了一个新的类。在创建一个MFC单文档应用程序的时候,系统为默认创建一个CAboutDlg类,在Dialog文件夹下可以看到IDD_ABOUTBOX这个对话框。在 View类和Frame类中操作对话框的时候,首先需要在cpp文件中引入该对话框的头文件。

  显示一个对话框:

  1 void CMyboleView::OnDialog()

  2 {

  3 // TODO: Add your command handler code here

  4 CTestDlg dlg;

  5 dlg.DoModal();//DoModal是一个函数,刚不小心忘了括号,记清楚了

  6

  7 }

  如果要显示一个非模态对话框,需要调用Dialog类的Create函数。MSDN中,Create类的声明如下:

  1 BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );

  2 BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );

  由于非模态对话框显示的时候程序不会暂停等待用户操作,如果使用临时变量的话,对象的生命周期在OnDialog()执行完之后就结束,这样就无法正常显示,所以可采用创建对象指针的方式,由于动态创建的指针对象是分配在堆内存上,堆内存上的变量周期可应用程序相同。

  1 CTestDlg *pDlg=new CTestDlg;

  2 pDlg->Create(IDD_DIALOG1,this);

  3 pDlg->ShowWindow(SW_SHOW);

  这里又涉及一个动态内存释放的问题。。。

  7.3 动态创建按钮

  参见MSDN,CButton的Create函数。

  01 CButton myButton1, myButton2, myButton3, myButton4;

  02 // Create a push button.

  03 myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

  04    CRect(10,10,100,30), this, 1);//当前窗口

  05 // Create a radio button.

  06 myButton2.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_RADIOBUTTON,

  07    CRect(10,40,100,70), this, 2); //当前窗口

  08 // Create an auto 3-state button.

  09 myButton3.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_AUTO3STATE,

  10    CRect(10,70,100,100), GetParent( ), 3); //父窗口

  11 // Create an auto check box.

  12 myButton4.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,

  13    CRect(10,100,100,130), GetParent( ), 4); //父窗口

  7.4 访问控件

  访问控件的方式很多,按照书上的例子简单的抄了几种,感觉这三种最简单,使用上也方便些。

  01 void CTestDlg::OnButton1()

  02 {

  03 // TODO: Add your control notification handler code here

  04 int num1,num2,num3;

  05 //char buf1[10],buf2[10],buf3[10];1,2

  06 //GetDlgItem(IDC_EDIT1)->GetWindowText(buf1,10);1

  07 //GetDlgItem(IDC_EDIT2)->GetWindowText(buf2,10);1

  08 //GetDlgItemText(IDC_EDIT1,buf1,10);2

  09 //GetDlgItemText(IDC_EDIT2,buf2,10);2

  10

  11 //num1=atoi(buf1);1,2

  12 //num2=atoi(buf2);1,2

  13 num1=GetDlgItemInt(IDC_EDIT1);

  14 num2=GetDlgItemInt(IDC_EDIT2);

  15 num3=num1+num2;

  16 //itoa(num3,buf3,10);1,2

  17

  18 //GetDlgItem(IDC_EDIT3)->SetWindowText(buf3);1

  19 //SetDlgItemText(IDC_EDIT3,buf3);2

  20 SetDlgItemInt(IDC_EDIT3,num3);

  21 }

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训