本文使用的方法在VC++.net 2003上调试通过。
今天下午要做个东西,在对话框上显示一个滚动视图,并在视图中绘制一些图像。
查了一些资料后觉得下述方法是可行的。
第一步,使用MFC向导建立了一个单文档的工程。新建一个对话框CMydlg,在头文件中定义CFrameWnd * m_pFrame。新建一个滚动视图CMyview,这时视图类的virtual void OnInitialUpdate()函数是protected的,将其改为public,因为我们要在对话框中调用该函数。
第二步,在CMydlg::OnInitDialog()中加入下面的代码。
CCreateContext pContext;
CRect rectWndClient;
//得到对话框客户区大小
GetClientRect(&rectWndClient);
//下面是为了使视图框架比对话框小一些
rectWndClient.right-=45;
rectWndClient.top+=20;
rectWndClient.left+=45;
rectWndClient.bottom-=20;
m_pFrame= new CFrameWnd();
m_pFrame->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,rectWndClient,this);
pContext.m_pCurrentDoc =NULL;//我们没有建立文档
pContext.m_pNewViewClass = RUNTIME_CLASS(CMyview);
CMyview *pView =(CMyview *) ((CFrameWnd*)m_pFrame)->CreateView&pContext);
ASSERT(pView);
pView->ShowWindow(SW_NORMAL);
//视图从框架左上角到右下角
rectWndClient.left-=45;//使得rectWndClient.left等于0
rectWndClient.top-=20;//使得rectWndClient.top等于0
rectWndClient.right-=45;
rectWndClient.bottom-=20;
pView->MoveWindow(rectWndClient);
pView->OnInitialUpdate();//不加这一句在鼠标点击视图时会报错的,原因请看资料2
好了,到这里就可以在对话框上看到你的视图了,你可以像平常一样在OnDraw里画图看看效果。

老大,你研究的太高深了
wongbobo Says @ 08-03-20 4:45 pm
如果说我研究的高深,那简直是--笑死人了