Re: CEdit Control - Exception calling setwindowtext
Am Mittwoch, 11. Februar 2015 20:21:22 UTC+1 schrieb Carl Hartman:
CEdit m_edit1;
added to DoDataExchange
DDX_Control(pDX, IDC_EDIT1, m_edit1);
In the FormView cpp file example:
void CTestView::OnEnChangeEdit1()
{
CString str;
m_edit1.GetWindowTextW(str); // get the string
if(!str.IsEmpty()) // string not empty
{
str = str.MakeUpper(); // change to upper case
m_edit1.SetWindowTextW(str); // put it back
}
}
The line:
m_edit1.SetWindowTextW(str); // put it back
causes this:
First-chance exception at 0x5082D7A3 (mfc120ud.dll) in Test.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00322FFC).
Unhandled exception at 0x5082D7A3 (mfc120ud.dll) in Test.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00322FFC).
I guess you really cause a stack overflow.
In your OnEnChangeEdit1 function you get notified that the text has
been changed. The you modifiy it yourself (to upper case) and call
SetWindowsText. This causes another notification that the text has
changed. Again you modify the text (which is not really a modifaction)
and call SetWindowsText. Then you get another notification...
Just put a breakpoint into your OnEnChangeEdit1 function and watch
what happens.
I would check if the text has changed by making it uppercase
and call SetWindowText only if it really is differnt from the
original string. Something like this:
void CTestView::OnEnChangeEdit1()
{
CString strOrig, strUpperCase;
m_edit1.GetWindowTextW(strOrig); // get the string
if(!strOrig.IsEmpty()) // string not empty
{
strUpperCase = strOrig.MakeUpper(); // change to upper case
if (strUpperCase != strOrig)
m_edit1.SetWindowTextW(strUpperCase); // put it back if changed
}
}
HTH