兩個宏函數
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 '後面。