天天看點

超級清單框

WC_LISTVIEW二、相關的函數操作 SysListView32
因為是SDK程式設計,是以對控件的操作是向控件發送SendMessage()來實作的
LISTVIEW中的相關消息為:
1、LVM_SETTEXTCOLOR 和 LVM_SETTEXTBKCOLOR 消息設定文本的前景和背景色
2、 LVM_GETNEXTITEM找到選中的行,對應ListView_GetNextItem宏将SendMessage打包為函數方式操作。
3、LVM_SETCOLUMNWIDTH設定列寬,對應ListView_SetColumnWidth
4、LVM_SETEXTENDEDLISTVIEWSTYLE設定擴充風格如:LVS_EX_FULLROWSELECT(選中一整行), LVS_EX_GRIDLINES(網絡線),LVS_EX_CHECKBOXES(選擇按鈕),對應ListView_SetExtendedListViewStyle
5、LVM_INSERTCOLUMN插入新列,對應ListView_InsertColumn
6、LVM_INSERTITEM插入項目(行),對應ListView_InsertItem
7、LVM_SETITEM設定子項(行中的每列),對應ListView_SetItem
8、LVM_GETITEMCOUNT擷取項數,對應ListView_GetItemCount
9、LVM_DELETEITEM删除項,對應ListView_DeleteItem
還有很多關于選中響應的消息就不列舉了,可以在相應的頭檔案中去查找
c:/Program Files/Microsoft SDKs/Windows/v6.0A/Include/CommCtrl.h
 
三、相關的結構
//
//配置列屬性
//
typedef struct _LVCOLUMN
{ 
    //說明此結構中哪些成員是有效的,LVCF_FMT = fmt有效,
    //LVCF_SUBITEM = iSubItem有效,LVCF_TEXT = pszText有效,LVCF_WIDTH = lx有效
    UINT mask; 
    //列的對齊方式
    int fmt; 
    //列的初始寬度,以後您可以發送消息LVM_SETCOLUMNWIDTH來改變列的寬度
    int cx;    
    //列的标題
    LPTSTR pszText; 
    //pszText所指向的緩沖區的大小
    int cchTextMax;  
    //與列關聯的子項的索引值,從0開始,要查詢列的屬性時可以發送LVM_GETCOLUMN消息,
    //并在成員變量imask中指定LVCF_SUBITEM标志,
    //清單控件将在iSubItem中傳回插入時設定的iSubItem值
    int iSubItem;      
    //與列關聯的圖像清單中指定圖像的索引值
    int iImage;       
    //第幾列,0代表最左一列
    int iOrder;          
} LVCOLUMN, FAR *LPLVCOLUMN;
 
 
//
//配置項,通過向清單視圖發送LVM_INSERTITEM消息來向其中添加項目
//
typedef struct _LVITEM 
{ 
    //說明LVITEM結構中哪些成員有效
    UINT   mask; 
    //項目的索引值(可以視為行号)從0開始
    int    iItem;     
    //子項的索引值(可以視為列号)從0開始
    int    iSubItem;   
    //子項的狀态,是否有焦點/高亮度顯示/被選中(由于被剪切)/被選中等
    //還包括以1為基數的索引用來代表是否處使用重疊/狀态圖示
    UINT   state;      
    //狀态有效的屏蔽位
    UINT   stateMask;  
    //主項或子項的名稱
    LPTSTR pszText; 
    //pszText所指向的緩沖區大小
    int    cchTextMax; 
    //關聯圖像清單中指定圖像的索引值
    int    iImage;    
    //程式定義的32位參數,當您給項目排序時使用。
    //當您告訴清單視圖對項目排序時,清單視圖将成對地比較項目
    //它将會把兩個項目的lParam的值傳給您,這樣您就可以進行比較先列出那一個了
    LPARAM lParam;    
    //表示圖像位置縮進的機關
    int iIndent;        
} LVITEM, FAR *LPLVITEM;
 
typedef struct _LVCOLUMN {
UINT mask;            //說明此結構中哪些成員是有效的
int fmt;           //列的對齊方式
int cx;            //列的初始寬度
LPTSTR pszText; //列的标題
int cchTextMax;   //pszText所指向的緩沖區的大小
int iSubItem;      //與列關聯的子項的索引值,從0開始
int iImage;           //與列關聯的圖像清單中指定圖像的索引值
int iOrder;           //第幾列,0代表最左一列
} LVCOLUMN, FAR *LPLVCOLUMN;
typedef struct _LVITEM {
UINT   mask;        //說明LVITEM結構中哪些成員有效
int    iItem;       //項目的索引值(可以視為行号)從0開始
int    iSubItem;    //子項的索引值(可以視為列号)從0開始
UINT   state;       //子項的狀态
UINT   stateMask;   //狀态有效的屏蔽位
LPTSTR pszText;   //主項或子項的名稱
int    cchTextMax; //pszText所指向的緩沖區大小
int    iImage;       //關聯圖像清單中指定圖像的索引值
LPARAM lParam;    //程式定義的32位參數
int iIndent;          //表示圖像位置縮進的機關
} LVITEM, FAR *LPLVITEM;

