listbox 选中失败

legionalways 2011-06-23 09:00:09
如图


我用win32 API 写了个链表数据操作。
希望 按下删除按钮时,能获取选中item的index 然后赋给一个全局的 int g_index


BOOL CALLBACK EditorProc(HWND hwnd, MSG msg, WPARAM wParam , LPARAM lParam)
{
static HWND hList =GetDlgItem(hwnd,IDC_LIST_SHOW);
switch(msg)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{

case IDC_REMOVE:
g_index = SendMessage(hList,LB_GETCURSEL,0,0);//总是返回0 啊
if(LB_ERR==g_index)
MessageBox(hwnd,L"没有选中任何选项",L"错误",MB_OK);
else
{
g_data_list.Remove(g_index);
g_string_list.Remove(g_index);
UpdateList();
}
break;

..................
..................}
}



问题是g_index = SendMessage(hList,LB_GETCURSEL,0,0)
返回的总是0 ,
即使你不选中任何物件。
...全文
64 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
legionalways 2011-06-23
  • 打赏
  • 举报
回复
great ,,我刚刚也想出来了。。。
thanks, 结贴了。。。
kyotrue 2011-06-23
  • 打赏
  • 举报
回复
EditorProc是你的窗口函数吧,static变量只会在第一次进入函数时初始化一次,以后都不会变的。

而第一次进入EditorProc窗口函数时,对话框都还没开始建立,GetDlgItem肯定是NULL,其实这个问题你调试一下就看出来了。
Eleven 2011-06-23
  • 打赏
  • 举报
回复
static HWND hList =GetDlgItem(hwnd,IDC_LIST_SHOW);
-----------
一般把HWND hList定义为全局变量,在WM_INITDIALOG消息响应中
调用hList = GetDlgItem(hwnd, IDC_LIST_SHOW);
序员 2011-06-23
  • 打赏
  • 举报
回复
哦也,,thanks



不过为什么呢?

kyotrue 2011-06-23
  • 打赏
  • 举报
回复
static HWND hList;
把static去掉

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