首先让我说我现在一直在寻找解决方案......
我正在尝试为ListBox获取所选项目。这是我的代码:
CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
CString ItemSelected;
// Get the name of the item selected in the Sample Tables list box
// and store it in the CString variable declared above
pList1->GetText(pList1->GetCurSel(), ItemSelected);
MessageBox(ItemSelected, "TEST", MB_OK);
现在,当我尝试这个时,我收到一条错误消息“The Parameter is incorect”
答案 0 :(得分:3)
除错误处理外,您的代码看起来还不错。 MessageBox
个参数看起来也不正确。第一个参数应为HWND
类型。我相信这是你问题的根本原因。改为使用MFC标准AfxMessageBox
:
CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
int nSel = pList1->GetCurSel();
if (nSel != LB_ERR)
{
CString ItemSelected;
pList1->GetText(nSel, ItemSelected);
AfxMessageBox(ItemSelected);
}
答案 1 :(得分:3)
如果CListBox处于单选模式,则CListBox :: GetCurSel将返回所选索引。
如果CListBox处于多选模式,则应使用CListBox :: GetSelItems,它将返回索引列表。
您不能混合使用这些功能。
并且始终检查返回代码(正如其他人已经写过的那样)。
答案 2 :(得分:0)
如果您已有数据成员MyList(classCListBox):
int nSel = MyList.GetCurSel();
CString ItemSelected;
if (nSel != LB_ERR)
{
MyList.GetText(nSel, ItemSelected);
}
答案 3 :(得分:0)
CWnd class has a MessageBox函数,不需要HWND参数。但是, AfxMessageBox 更容易使用,可以在没有CWnd派生对象的情况下在MFC代码中的任何地方调用。另外注意:如果在 MFC 代码中调用 WinAPI 函数(此处不需要,但在其他情况下可能),最好在其中添加范围解析运算符以便避免任何混淆,错误和/或名称冲突(例如 :: MessageBox ...)。
OP代码中出现“无效参数”错误的一个可能原因是它在UNICODE构建配置中使用ANSI字符串文字(“TEST”)。这种情况下,必须使用UNICODE字符串文字(L“TEST”)或更好一点,使用 _T 宏(_T(“TEST”)),这样就可以构建ANSI和UNICODE配置。