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);
...
列表框中有一个选定的项目。这有什么问题?
答案 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);
...