本文内容参考了资料1和三变公子的博客资料2.

本文使用的方法在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里画图看看效果。


, ,

引用地址:http://www.lolook.org/archives/16360

楼被抢了2层了

  1. 老大,你研究的太高深了


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

    lolook Says @ 08-03-21 6:02 pm

要说点啥就在这吧