在我的MFC应用程序中出现意外错误

时间:2015-08-17 06:02:58

标签: c++ visual-c++ mfc c-strings

我试图逐个字符地访问CString元素 我在以下代码行中收到错误:

void CTOTALTIMECALCDlg::OnBnClickedOk()
{ 
    // TODO: Add your control notification handler code here
    CString lstring;
    m_Timeget.GetWindowText(lstring);
    MessageBox(lstring[0]);
    CDialogEx::OnOK();
}

错误:

  

"错误1错误C2664:' int CWnd :: MessageBoxW(LPCTSTR,LPCTSTR,UINT)' :   无法从' wchar_t'转换参数1到LPCTSTR'"在线   的"的MessageBox(lstring [0]);"

1 个答案:

答案 0 :(得分:2)

如果您只想打印MessageBox中的第一个字符,请不要指望它从LPCTSTR转换为> LPCWSTR(Unicode) - > const WCHAR*wchar_t

打印整个CString,或正确打印第一个字符。

void CTOTALTIMECALCDlg::OnBnClickedOk()
{ 
    // TODO: Add your control notification handler code here
    CString lstring;
    m_Timeget.GetWindowText(lstring);
    if (!lstring.IsEmpty())
        MessageBox(lstring.Left(1));
    CDialogEx::OnOK();
}

MessageBox接受LPCTSTR作为参数 Unicode设置中LPCTSTR已解决const wchar_t* CString::operator[ ]返回TCHAR,其中wchar_t为Unicode CString::operator LPCTSTR()请参见下面的代码

//You are doing this:
MessageBox(wchar_t);
//It wants this:
MessageBox(wchar_t*);
//CString::Left will return a new CString
MessageBox(CString::Left . CString::operator LPCTSTR());