我住包子山

this->blog.MoveTo("blog.baozishan.in")

关于Up/Down控件(spin control)使用方法的一点小心得

image    学用纯SDK写win32程序,资料有一个英文版Windows Programming电子书,以及MSDN,用到了Up/Down控件让用户输入数据,同时也提供了Edit box.两者的同步是否会有问题呢?
  尝试了半天,终于有了点结果:
1、初始化控件,对控件句柄发送UDM_SETRANGE32消息,进行范围的初始话。UDM_SETPOS32消息设置初值。
   
image
2、关联Edit Box 控件,这个我弄了半天才明白,首先要在资源编辑中的对话框编辑界面,设定Tab控件的顺序(格式->Tab键顺序)。将Edit Box的序号设置成Up/Down控件序号减一,设定Up/Down的属性Auto Buddy为True,Set Buddy Integer为true。
3、现在已经能够正常的使用Up/Down功能了。
  可是如果不想用控件关联,而是自己设定逻辑怎么办呢?几个小时之前我不会关联的方法,想要努力实现手动维护Edit box的功能。最后终于有了些教训,得到了点心得:
  在Up/Down的父窗口(一般是对话框)的消息处理函数中,对WM_VSCROLL消息做一个处理,当lParam与Up/Down的窗口句柄相等时,对Up/Down的操作结束 ,其中wParam中的高位部分是Up/Down的值,用这个值来更新Edit Box。
WM_VSCROLL nScrollCode = (int)LOWORD(wParam);
  nPos = (short int)HIWORD(wParam);
  hwndScrollBar = (HWND) lParam;

  今天我的教训是使用了WM_NOTIFY的消息,处理UDN_DELTAPOS的通知,lParam是一个结构:NMUPDOWN,通过这个结构来更新Edit box,因为这个通知不等操作结束就已经发出,并且这个结构体中有当时的位置以及变化量,更新时候还需要将当时位置加上变化量。这样的更新就会出现一定的问题,有时候pos已经到了设定好的范围边界,pos加上变化量就会超出边界,还要继续判断,效率等等问题就出现了,而且十分麻烦。所以最好使用关联的方法,如果有特殊要求就用WM_VSCROLL响应,千万不要使用UDN_DELTAPOS,白花功夫,呵呵。就写到这里.

今天是除夕了,祝所有程序员朋友新春快乐!!

posted on 2008-02-06 02:14 Gohan 阅读(8050) 评论(1)  编辑 收藏 引用 所属分类: PractiseMFC/SDK

Feedback

# re: 关于Up/Down控件(spin control)使用方法的一点小心得 2011-01-18 09:11 企业即时通讯

感谢,无私的分享,学习了。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理