我仍然在学习C++ MFC,我的问题是:我如何才能得到CurSel的2列表框作为数字,然后添加它们并打印结果?结果显示了一个奇怪的659998896数字而不是2。我在这里做错了什么?
BOOL CEngravingCalculatorDlg::OnInitDialog(){
CListBox* emplistbox1 = static_cast<CListBox*>(GetDlgItem(IDC_LIST1));
emplistbox1->AddString(L"1");
emplistbox1->SetCurSel(0);
CListBox* emplistbox3 = static_cast<CListBox*>(GetDlgItem(IDC_LIST3));
emplistbox3->AddString(L"1");
emplistbox3->SetCurSel(0);
}
void CEngravingCalculatorDlg::OnBnClickedButton1()
{
CListBox* emplistbox1 = static_cast<CListBox*>(GetDlgItem(IDC_LIST1));
CListBox* emplistbox3 = static_cast<CListBox*>(GetDlgItem(IDC_LIST3));
int num1 = emplistbox1->GetCurSel();
int num2 = emplistbox3->GetCurSel();
int equal = num1 + num2;
CString str;
str.Format(_T("%d", equal));
GetDlgItem(IDC_Display)->SetWindowTextW(str);
}发布于 2022-06-21 01:30:42
_T是一个只接受单个参数的宏。因为一个错误,你给了它两个参数。第二个问题被忽视并有效地丢失了。这意味着您的format调用只得到一个参数,并且您正在看到未定义的行为。用以下方法修复它:
str.Format(_T("%d"), equal);这意味着你的错误与列表箱完全无关。
发布于 2022-06-21 01:53:15
看这个片段。GetCurSel()用于获取光标位置,而不是内容。使用GetText()获取列表框的内容。
void CEngravingCalculatorDlg::OnBnClickedButton1()
{
CListBox* emplistbox1 = static_cast<CListBox*>(GetDlgItem(IDC_LIST1));
CListBox* emplistbox3 = static_cast<CListBox*>(GetDlgItem(IDC_LIST3));
int num1 = emplistbox1->GetCurSel();
int num2 = emplistbox3->GetCurSel();
CString ItemSelected1, ItemSelected2;
if (num1 != LB_ERR && num2 != LB_ERR) {
emplistbox1->GetText(num1, ItemSelected1);
emplistbox3->GetText(num2, ItemSelected2);
int equal = atoi(CStringA(ItemSelected1).GetString()) + atoi(CStringA(ItemSelected2).GetString());
CString str;
str.Format(L"%d", equal);
SetDlgItemText(IDC_Display, str);
}
}https://stackoverflow.com/questions/72693940
复制相似问题