ActiveX에서 FormView처럼 사용하기
ActiveX에서 무리하게 CFormView를 사용하면 안된다.
OnInitialUpdate() 호출이 되지 않아 CFormView생성 후 초기화 할 방법이 없다.
(OnCreate() 내에서 호출하면 윈도우 생성 이전이기 때문에 핸들값이 비어있다.)
그냥 CDialog 하나 붙여서 사용.
아래는 관련 링크
http://www.codeguru.com/Cpp/COM-Tech/activex/controls/article.php/c2615
하지만 아래와 같이 직접 OnCreate 내에서 FormView를 강제로 생성 할 수 있다
1. Dialog 하나 생성 한 다음에 Wizard를 사용해 Class 추가하는데 base Class를 CFormView로 지정한다.
2. 생성된 CMyFormView 클래스에 아래처럼 Create Overriding 한다.
BOOL CSmartMapFormView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, CCreateContext *pContext)
{
return CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
3. Ctrl Class에 WM_Create 핸들러 추가하고 아래 코드를 삽입한다.
int CSmartMapFormCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
CRuntimeClass* pViewClass = RUNTIME_CLASS(CSmartMapFormView);
m_pFormView = (CSmartMapFormView*)pViewClass->CreateObject();
if(m_pFormView == NULL)
{
TRACE("CreateObject Failed %Fs\n", pViewClass->m_lpszClassName);
return -1;
}
CCreateContext context;
context.m_pNewViewClass = pViewClass;
context.m_pCurrentDoc = NULL;
CRect rect(0, 0, 500, 400);
if(!m_pFormView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rect, this, AFX_IDW_PANE_FIRST, &context))
{
TRACE("FormView Create Failed \n");
delete m_pFormView;
m_pFormView = NULL;
return -1;
}
return 0;
}
이러면 ActiveX에 CFormView를 올릴 수 있다.
출처 : http://blog.pages.kr/307?srchid=BR1http%3A%2F%2Fblog.pages.kr%2F307