两个宏函数
LOWORD
定义:
#define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) <<16) & 0xFFFF ) )。
取低位的16位数据。
HIWORD
定义:
#define HIWORD(I) ( ( WORD ) ( ( ( DWORD )( I ) >>16) & 0xFFFF ) )。
取高位的16位数据。
其中有个问题,就是主机字节序的问题,不同的机器不同的主机字节序,大部分都是小头字节序,就是在内存地址n~m中,低位在n这边,高位在m这边
但是大头字节序正好与此相反。
举网上发现的一个例子:
DWORD dwT = 0x01010202; 内存地址从 0~3中数值分别是:00000002 00000002 00000001 00000001 你机器可能是大头字节序,和小头的相反: 举个例子:DWORD dwT = 0x01010202; 内存地址从 0~3中数值分别是:00000001 00000001 00000002 00000002 这时你取高位和低位和你理解的可能正好相反 可以自己测试下机器是大头还是小头: 比如:WORD wT = 0x01 *((BYTE*)&wT) == 0; //表示大头 *((BYTE*)&wT) == 1; //表示小头
GetEditSel()是列表框(List Box)和组合框(Combo List)的成员函数(operation)(member function)
返回一个DWORD 类型的数据,高位和低位分别保存的结束和开始的位置。但是在使用的时候,大多数的作用是还得到光标的位置。
比如我们在Combo List的编辑框中输入一个字母'A',那么调用GetEditSel得到的DWORD CurSel=0x00010001;
如果再输入个字母,CurSel = 0x00020002; 依次类推 这主要用在组合框的自动查询功能里
SetEditSel(int nStartChar, int nEndChar)也是列表框(List Box)和组合框(Combo List)的成员函数(operation)(member function)
功能是选择编辑控件里的字符(Selects characters in the edit control of a combo box)
其中若nStartChar = -1,msdn里说是:then any existing selection is removed。通过实验我的理解是:-1就是无限大,这个函数的效果就是把光标放到最后。
若nEndChar = -1, 则相当于nEndChar 无限大,直到编辑控件里面的最后一个字符,就选择nStartChar开始的到后面的所有字符。
SetEditSel()后面最好不要用MssageBox();会影响SetEditSel()表现出来的效果。
举例:
选择编辑控件里有字符串: "Saturday"
调用SetEditSel(1,-1);得到的结果就是 :此时的光标在'S'后面。
再次调用SetEditSel(-1,2);(nEndChar 随便填)得到的结果就是光标落到 ' y '后面。