SysListView32 的使用資料

2021-05-23 22:40:15 字數 3573 閱讀 7092

使用列表控制的步驟如下:

呼叫createwindowex函式來建立乙個列表控制項,指定它的類名為syslistview32。您還可以在此處指定控制項初次顯示時的方式。

建立和初始化用在列表控制項中顯示專案的圖象列表(如果存在)。

向列表控制項中插入列,如果顯示的方式是報告方式這一步是必須的。

向控制項中插入專案和自專案。

所用到的兩種資料結構:

列:

lv_column struct

imask dd ?

fmt dd ?

lx dd ?

psztext dd ?

cchtextmax dd ?

isubitem dd ?

iimage dd ?

iorder dd ?

lv_column ends

field name

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計...