`
ekj676mq
  • 浏览: 16366 次
社区版块
存档分类
最新评论

MFC----对话框(一)

 
阅读更多

MFC----对话框(一)
2011年03月14日
  一.对话框的创建和显示
  1.在MFC中,所有的控件类都是由CWnd类派生来的,因此,控件实际上也是窗口,实际上,控件通常是作为对话框的子窗口而创建的。
  2.有两种类型的对话框:模态对话框和非模态对话框。
  3.在MFC中,对资源的操作通常都是通过一个与资源相关的类来完成的。
  4.创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能时创建并显示一个模态对话框。
  例:CTestDlg dlg;
  dlg.DoModal();
  5.如果要创建非模态对话框,则需要利用CDialog类的Create成员函数。当利用Create函数创建非模态对话框时,还需要调用ShowWindow函数将这个对话框显示出来。在创建非模态对话框时,不能把对话框对象定义为局部对象。对于这个问题,有两种解决办法,一种就是把这个对话框对象定义为视类的成员变量;另一种方式就是将它定义为指针,在堆上分配内存。在堆上分配的内存,与程序的整个生命周期是一致的。
  例:CTestDlg *pDlg=new CTestDlg();
  pDlg->Create(IDD_DIALOG1,this);
  pDlg->ShowWindow(SW_SHOW);
  上面程序仍有问题,首先,定义的pDlg这个指针变量是一个局部对象,这样当它的生命周期结束时,它保存的内存地址就丢失了,那么在程序中也就无法再引用它所指向的那块内存了。这个问题的解决办法有两种:一是将这个指针变量定义为视类的成员变量,然后再视类的析构函数中调用delete函数来释放这个指针变量所指向的那块内存。二是在CTestDlg类中重载PostNcDestroy虚函数,释放this指针所指向的内存。
  二.动态创建按钮
  例:m_btn.Create();
  m_btn.DestroyWindow();
  三.控件的访问
  逗号表达式的结果是最后一个表达式的返回值。
  静态文本控件在默认状态下是不发送通告消息的,并不会选中Notify这个选项。为了使一个静态文本控件能够响应鼠标单击消息,那么需要进行两个特殊的步骤:第一步,改变它的ID;第二步,在它的属性对话框中选中Notify选项。
  C语言提供了一个这样的转换函数:atoi,可以将一个由数字组成的字符串转换为相应的数值。还有另一个相反的函数:itoa()。
  在DoDataExchage函数内部实现了对话框控件与类成员变量的关联。在程序代码中从来不直接调用这个函数,而是通过CWnd类的另一个成员函数UpDateData来调用。
  MFC提供了多种以DDX_为前缀的函数,这些函数分别用于不同控件的数据交换。
  MFC也提供了多个以DDV_为前缀的数据校验函数。
  DDX――Dialog Data Exchage,对话框数据交换;   DDV――Dialog Data Validation,对话框数据校验。
  共有七种访问对话框控件的方式:
  1.GetDlgItem()->Get(Set)WindowText()
  2.GetDlgItemText()/SetDlgItemText()
  3.GetDlgItemInt()/SetDlgItemInt()
  4.将控件和整型变量相关联
  5.将控件和控件变量相关联
  6.SendMessage()
  7.SendDlgItemMessage()
  四.对话框伸缩功能的实现
  CRect类有两个成员函数 可以用来判断一个矩形是否为空:IsRectEmpty(),  IsRectNull()\
  调用CWnd类的GetWindowRect可以获得对话框的位置。
  利用SetWindowPos()函数来设置对话框的位置。
  五.输入焦点的传递
  在MFC中,默认情况下,当在对话框中按下回车键时,会选择对话框中默认按钮的消息响应函数来处理这一事件。
  如果想要获得对话框中某个控件的下一个控件的句柄,可以调用GetNextWindow函数、GetWindow()、GetNextDlgTabItem(),最后一个函数是查找具有Tab stop属性的控件,并按Tab顺序依次查找各控件。
  SetWindowLong函数可以修改窗口已指定的过程函数。
  GetFocus()和SetFocus()
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics