GetText为MFC程序中的列表框返回空字符串

时间:2015-03-22 14:32:34

标签: c++ mfc

GetText为MFC程序中的列表框返回一个空字符串:

void CMainDlg::OnLbnSelchangeLiPt()
{
    CListBox* lb;
    int idx, cnt;
    char* cstr;
    lb = (CListBox*)GetDlgItem(IDC_LI_PT);
    idx = lb->GetCurSel();
    cnt = lb->GetCount();
    if ((idx != LB_ERR) && (cnt > 0))
    {
        cstr = NULL;
        lb->GetText(idx, cstr);
...

列表框中有一个选定的项目。这有什么问题?

2 个答案:

答案 0 :(得分:1)

请勿使用char a[32];

之类的内容

您应该使用:

CString sData;
int nSel = m_NameListBox.GetCurSel();
if (nSel != LB_ERR)
{
   m_NameListBox.GetText(nSel, sData);
}

您也可以致电m_NameListBox.GetWindowText(sData);

还请使用DataExchange MFC机制将控件映射到类变量:

void CSettingsGeneralPage::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_NAME_LISTBOX, m_NameListBox);
}

答案 1 :(得分:0)

我发现我需要声明一个具有足够空间来存储字符串的字符数组:

void CMainDlg::OnLbnSelchangeLiPt()
{
    CListBox* lb;
    int idx, cnt;
    char cstr[32];
    lb = (CListBox*)GetDlgItem(IDC_LI_PT);
    idx = lb->GetCurSel();
    cnt = lb->GetCount();
    if ((idx != LB_ERR) && (cnt > 0))
    {
        lb->GetText(idx, cstr);
...