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

GetText is returning a null string for a list box in a MFC program

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);
...

列表框已选中一项。这有什么问题吗?

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

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);
...

不要使用 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 机制将您的控件映射到 class 变量:

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