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

来源:互联网 发布:我心伤悲 莫知我哀对句 编辑:程序博客网 时间:2024/05/02 06:12

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


原创粉丝点击