LVM_APPROXIMATEVIEWRECT    // 計算需要顯示的項目數的近似寬度和高度。你可以明确的發送這個消息,或者使用宏ListView_ApproximateViewRect。
 LVM_ARRANGE       // 排列
 LVM_CREATEDRAGIMAGE    // 建立拖動圖像
 LVM_DELETEALLITEMS    // 删除所有項
 LVM_DELETECOLUMN    // 删除列
 LVM_DELETEITEM     // 删除項    
 LVM_EDITLABEL     // 編輯标簽
 LVM_ENSUREVISIBLE    // 確定可見
 LVM_FINDITEM     // 查找項
 LVM_GETBKCOLOR     // 擷取背景顔色
 LVM_GETBKIMAGE     // 擷取背景圖像
 LVM_GETCALLBACKMASK    // 傳回清單視圖控件的回調掩碼。你可以明确的發送這個消息,或者使用ListView_GetCallbackMask宏。
 LVM_GETCOLUMN     // 取得清單視圖控件的列的屬性 
 LVM_GETCOLUMNORDERARRAY    // 以自左向右的順序取得清單視圖控件目前的列。
 LVM_GETCOLUMNWIDTH    // 取得列的寬度
 LVM_GETCOUNTPERPAGE    // 當清單視圖控件使用清單視圖或者報告視圖時,計算顯示區域能垂直顯示的項的數目。隻有能完全顯示的項才會被計數。
 LVM_GETEDITCONTROL    // 取得編輯清單視圖項文本的編輯控件的句柄。
 LVM_GETEXTENDEDLISTVIEWSTYLE   // 取得清單視圖控件現在正在使用的擴充風格
 LVM_GETHEADER     // 取得清單視圖控件使用的标頭控件的句柄
 LVM_GETHOTCURSOR    // 擷取在焦點項上的滑鼠值
 LVM_GETHOTITEM     // 擷取焦點項索引
 LVM_GETHOVERTIME    // 
 LVM_GETIMAGELIST    // 擷取image List
 LVM_GETISEARCHSTRING    // 
 LVM_GETITEM      // 擷取項
 LVM_GETITEMCOUNT    // 擷取項數目
 LVM_GETITEMPOSITION    // 擷取項位置
 LVM_GETITEMRECT     // 擷取項RECT
 LVM_GETITEMSPACING    // 擷取項與項的間距
 LVM_GETITEMSTATE    // 擷取項的狀态
 LVM_GETITEMTEXT     // 擷取項的文本
 LVM_GETNEXTITEM     // 擷取下一個項
 LVM_GETNUMBEROFWORKAREAS   // 在清單視圖控件檢索一些領域的工作
 LVM_GETORIGIN     // 檢索為清單視圖控件的目前視圖的起源
 LVM_GETSELECTEDCOUNT    // 擷取所選項的數目
 LVM_GETSELECTIONMARK    // 擷取選中項的Mark 
 LVM_GETSTRINGWIDTH    // 擷取目前ListView字型的寬度
 LVM_GETSUBITEMRECT    // 擷取子項的RECT
 LVM_GETTEXTBKCOLOR    // 擷取文本背景顔色
 LVM_GETTEXTCOLOR    // 擷取文本顔色
 LVM_GETTOOLTIPS     // 擷取提示字元
 LVM_GETTOPINDEX     // 擷取頂端項索引   
 LVM_GETUNICODEFORMAT    // 擷取寬字元格式
 LVM_GETVIEWRECT     // 擷取View RECT
 LVM_GETWORKAREAS    // 擷取工作區域
 LVM_HITTEST     // 擷取滑鼠點選的詳細資訊
 LVM_INSERTCOLUMN    // 插入列
 LVM_INSERTITEM     // 插入項
 LVM_REDRAWITEMS     // 設定一個開始項和結束項, 重繪這個些項   
 LVM_SCROLL     // 滾動的清單視圖控件的内容
 LVM_SETBKCOLOR     // 設定背景顔色
 LVM_SETBKIMAGE     // 設定背景image
 LVM_SETCALLBACKMASK    // 設定清單視圖控件的回調掩碼
 LVM_SETCOLUMN     // 設定列
 LVM_SETCOLUMNORDERARRAY
 LVM_SETCOLUMNWIDTH    // 設定列的寬度
 LVM_SETEXTENDEDLISTVIEWSTYLE
 LVM_SETHOTCURSOR    // 設定滑鼠焦點到該項
 LVM_SETHOTITEM     // 設定焦點項
 LVM_SETHOVERTIME
 LVM_SETICONSPACING
 LVM_SETIMAGELIST
 LVM_SETITEM
 LVM_SETITEMCOUNT
 LVM_SETITEMPOSITION
 LVM_SETITEMPOSITION32
 LVM_SETITEMSTATE    // 設定項狀态
 LVM_SETITEMTEXT     // 設定行文本
 LVM_SETSELECTIONMARK    
 LVM_SETTEXTBKCOLOR    // 設定文本背景顔色
 LVM_SETTEXTCOLOR    // 設定文本顔色
 LVM_SETTOOLTIPS     // 設定提示
 LVM_SETUNICODEFORMAT
 LVM_SETWORKAREAS
 LVM_SORTITEMS     // 排列項
 LVM_SUBITEMHITTEST    // 子項滑鼠點選的詳細資訊
 LVM_UPDATE     // 更新資料
