对话框

对话框包括模态对话框和非模态对话框

模态对话框创建之后要用 DoModal ( )函数显示,用EndDialog( )函数关闭,例如:

CTestDlg dlg ;

dlg.DoMal ( ) ;

非模态对话框用 CDialog::Create(...) 函数创建,例如:

CTestDlg dlg;

dlg.Create( IDD_DIALOG1, this );

dlg.ShowWindow ( SW_SHOW ) ;   

//这里要注意要把 dlg 定义为 View类的成员变量(局部变量在程序结束之后要销毁,所以窗口不能显示出来);另外一种方法是分配一个指针,在堆上分配一个内存,我们知道在堆上分配的内存是和整个应用程序的生命周期相一致的。以上代码可以修改为:

CTestDlg *dlg = new CTestDlg ( ) ;

dlg->Create( IDD_DIALOG1, this );

dlg->ShowWindow ( SW_SHOW ) ; 

对于非模态对话框,当运行出现一个对话框窗口时,我们点击“确定”或者“取消”的时候,对话框窗口消失了,当我们点击“确定”时,它是由CDialog : : OnOk ( ) 函数响应,事实上窗口并没有被销毁,而是隐藏起来了,要真正销毁窗口的话需要重写基类的OnOk ( ) 函数,并调用DestroyWindow ( ) 函数销毁窗口;而对于模态窗口而已,当我们点击“确定”或者“取消”按钮是,它是被销毁的,这一点要区分开来。

以下是MSDN中对CDialog : : OnOk ( )函数的部分解释:

If you implement the OK button in a modeless dialog box, you must override the OnOK member function and call DestroyWindow from within it. Don’t call the base-class member function, because it calls EndDialog, which makes the dialog box invisible but does not destroy it.


下面介绍4 种访问控件的方式:

第一种,以改变静态窗口文本内容为例,

使用

GetDlgItem( IDC_NUMBER1) -> GetWindowText( str )

GetDlgItem (IDC_NUMBER1 ) ->SetWindowText (“数值1" );


默认的静态文本框是不能响应通告消息的,但是我们可以稍加改动便可以让它响应通告消息:第一步是修改静态文本框的 ID ;第二步是将静态文本框属性里的“Styles”选项中的Notify选项打勾。

CString str ;

if( GetDlgItem( IDC_NUMBER1) -> GetWindowText( str ) , str = "Number 1" )

{

GetDlgItem (IDC_NUMBER1 ) ->SetWindowText (“数值1" );

}

else

GetDlgItem (IDC_NUMBER1) ->SetWindowText ( "Number1 " ) ;

}



在C语言中,提供了一个字符(即文本)到数值的转换的一个函数: int atoi( const char *string );

例如:

int num1,num2 , num3;

char ch1[10], ch2[10] , num[10];


num1 = atoi ( ch1 ) ;

num2 = atoi ( ch2 );

num3 = num1 + num2 ;

itoa ( num3, ch3, 10 ) ;  // char *_itoa( int value, char *string, int radix )这个函数式将数值转换为文本


GetDlgItem ( IDC_EDIT ) -> SetWindowText ( ch3 ) ;      //将这个数值填充到编辑框中


第二种,以一种加法运算为例,使用

GetDlgItemText ( IDC_EDIT3, ch1, 10 ) 

SetDlgItemText ( IDC_EDIT3,ch3 ) 

例如:

int num1,num2 , num3;

char ch1[10], ch2[10] , num[10];


GetDlgItemText ( IDC_EDIT1, ch1, 10 ) ;

GetDlgItemText ( IDC_EDIT2, ch2, 10 ) ;


num1 = atoi ( ch1 ) ;

num2 = atoi ( ch2 );

num3 = num1 + num2 ;

itoa ( num3, ch3, 10 ) ;


SetDlgItemText (IDC_EDIT3, ch3 ) ;




第三种,还是使用加法运算的例子,

例如:

UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const;         //该函数获取文本框的内容并转换为 Int 类型返回

int num1,num2 , num3;

num1=GetDlgItemInt (IDC_EDIT1 ) ;

num2=GetDlgItemInt (IDC_EDIT2 ) ;


num3=num1+num2 ;

SetDlgItemInt (IDC_EDIT3, num3 ) ;


第四中访问控件的方式,这也是最简单的一种方式,对控件绑定关联变量,使用关联变量操作。(m_num1、m_num2、m_num3分别为关联变量)

UpdateData( TRUE ) ;

m_num3= m_num1 + m_num2 ;

UpdateData (FALSE ) ;

这里为什么要加UpdateData( TRUE )和 UpdateData( FALSE ) 具体看 MSDN 中的 CWnd::DoDataExchange  CWnd::UpdateData 这两个函数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值