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

MFC对话框程序基础复习001

 
阅读更多

MFC对话框程序基础复习001
2011年04月23日
  对话框基础复习一 2011.4.21
  对话框有两种:
  一种是模态对话框(Modal['məudl]),其中模态对话框显示时候,程序的其他的在对话框之外都不可操作,只有关闭了模态对话框才可以继续操作,例如文本工具的“打开对话框”。
  一种是非模态对话框(Modeless),非模态对话框跟用户对程序其他操作没有影响,例如文本工具的“查找对话框”。
  MFC中对资源的操作都是通过一个与资源相关的类来完成的。
  模态对话框用DoModal来显示,非模态对话框用Create来生成,用ShowWindow来显示。
  指针是在堆上分配内存的,和程序的整个生命周期一致(假设你不主动注销)。
  void CEasyDialogView::OnDialog()
  {
  // TODO: Add your command handler code here
  CTestDlg *pTestDlg = new CTestDlg();
  pTestDlg->Create(IDD_DIALOG1, this);
  pTestDlg->ShowWindow(SW_SHOW);
  }
  这样是可以显示出Modaless对话框的,但是,这个函数的生命周期结束之后,pTestDlg销毁了,你就找不到刚才分配出来的内存空间了。
  查MSDN可知道,在Modaless对话框的“OK”按钮并不会销毁窗口,要重写OnOK函数在其中加入DestroyWindow才能使得窗口销毁。
  其中IDC_STATIC 这个ID号是规定了用来标识一些静态的做标识的文本的,所以在ClassWizard中看不到它,所以要操作的话就要改成其他的ID号。想要静态文本响应鼠标的消息,就要在属性对话框中选中Notify选中。
  逗号表达式:用逗号来隔开多个表达式,整个逗号表达式的值就是最后一个表达式的值。
  获取一个Item里的文本或数据的信息的函数有如下:
  GetDlgItem()->GetWindowText();
  GetDlgItemText()
  GetDlgItemInt()
  可以用 关联控件值(value)变量 来对进行特定的操作,如文本输入框的文本。
  直接操作关联的控件值变量是没有效果的,因为没有进行控件的updata操作。
  所以要在头尾加上UpdateData(TURE)和UpdateData(FALSE)函数。
  UpdateData(TURE)表明当前函数正在获取控件的数据。
  UpdateData(FALSE)表名当前函数已经在初始化控件的数据了。
  关联控件控制(control)变量 是对控件本身的对象的关联,操作这个变量就是操作了控件的本身,所以不用Update也行。
  mfc提供了 DDX - Dialog Data Exchange 对话框数据交换
  DDX - Dialog Data Validation 对话框数据校验
  这些函数是一DDX_ DDV_作前缀的。
  可以用消息来对控件来进行操作。例如:文本框的操作
  WM_GETTEXT, WM_SETTEXT
  设置文本框的复选部分:EM_GETSEL, EM_SETSEL
  ①::SendMessage()
  ②用本身关联的空间控制变量来使用如:m_edit.SendMessage();
  ③SendDlgItemMessage()直接向Item发送消息
  SendMessage 与 PostMessage的区别
  PostMessage只负责将消息放到消息队列中,不确定何时及是否处理
  SendMessage要等到受到消息处理的返回码(DWord类型)后才继续
  PostMessage执行后马上返回
  SendMessage必须等到消息被处理后才会返回。
  GetWindowRect 是用来获取窗口的矩形区域。
  IsRectNull 判断区域是否为空
  SetWindowPos/DeferWindowPos 设置窗口的位置
  BingWindowToTop 把窗口置于顶层
  SetForegroudWindow 设置前台窗口
  SetWindowLong 可以用来设置窗口的属性
  LONG SetWindowLong(
  HWND hWnd,       // handle to window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
  );
  当 nIndex 为 GWL_WNDPROC就可以重设一个窗口过程,返回先前的窗口过程,设置一个窗口过程,就可以响应一些别的消息
  SetFocus 设置窗口的焦点
  GetNextWindow 可以获取下一个窗口的句柄
  GetWindow 获取特定关系的窗口句柄,包含上面的
  GetNextDlgTabItem 获取下一个 可获取tab键转移的 Item
  在控件属性页里 有个 Tab Stop 可以选,转中后就可以转移到这个按键
  在 Layout菜单 中的TabOrder 选项选中,就可以设置tab的顺序了,很方便。
  编辑框 不选中 多行 MultiLine 是不会响应回车消息的。
  在MFC生成的对话框程序里,默认OK 按钮,默认回车按钮的ID就是IDOK(指没有设置DefaultButton的时候)。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics