在对话框上创建视图的方法总结

               

作者:朱金灿
来源:http://blog.csdn.net/clever101


          之前有网友问我在对话框上如何创建视图,晚上总结了一些方法。
    在VS 2005上创建一个基于对话框的工程:CreateView。然后新建一个视图类:CMyView,派生自CView。


   然后在对话框类CCreateViewDlg上定义一个视图类指针:


CMyView *m_pView; 



   为了使得视图创建在指定的区域,在对话框上放一个静态文本控件,资源ID为IDC_STATIC_VIEW。


方法一:

     在对话框的OnInitDialog函数里添加如下代码:


BOOL CCreateViewDlg::OnInitDialog(){ CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {  CString strAboutMenu;  strAboutMenu.LoadString(IDS_ABOUTBOX);  if (!strAboutMenu.IsEmpty())  {   pSysMenu->AppendMenu(MF_SEPARATOR);   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 //  执行此操作 SetIcon(m_hIcon, TRUE);   // 设置大图标 SetIcon(m_hIcon, FALSE);  // 设置小图标 // TODO: 在此添加额外的初始化代码      UINT TargetCtrlID = IDC_STATIC_VIEW;        CWnd *pWnd = this->GetDlgItem(TargetCtrlID);       CRect RectTargetCtrl;       pWnd->GetWindowRect(RectTargetCtrl);        this->ScreenToClient(RectTargetCtrl);     m_pView = (CMyView*)RUNTIME_CLASS(CMyView)->CreateObject();    //在目标位置动态创建视图    if (NULL==m_pView)      {          return FALSE;       }       m_pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, RectTargetCtrl, this, TargetCtrlID);   return TRUE;  // 除非将焦点设置到控件,否则返回TRUE} 


为了验证视图效果,在视图类的OnDraw函数添加如下代码:


void CMyView::OnDraw(CDC* pDC){ CDocument* pDoc = GetDocument(); // TODO: 在此添加绘制代码 CRect rt(0,50,200,200); pDC->DrawText(_T("这是在对话框上创建的视图"),&rt,DT_LEFT);}  


方法二:

方法二和方法一大同小异,只需改动对话框类的OnInitDialog函数中的代码:  


BOOL CCreateViewDlg::OnInitDialog(){ CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {  CString strAboutMenu;  strAboutMenu.LoadString(IDS_ABOUTBOX);  if (!strAboutMenu.IsEmpty())  {   pSysMenu->AppendMenu(MF_SEPARATOR);   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 //  执行此操作 SetIcon(m_hIcon, TRUE);   // 设置大图标 SetIcon(m_hIcon, FALSE);  // 设置小图标 // TODO: 在此添加额外的初始化代码      UINT TargetCtrlID = IDC_STATIC_VIEW;        CWnd *pWnd = this->GetDlgItem(TargetCtrlID);       CRect RectTargetCtrl;       pWnd->GetWindowRect(RectTargetCtrl);        this->ScreenToClient(RectTargetCtrl);   CCreateContext context; context.m_pCurrentDoc = NULL;//不要文档为空 context.m_pCurrentFrame = (CFrameWnd *)this;//设置父窗体指针,将对话框指针强制转换 context.m_pLastView = NULL;//前一个视图为空 context.m_pNewDocTemplate = NULL;//文档模板为空 context.m_pNewViewClass = RUNTIME_CLASS(CMyView); //1.动态调用CreateObject创建一个对象并获得指针 m_pView = (CMyView*)context.m_pNewViewClass->CreateObject();//通过指针创建视图对象 //以下代码参考CFrameWnd类中的CreateView函数 if (m_pView==NULL) {  TRACE1("Warning: Dynamic create of view type %hs failed./n",   context.m_pNewViewClass->m_lpszClassName); } ASSERT_KINDOF(CWnd,m_pView); //2.真正创建视图窗口 if (!m_pView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,RectTargetCtrl,this,  AFX_IDW_PANE_FIRST,&context))  {  TRACE0("Warning: Couldn't create view for frame./n");  return FALSE; } return TRUE;  // 除非将焦点设置到控件,否则返回TRUE} 


效果图如下:


在对话框上创建视图













           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MFC中,可以通过以下步骤在对话框中创建一个视图: 1. 首先,打开MFC应用程序的代码。 2. 在对话框资源中定义一个静态控件,该控件将用于容纳视图。 3. 在对话框类的头文件中添加一个成员变量,用于表示视图对象。 4. 打开对话框类的源文件,并在OnInitDialog()函数中进行如下操作: a. 调用基类的OnInitDialog()函数。 b. 创建视图对象,使用CreateView()函数并传入静态控件的ID和对话框指针。 c. 将视图对象指针保存到成员变量中。 ```c++ BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); // 创建视图对象 CRect rect; GetDlgItem(IDC_STATIC_VIEW)->GetWindowRect(&rect); ScreenToClient(&rect); m_pView = new CMyView(); m_pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this, IDC_STATIC_VIEW); return TRUE; } ``` 5. 最后,别忘记在对话框类的析构函数中删除视图对象。 ```c++ CMyDialog::~CMyDialog() { if (m_pView != nullptr) { delete m_pView; m_pView = nullptr; } } ``` 通过以上步骤,就可以在对话框中成功创建一个视图对象,并将其显示在静态控件中。这样就可以在对话框中展示自定义的图形、数据等内容,并实现与用户的交互。 ### 回答2: 在MFC中,在对话框中创建一个视图有两种方法可以实现。 方法一:使用视图类(CView)和文档类(CDocument) 1. 创建一个新的MFC应用程序项目,选择“单文档”或“多文档”模式。 2. 在资源视图中,打开对话框资源文件(.rc)。 3. 在对话框上选择插入->ActiveX 控件。 4. 在弹出的对话框中,选择“Visual C++ 控件类”,然后点击“添加新控件类…”按钮。 5. 输入控件类名,选择CView作为基类,然后点击“完成”。 6. 给控件设置一个唯一的ID。 7. 在对话框类(CDialog)的代码文件中,添加对CView类的成员变量。 8. 在OnInitDialog()函数中,使用Create()函数创建视图方法二:使用静态控件(CStatic)和视图类(CView) 1. 创建一个新的MFC应用程序项目。 2. 在资源视图中,打开对话框资源文件(.rc)。 3. 在对话框上选择插入->控件->静态文本。 4. 调整静态文本的大小和位置,使其占据你想要的视图区域。 5. 在对话框类(CDialog)的代码文件中,添加对CView类的成员变量。 6. 在OnInitDialog()函数中,使用Create()函数创建视图,并将其父窗口设置为静态文本的句柄。 无论使用哪种方法创建视图后,需要在对话框类的OnSize()函数中调整视图的大小和位置,以保证视图随着对话框的大小改变而调整。 总结:以上是两种在MFC对话框创建视图方法。使用方法一可以使视图和文档类关联,方便进行数据的读写和操作;而方法二则更加简单直接。根据项目需求以及个人偏好,选择合适的方法创建视图即可。 ### 回答3: 在MFC中,我们可以在对话框中创建一个视图,可以通过以下步骤实现: 1. 首先,在MFC应用程序的资源文件夹中打开对话框编辑器,选择一个适当的对话框进行编辑。 2. 在对话框编辑器中,将“工具箱”窗口中的“控件”组件显示出来。 3. 在“控件”组件中找到“ActiveX Control”(“ActiveX 控件”),并在对话框中绘制一个合适大小的矩形。 4. 右键单击绘制的矩形,选择“添加变量”。 5. 在“添加变量”对话框中,将控件名称设置为适当的名称,选择“值”类型为“Control”(“控件”),然后单击“完成”。 6. 在对话框的头文件中,找到对控件变量的声明,并将其类型更改为“CWnd”。 7. 在对话框类的源文件(.cpp)中,找到OnInitDialog()函数。 8. 在OnInitDialog()函数中添加以下代码: ``` // 获取控件指针 CWnd* pWnd = GetDlgItem(IDC_YOUR_CONTROL_ID); // 创建视图对象 CYourViewClass* pView = new CYourViewClass(); // 获取视图的矩形区域 CRect rect; pWnd->GetWindowRect(rect); ScreenToClient(rect); // 创建视图窗口 pView->Create(NULL, NULL, WS_VISIBLE | WS_CHILD | WS_BORDER, rect, this, IDC_YOUR_VIEW_ID); // 调整视图窗口的大小和位置 pView->MoveWindow(rect); ``` 注意:需要将“IDC_YOUR_CONTROL_ID”和“IDC_YOUR_VIEW_ID”替换为适当的控件和视图ID。 9. 编译并运行应用程序,你翻看对话框时将会在指定的位置看到创建的视图。 在对话框创建视图可以实现为用户提供更丰富的交互功能,例如通过绘图或显示图形等。但也需要处理好视图的生命周期和内存管理,防止内存泄漏和其他问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值