我正在使用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;
}
預期
點擊後,該行應獲得焦點。
編輯
我已經使用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);
}
爲什麼這個MFC標籤? – Xearinox
HANDLE_MSG?這是一個C語言宏。 –
你在說什麼HANDLE_MSG? – Xearinox