2014-03-04 62 views
0

我正在使用C和WIN32API編程。我想創建一個列表,然後通過單擊選擇一行。我已編程按照the link。我的程序可以獲得點擊消息,但該行並沒有得到重點。我使用WM_NOTIFY來獲取消息,並且我定義了一個函數來部署更多的操作。我不想使用MFC。接下來我應該做什麼?如何使用win32API在列表視圖中選擇一行

ENV:

WIN7 VC6.0ÇWINAPI

碼:

int SearchMember_OnNotify(HWND hwnd, int id, LPNMHDR lParam); 

|

HANDLE_MSG(hWnd, WM_NOTIFY, SearchMember_OnNotify); 

|

int SearchMember_OnNotify(HWND hwnd, int id, LPNMHDR lParam) 
{ 
    switch(id) 
    { 
     case IDC_LIST_MEMBER: 
     { 

      if(lParam->code == NM_DBLCLK) 
      { 
       MessageBox(hwnd,TEXT("CHANGE"),TEXT(""),MB_OK); 

       char Text[255]={0}; 
       char Temp[255]={0}; 
       char Temp1[255]={0}; 
       int iSlected=0; 
       int j=0; 

       iSlected=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); 

       if(iSlected==-1) 
       { 
        MessageBox(hwnd,"No Items in ListView","Error",MB_OK|MB_ICONINFORMATION); 
        break; 
       } 

       memset(&LvItem,0,sizeof(LvItem)); 
       LvItem.mask=LVIF_TEXT; 
       LvItem.iSubItem=5; 
       LvItem.pszText=Text; 
       LvItem.cchTextMax=256; 
       LvItem.iItem=iSlected; 

       SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem); 

       sprintf(Temp1,Text); 

       for(j=1;j<=5;j++) 
       { 
        LvItem.iSubItem=j; 
        SendMessage(hList,LVM_GETITEMTEXT, iSlected, (LPARAM)&LvItem); 
        sprintf(Temp," %s",Text); 
        lstrcat(Temp1,Temp); 
       } 

       MessageBox(hwnd,Temp1,"test",MB_OK); 

      } 

      if(lParam->code == NM_CLICK) 
      { 
       iSelect=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); 

       if(iSelect==-1) 
       {      
        break; 
       } 
       index=iSelect; 
       flag=1; 

       MessageBox(hwnd,TEXT("CLICK"),TEXT("CLICKONCE"),MB_OK); 
      } 


     } 
     break; 

     default: 
     break; 
    } 
    return id; 
} 

預期

enter image description here

點擊後,該行應獲得焦點。

編輯

我已經使用ListView_SetItemState。但它不起作用。

 if(lParam->code == NM_CLICK) 
     { 

     // iSelect=SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); 
      iSelect=ListView_GetNextItem(hList,-1,LVNI_FOCUSED); 

      if(iSelect==-1) 
      {      
       break; 
      } 

      ListView_SetItemState(hList,iSelect,LVIS_SELECTED ,LVIS_SELECTED); 
      ListView_SetItemState(hList,iSelect,LVIS_FOCUSED ,LVIS_FOCUSED); 
      flag=1; 
      char a[] = "abc"; 
      //wsprintf(a,"%s",itoa(iSelect); 
      itoa(iSelect, a, 10); 

      MessageBox(hwnd,TEXT("CLICK"),TEXT(a),MB_OK); 
     } 
+0

爲什麼這個MFC標籤? – Xearinox

+0

HANDLE_MSG?這是一個C語言宏。 –

+0

你在說什麼HANDLE_MSG? – Xearinox

回答

3

您可以更改使用ListView_SetItemState列表視圖的狀態。它將更新該項目的狀態標誌。

+0

我已經使用ListView_SetItemState。它不起作用。我已經更新了我在**編輯**中所做的。 @rrirower –

+0

我丟失了'SendMessage(hList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT);'。現在它工作。謝謝。 –

相關問題