void CMy1110View::OnDraw(CDC* pDC)
{
CMy1110Doc* pDoc = GetDocument();
CString tmpStr;
int s_len;
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(excute==true)
{
pDC->TextOut(10,30,dlg.m_name01);
pDC->TextOut(10,70,dlg.m_age01);
pDC->TextOut(10,90,dlg.m_name02);
pDC->TextOut(10,100,dlg.m_age02);
}
if(excute2==true)
{
if(dlg2.m_ctrlright.GetCount()>=1)
{
for(int i=0;i<dlg2.m_ctrlright.GetCount();i++)
{
s_len=dlg2.m_ctrlright.GetTextLen(i);
dlg2.m_ctrlright.GetText(i,tmpStr.GetBuffer(s_len));
pDC->TextOut(200,200+i*10,tmpStr);
}
}
}
}
그쪽 소스 구여
View의 OnDraw()부분입니당
근데 문제는 dlg2의 m_ctrlright(CLISTBOX)인데 이부분에 접근할때
Debug Assertion이 일어나는군여 머가 잘ㄷ못된건지
참고로 dlg2는 Modal입니다.^^
if(dlg2.m_ctrlright.GetCount()>=1)
{
for(int i=0;i<dlg2.m_ctrlright.GetCount();i++)
{
s_len=dlg2.m_ctrlright.GetTextLen(i);
dlg2.m_ctrlright.GetText(i,tmpStr.GetBuffer(s_len));
pDC->TextOut(200,200+i*10,tmpStr);
}
}
위의 부분이 잘못되었습니다.
m_ctrlright 는 사용할 수 없습니다. 이것은 control 인데..
control 이라는 것은 일종의 window 입니다. ( CWnd 에서 상속된것을 생각하면 쉽게 이해가실 겁니다. )
이러한 Window 는 HWND 라는 handle 이 제대로 주어져 있지 않다면 사용할 수 없답니다.
따라서, 위의 코드는 dlg2 라는 Dialog 내에 m_ctrlright 가 갖는 값들을 저장할 수 있는 변수를 잡아주시고,
그 안에 값들을 가지고 있게 변경해준뒤, 그 변수를 통해 접근해야 합니다
이와 관련된 Assertion 에러가 발생해서 찾아본 결과 combobox와 같은 control 은 변수가 아니라는 뜻이다. 결국 핸들이 사라지기때문에 Assertion 이 발생 된다. 한마디로 다이얼로그에 생성된 control 을 부모가 접근할 수 없기 때문에 임지 저장해 그 값을 가지고 써야 한다는 것이다.