黄皮书第七章总结_对话框(咦)

1、模态对话框的对象可以是一个局部对象;其创建主要是一个DoModal()即可解决


2、非模态对话框的创建较为特殊

①、首先需要该对话框的对象是一个全局变量,否则会在函数执行完成之后被析构,导致对话框无法显示

也可以定义为指针变量,在堆上给这个对象分配内存;然后重载虚函数PostNCDestory()中加入delete this来析构,因为有一个局部函数析构以后,指针无法指向的问题,这种方法较为麻烦

②、需要ShowWindow(SW_SHOW)出来


//-----------------------------------------分割线------------------------------------------------------------------------------------------------------------------------//

3、一个对话框就是一个类,我们可以在设计完对话框以后,双击该对话框,来建立这个对话框类


4、关于“动态添加按钮”这个功能,代码如下:

 1 void CLuoDlg::OnBnClickedAdd()
 2 {
 3     // TODO: Add your control notification handler code here
 4     if(!btn.m_hWnd)
 5     {
 6         btn.Create("BUTTON ME",BS_PUSHBUTTON,CRect(0,0,100,100),this,123);
 7         btn.ShowWindow(SW_SHOWNORMAL);
 8     }
 9     else
10     {
11         btn.DestroyWindow();
12     }
13 }

这里要注意学习的知识点在于:

①、用一个窗体句柄来判断。注意指明其对象,如本例中的btn.m_hWnd

②、按钮的创建方式和Show出来的问题


//-----------------------------------------分割线------------------------------------------------------------------------------------------------------------------------//


5、对于静态控件,如果要编辑的话,① 要修改其ID ② 设置其Notify选项为TRUE


6、本例中比较重要的一个函数就是GetDlgItem(控件ID)来获取相关对话框上控件的指针,同时要注意进一步领会API函数中的Get和Set的作用。一些示例代码如下:

 1 void CLuoDlg::OnBnClickedAdd2()
 2 {
 3     // TODO: Add your control notification handler code here
 4 //---------下面是第一种相加的方式--------------------------------
 5     char num1[10];
 6     char num2[10];
 7     char num3[10];
 8     int total,n1,n2,n3;
 9     GetDlgItem(IDC_EDIT1)->GetWindowText(num1,10);
10     GetDlgItem(IDC_EDIT2)->GetWindowText(num2,10);
11 
12     n1=atoi(num1);
13     n2=atoi(num2);
14  //   total=n1+n2;
15 
16     itoa(total,num3,10);
17     GetDlgItem(IDC_EDIT3)->SetWindowText(num3);
18 
19 //--------------下面是第二种方式--------------------------------
20     char num1[10],num2[10],num3[10];
21     int n3,n2,n1;
22     GetDlgItemText(IDC_EDIT1,num1,10);
23     GetDlgItemText(IDC_EDIT2,num2,10);
24 
25     n1=atoi(num1);
26     n2=atoi(num2);
27 
28     n3=n1+n2;
29 
30     itoa(n3,num3,10);
31     SetDlgItemText(IDC_EDIT3,num3);
32 //----------下面是第三种方式 控件绑定----------------
33     UpdateData();
34     m_num3=m_num1+m_num2;
35     UpdateData(FALSE);
36 }

//-------------------------------------------------------分割线---------------------------------------------------------------------------------------//

7、对于控件焦点顺序的移动问题。即回车使得光标顺序移动的功能,最简要的一种方法总结如下:

在对话框中的“缺省按钮”(即是说这个按钮的Default Button属性为TRUE),中的单击事件中,写如下的代码GetNextDlgTabItem(GetFocus())->SetFocus();,如下可见:

void CLuoDlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    //CDialogEx::OnOK();
   
}

要注意,此时就算是删掉了这个OK按钮,程序中的焦点依旧会传递,因为它会调用那个虚拟的OnOK函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值