2. List View Control Notification Messages
 LVN_BEGINDRAG      // 開始拖動
 LVN_BEGINLABELEDIT     // 開始編輯标簽
 LVN_BEGINRDRAG
 LVN_COLUMNCLICK      // 列單擊
 LVN_DELETEALLITEMS     // 删除所有項
 LVN_DELETEITEM      // 删除項
 LVN_ENDLABELEDIT     // 啟用項
 LVN_GETDISPINFO      // 擷取
 LVN_GETINFOTIP
 LVN_HOTTRACK
 LVN_INSERTITEM      // 插入項
 LVN_ITEMACTIVATE     // 項活動
 LVN_ITEMCHANGED      // 項改變
 LVN_ITEMCHANGING     // 項改變中
 LVN_KEYDOWN       // 鍵按下
 LVN_MARQUEEBEGIN     // 滑鼠點選開始拖動
 LVN_ODCACHEHINT      // 滾動視圖時
 LVN_ODFINDITEM
 LVN_ODSTATECHANGED
 LVN_SETDISPINFO
http://blog.csdn.net/yl_wh/article/details/7879837


ZWhwnd = CreateWindow ( WC_LISTVIEW,NULL,WS_VISIBLE | WS_CHILD | WS_BORDER |
                                              LVS_REPORT | LVS_SHOWSELALWAYS,10,10,240,280,hwnd,( HMENU ) 1,( HINSTANCE ) GetWindowLong ( hwnd,GWL_HINSTANCE ),NULL );
                      SendMessageA ( ZWhwnd,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_GRIDLINES,-1 );
                      LVCOLUMN ColInfo1 = { 0 };
                      LVITEM p1 = { 0 };
                      ColInfo1.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVS_REPORT;
                      ColInfo1.fmt = LVCFMT_CENTER;
                      ColInfo1.iSubItem = 0;
                      ColInfo1.cx = 80;
                      ColInfo1.pszText = L"目标位址";
                      SendMessageA ( ZWhwnd,LVM_INSERTCOLUMN,0,( LPARAM ) &ColInfo1 );
                      ColInfo1.pszText = L"目前的值";
                      ColInfo1.iSubItem = 1;
                      SendMessageA ( ZWhwnd,LVM_INSERTCOLUMN,1,( LPARAM )  &ColInfo1 );
                      ColInfo1.pszText = L"搜尋的值";
                      ColInfo1.iSubItem = 2;
                      SendMessageA ( ZWhwnd,LVM_INSERTCOLUMN,2,( LPARAM ) &ColInfo1  );
                      p1.mask = LVIF_TEXT | LVIF_STATE;
                     p1.state = INDEXTOSTATEIMAGEMASK ( 1 );
                      p1.pszText = L"00400000";
                     SendMessageA ( ZWhwnd,LVM_INSERTITEM,0,( LPARAM ) &p1 );
                     SendMessageA ( ZWhwnd,LVM_INSERTITEM,0,( LPARAM ) &p1 );
                    p1.pszText = L"00400001";
                    p1.iSubItem = 1;//第幾列
                     SendMessageA ( ZWhwnd,LVM_SETITEMTEXT,0,( LPARAM ) &p1 );
                     SendMessageA ( ZWhwnd,LVM_SETITEMTEXT,1,( LPARAM ) &p1 );
                     SendMessageA ( ZWhwnd,LVM_SETITEMTEXT,2,( LPARAM ) &p1 );