Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1009033
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-03-07 16:48:57

μC/GUI-v3.90a学习笔记7
1.GUI_DispStringAtCEOL("", 5, 55);//显示完字符串之后,将显示数据后面的空间全部擦除
2.如果当前控件作为WM__hWinFocus焦点窗体接收到了键盘key消息,那么WM_DefaultProc()消息处理函数
  会将该键盘key消息发送给它的Parent,当Parent收到键盘消息之后,也按同样的方式做,传给Parent的Parent,依此类推.
3.hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);获取hDlg父窗体内,
  id号为GUI_ID_EDIT0的控件对应的句柄hWin.
4.鼠标点击LCD的任何一个位置时,会计算出鼠标点击处对应的hWin窗体句柄
  _Screen2hWin()函数和WM_GetDialogItem()函数类似都是使用递归调用方式,遍历所有窗体,
  _Screen2hWin()函数先检查鼠标点击处是否在WM__FirstWin桌面背景窗体矩形内,
  [:WM__FirstWin是桌面背景窗体句柄],之后递归检测桌面背景窗体WM__FirstWin挂接的所有孩子及兄弟,
  以及孩子的孩子的兄弟等,是否在鼠标点击处,如果找到了某个兄弟在鼠标点击处,那么会继续检查,
  比当前兄弟Z序高的hWin->Next,是否也在鼠标点击处,如果是,那么说明鼠标将要激活的窗体应该是
  这个Z序更高的同级兄弟窗体,反反复复之后,鼠标点击处对应的窗体句柄hWin就轻松的找到了,
  鼠标的单击、双击、拖动等消息就会发送给该窗体,鼠标消息也将终止在hWin,这和键盘key消息不同,
  键盘key消息会一直传递到parent的parent等,而鼠标消息将终止到hWin这里,所以对于Button控件,
  接收到鼠标点击后,Button会发送WM_NOTIFY_PARENT消息给父窗体,来主动向父窗体报告自己的点击状态,
  父窗体Id = WM_GetId(pMsg->hWinSrc);获取button的id号,如GUI_ID_OK,GUI_ID_CANCEL之类的,
  这样父窗体就直到消息是由哪个控件传递过来的,进而也就间接的知道鼠标的动作,进而做出相应的处理.
5.对于窗体销毁
  GUI_EndDialog()函数,如在frame创建时,使用了_cbCallback()"用户自定义的消息回调处理函数",那么
  当frame"客户区回调函数"FRAMEWIN__cbClient(),调用之前,
  if (cb) {
    pMsg->hWin = hParent;//将消息目的窗体改为客户区的父窗体"标题栏和框架"窗体
    (*cb)(pMsg);
  }
  所以在"用户自定义的消息回调处理函数"中调用GUI_EndDialog(hWin,1);,hWin已经不是frame的客户区句柄
  而是frame"标题栏和框架"句柄,所以销毁的也就不是frame的客户区,而是frame自身.
  这个在GUI_MessageBox()函数中被体现的淋漓尽致.
  GUI_EndDialog()最终调用WM_DeleteWindow()来删除窗体,所以如果我们需要动态删除某个控件,那么
  直接调用WM_DeleteWindow()即可.
阅读(2802) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~