黄皮书第七章学习笔记_对话框(一)

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函数

转载于:https://www.cnblogs.com/52yixin/articles/2127700.html

你可能感兴趣的:(黄皮书第七章学习笔记_对话框(一))