win32(不是mfc)的listctrl控件,怎么获取选中事件(消息)? 当选中某一行时,我就做某些事.
3个回答
展开全部
//在消息处理函数中
case WM_NOTIFY:
return OnNotify(hWnd, (NMHDR*)lParam);
//控件通知消息
LRESULT OnNotify(HWND hWnd, NMHDR* lpNMhdr)
{
if (lpNMhdr->idFrom == IDC_LISTVIEW) //控件id:IDC_LISTVIEW
{
if (lpNMhdr->code == LVN_ITEMCHANGED) //选中项发生改变消息
{
//接受消息代码
NMLISTVIEW* pNMListView = (NMLISTVIEW*)lpNMhdr;
int nItem = pNMListView->iItem; //获得选中的行的索引
int nCol = pNMListView->iSubItem; //获得列的索引
}
}
return TRUE;
}
//lParam参数传过来的结构体数据
typedef struct tagNMLISTVIEW
{
NMHDR hdr; //通用NMHDR通知结构
int iItem; //选中的项的索引
int iSubItem; //选中行列的索引
UINT uNewState; //选中的新项
UINT uOldState; //选中的旧项
UINT uChanged; //行的状态
POINT ptAction; //鼠标位置
LPARAM lParam; //附加的数据
} NMLISTVIEW, *LPNMLISTVIEW;
case WM_NOTIFY:
return OnNotify(hWnd, (NMHDR*)lParam);
//控件通知消息
LRESULT OnNotify(HWND hWnd, NMHDR* lpNMhdr)
{
if (lpNMhdr->idFrom == IDC_LISTVIEW) //控件id:IDC_LISTVIEW
{
if (lpNMhdr->code == LVN_ITEMCHANGED) //选中项发生改变消息
{
//接受消息代码
NMLISTVIEW* pNMListView = (NMLISTVIEW*)lpNMhdr;
int nItem = pNMListView->iItem; //获得选中的行的索引
int nCol = pNMListView->iSubItem; //获得列的索引
}
}
return TRUE;
}
//lParam参数传过来的结构体数据
typedef struct tagNMLISTVIEW
{
NMHDR hdr; //通用NMHDR通知结构
int iItem; //选中的项的索引
int iSubItem; //选中行列的索引
UINT uNewState; //选中的新项
UINT uOldState; //选中的旧项
UINT uChanged; //行的状态
POINT ptAction; //鼠标位置
LPARAM lParam; //附加的数据
} NMLISTVIEW, *LPNMLISTVIEW;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
listbox需要LBS_NOTIFY 风格
在wm_command中响应LBN_SELCHANGE (单击选中)(或者LBN_DBLCLK双击)
case wm_command
if (LOWORD(wParam) == ID_list && HIWORD(wParam) == LBN_SELCHANGE )
{//do}
在wm_command中响应LBN_SELCHANGE (单击选中)(或者LBN_DBLCLK双击)
case wm_command
if (LOWORD(wParam) == ID_list && HIWORD(wParam) == LBN_SELCHANGE )
{//do}
追问
谢谢拉,不过你说的是listbox吧? 我想知道listctrl控件
参考资料: http://msdn.microsoft.com/en-us/library/bb775161(VS.85).aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LVN_ITEMSELCHANGED
追问
这个消息在主窗口过程中,是怎么获取到得? 好像listctrl不会发送wm_command消息.
追答
WM_NOTIFY里面的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询