LOWORD與HIWORD,GetEditSel與SetEditSel

兩個宏函數

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 '後面。

發佈了23 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章