使用列表控制的步驟如下:
呼叫createwindowex函式來建立乙個列表控制項,指定它的類名為syslistview32。您還可以在此處指定控制項初次顯示時的方式。
建立和初始化用在列表控制項中顯示專案的圖象列表(如果存在)。
向列表控制項中插入列,如果顯示的方式是報告方式這一步是必須的。
向控制項中插入專案和自專案。
所用到的兩種資料結構:
列:
lv_column structfield nameimask dd ?
fmt dd ?
lx dd ?
psztext dd ?
cchtextmax dd ?
isubitem dd ?
iimage dd ?
iorder dd ?
lv_column ends
meanings
imask
一組標誌位標明該結構體中那些成員變數中的值有效。它的意義和上面我們提到的lv_column型結構體中向對應的成員變數基本相同。更詳細的資訊,可以查詢win32 api 手冊。
iitem
該結構體代表的專案的索引號。索引號是從0開始編號的。該值和表單的「行」類似。
isubitem
和上乙個成員變數指定的專案相連的子專案的索引號。您可以把它當作表單的「列」。譬如您想要把乙個專案插入到新建立的列表檢視控制項,iitem的 值應為0(因為該專案是第乙個專案),isubitem的值也應當為0(我們想把該專案插到第一列)。如果你想指定乙個子專案和該專案相連,iitem中 應該是您想要相連的專案的索引號,isubitem的值應當是大於0的值,具體的值取決於您想把該子專案插在那一列。如果你的列表檢視控制項一共有4列的 化,第一列包含了專案,其餘3列是留給子專案的。如果您想把子專案插在第四列,應當指定該值為3。
state
該成員變數包含的標誌位反應了專案的狀態。狀態的改變可能是由使用者的操作引起的或是程式改變的。這些狀態包括:是否有焦點/高亮度顯示/被選中(由於被剪下)/被選中等。另外還包括,以1為基數的索引用來代表是否處使用重疊/狀態圖示。
statemask
由於上面的成員變數包含狀態標誌位、重疊的點陣圖索引號、和狀態點陣圖的索引號,我們需要告訴windows我們到底需要設定或查詢那乙個值。該成員變數就是用來做這項工作的。
psztext
當我們想設定專案的屬性時,它包含專案名稱的ascii碼的字串的位址。當查詢專案的屬性時,該成員變數將用來接收查詢返回的專案的名稱。
cchtextmax
僅當您用來查詢專案的屬性時才需要使用該值,這時它包含上乙個成員變數的大小。
iimage
圖示在列表檢視中的圖象鍊錶中的索引號。
lparam
使用者定義的值,當您給專案排序時使用。當您告訴列表檢視對專案排序時,列表檢視將成對地比較專案。 它將會把兩個專案的lparam的值傳給您,這樣您就可以進行比較先列出那乙個了。如果您現在還不太明白的話,沒有系,我們稍後還要講關於排序的問題。
控制項通過sendmessage來傳送訊息來控制,常用的訊息有:
lvm_insertcolumn 加入列,wparam 為整型,指定列號,lparam 為指向lv_column結構的指標
lvm_setcolumn 設定列,引數同上
lvm_insertitem 加入專案或子專案,wparam 為0,lparam 為指向lv_item結構的指標
lvm_setitem 設定專案或子專案,引數同上
lvm_getitem 取得專案或子專案,引數同上
lvm_getnextitem 取得下乙個專案或子專案,可以用來取得游標選擇的專案
lvm_deleteitem 刪除專案或子專案,wparam 為整型,指定專案索引號,lparam 為0
lvm_deleteallitems 刪除所有專案,wparam 和 lparam 均為0
lvm_settextcolor 設定文字顏色,wparam 為0,lparam 為顏色的rgb值
lvm_settextbkcolor 設定文字背景色,引數同上
lvm_setbkcolor 設定背景色,引數同上
下面是用syslistview32控制項實現的簡單的學生管理系統程式的一部分:
lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
lvi.mask = lvif_text;
lvi.cchtextmax = 20;
for (i = 0; i < 10; ++i)
if (dialogbox(hinst, text("studinfo"), hwnd, editdlgproc))
invalidaterect(hwnd, null, true);
break;
case iddelete:
lvi.iitem = sendmessage(hlist, lvm_getnextitem, -1, lvni_selected);
if (-1 == lvi.iitem)
sendmessage(hlist, lvm_deleteitem, lvi.iitem, 0);
lvi.mask = lvif_text;
lvi.isubitem = 0;
lvi.psztext = buf[0];
lvi.cchtextmax = 20;
sendmessage(hlist, lvm_getitem, 0, (long)&lvi);
sprintf(query, "delete from student where id = %s", buf[0]);
odbcconnect(hwnd);
odbcquery(query);
odbcqueryend();
odbcdisconnect(hwnd);
break;
case idexit:
sendmessage(hwnd, wm_close, 0, 0); break;
case idabout:
messagebox(hwnd, "students info administration system developed by anonymous", "about", mb_ok | mb_iconinformation);
} break;
case wm_size:
movewindow(hlist, 0, 0, loword(lparam), hiword(lparam), true);
break;
case wm_destroy:
postquitmessage(0);
break;
default:
return defwindowproc(hwnd, message, wparam, lparam);
} return 0;
}
void insertcolumn(void)
STM32中斷的使能
lib v3.0.0 的標頭檔案misc.c的void nvic init nvic inittypedef nvic initstruct 說 enable the selected irq channels nvic iser nvic initstruct nvic irqchannel 0x...
STM32F103 GPIO的外部中斷的使用例子。
stm32的gpio可以作為中斷輸入使用,這樣增強了實時檢測性,可以用於外部按鍵或是觸控等使用。如果使用,其實不難,這裡使用標準的韌體庫,加入外部中斷的庫檔案 stm32f10x exti.c 在stm32f10x conf.h 中,開啟 include stm32f10x exti.h 這裡通過外...
MIPS彙編 MIPS32中通用暫存器的使用約定
這段時間一直在學習mips32彙編。mips32並沒有強制指定通用暫存器的使用規則 除了0號暫存器始終為0,比較特殊 但是在實際使用中大家都會遵循一系列的約定。這裡以 的方式予以展示,當作是做個筆記,方便自己以後回看。名稱暫存器號 用途呼叫時是否儲存 zero 0常數0 不適用 v0 v1 2 3計...