MFC C ++ CListBox获取所选项目

时间:2016-05-20 16:38:00

标签: c++ mfc

首先让我说我现在一直在寻找解决方案......

我正在尝试为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”

4 个答案:

答案 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配置。