【发布时间】:2014-04-06 07:45:46
【问题描述】:
我正在使用 C 和 WIN32API 进行编程。我想创建一个列表,然后单击选择一行。我已经编程关注the link。我的程序可以获得点击消息,但该行没有获得焦点。我正在使用 WM_NOTIFY 来获取消息,并且我定义了一个函数来部署更多操作。我不想使用 MFC。接下来我该怎么做?
环境:
WIN7 VC6.0 C 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);
}
【问题讨论】:
-
HANDLE_MSG?它是一个 C 风格的宏。
-
你在说什么HANDLE_MSG???
-
MFC标签是什么意思?
-
因为你已经标记了这个 MFC,但是有人删除了这个标记。就是这样。
-
好吧,我觉得MFC和WINAPI有关,熟悉MFC的人可能对WINAPI比较了解。
标签: c winapi listview visual-c++