프로그래밍/VC++

ActiveX에 CDialog 붙이는 법

panpro 2007. 4. 25. 10:30

음.. ActiveX에 CScrollView를 붙이면 디자인한 크기대로 되지 않고 자꾸 스크롤바가 생기기 때문에 귀찮아진다.
그래서 그냥 CDialog 를 붙이는 방법을 생각해 봤다.

1. ActiveX에서 다이얼로그를 만들고 그걸 더블클릭해서 CDialog Based 클래스를 하나 생성한다.

2. ActiveX의 Ctrl 클래스에 위에서 만든 클래스형의 멤버변수를 하나 선언한다. (예 : CMainFormDlg m_MainFormDlg; )

3. 생성자가 아닌, 반드시 OnCreate(WM_CREATE) 이벤트 핸들러에 다음과 같이 한다.
int CaxPreviewNoteCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
 return -1;

// TODO:  여기에 특수화된 작성 코드를 추가합니다.
m_MainFormDlg.Create(IDD_DIALOG1);
m_MainFormDlg.SetParent(this);
m_MainFormDlg.SetOwner(this);
m_MainFormDlg.ShowWindow(SW_SHOW);

return 0;
}

4. 다음 WM_SIZE 이벤트 핸들러에 다음과 같이 한다.
void CaxPreviewNoteCtrl::OnSize(UINT nType, int cx, int cy)
{
COleControl::OnSize(nType, cx, cy);

// TODO: 여기에 메시지 처리기 코드를 추가합니다.
m_MainFormDlg.MoveWindow(0, 0, cx, cy, FALSE);
}

이렇게 2군데 메시지만 처리해주면 바로 붙어버린다.