Reputation: 3736
I am programing using C and WIN32API. I want to create a list and then select a line with single click. I have programmed follow the link. My program can get click message, but the line did not get focus. I am using WM_NOTIFY to get message, and I define a function to deploy more operation. I dont want to use MFC. What should I do next?
ENV:
WIN7 VC6.0 C WINAPI
CODES:
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;
}
EXPECTED
The line should get focus after click.
Edit
I have used ListView_SetItemState. But it not works.
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);
}
Upvotes: 1
Views: 3612
Reputation: 4590
You can change the state of a list view using ListView_SetItemState. It will update the state flags for the item.
Upvotes: 5