|||
通常我们在设计算法的时候需要一个比较简单的人机交互界面,那么数据的调整与现实就显得必不可少,VC++通常是将文档视图框架作为一个整体展现给我们,这样在某一个子步骤中难免有很多麻烦,我的想法是在以对话框为框架,左边为数据的输入与调整,右边需要显示数据进行交互,那么我们就不需要利用MFC本身的文档视图结构,从而实现自己想要的功能。
1、我的想法是在MDI工程中通过一个菜单命令调用一个动态创建的无模式对话框,然后在无模式对话框上放置了一个静态控件,这个静态控件主要是用来实现一个区域的作用,这个区域用来固定显示VIEW动态创建后显示的区域。
2、利用Wizard生成一个基于CView的CTestView类;在CtestView类中声明一个成员变量Pview;在对话框中添加如下代码:
void CDephData_Dlg::CreateView()
{
CRect rect;
CWnd *pWnd=GetDlgItem(IDC_STATIC5); //获得静态控件的指针
pWnd->GetWindowRect(&rect);//获得静态控件的位置
pWnd->DestroyWindow();//必须销毁静态窗体,否则视图是依附在静态控件上
ScreenToClient(&rect);
CCreateContext cx;
cx.m_pNewViewClass=RUNTIME_CLASS(CSplitLayerView);
cx.m_pCurrentDoc=NULL;
CFrameWnd* pfWnd=(CFrameWnd*)this;
pView=(CSplitLayerView*)pfWnd->CreateView(&cx);
// pView->SetScrollSizes(MM_TEXT,CSize(2000,2000));//当你继承的基类是滚动视图类时这句很重要,需要设置视的大小
pView->MoveWindow(&rect);
3、不过又有了一个新的问题,对话框中生成后如果点击视图区域,就会出现内存错误,当忽略后如果想要退出系统就退不出去了。
通过寻找相关信息发现,发现当没有给CView使用DYNAMIC_CREATE
int CTestView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT msg)
{
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, msg);
}
运行程序,OK,成功!
希望能给那些需要的朋友提供一点帮助
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-1-7 10:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社