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

news/2024/7/11 0:41:07 标签: 框架, .net, Blog

作者:朱金灿
来源: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 }


效果图如下:


在对话框上创建视图














http://www.niftyadmin.cn/n/586680.html

相关文章

react-native 最新版本爬坑经历(unable to load script from assets 和could not connect to development server.

新建项目 react-native init TestApp运行项目 react-native run-android不好意思&#xff0c;错误马上就到了 错误1&#xff1a;unable to load script from assets ‘index.android bundle’ ,make sure your bundle is packaged correctly or youu’re runing a packager …

php 效率总结

第一部分 转载 &#xff1a; http://publishblog.blogchina.com/blog/tb.b?diaryID3029521 1,在函数中,传递数组时 使用 return 比使用 global 要高效 比如 function userloginfo($usertemp){ $detailexplode("|",$usertemp); return $detail; } $loginuse…

在LisvView的cell中调用TouchableOpacity的onPress方法时报错

在LisvView的cell中调用TouchableOpacity的onPress方法时报错 在LisvView的cell中调用TouchableOpacity的onPress方法时报错的问题。 错误提示(见下图)&#xff1a;该方法不是一个function, 这个有点蒙逼了&#xff08;明明是function&#xff09; 解决办法&#xff1a;在Lis…

《Spring微服务实战》读书笔记

福利置顶&#xff0c;PDF版本电子书下载地址&#xff1a;百度网盘&#xff0c;密码: e45d。 还是比较习惯中文阅读&#xff0c;因为速度足够快&#xff0c;毕竟我这样的菜逼要看的书籍太多&#xff0c;啃英文不知道得啃到什么时候&#xff08;读英文文档不是问题&#xff0c;毕…

React-Native:BUG:libpng error: Not a PNG file错误

今天在放入png图片的时候&#xff0c;编译报错&#xff0c;截图如下 从这里可以看出是resource文件引起的error&#xff0c;提示这不是一张png图片&#xff0c;但图片的后缀名确实是png,这是怎么回事呢&#xff1f;、 看到网络中有一种解释&#xff1a;图片后缀名不是png&…

数据库优化-1

1 一个好的网站&#xff0c;要想数据查询达到很好的效果&#xff0c; 数据库 设计是最基础也是最重要的 工作 。数据库设计是要遵循一定规则的&#xff0c;即当数据库设计范式&#xff0c;数据库设计范式包括第一范式、第二范式、第三范式、第四范式、第五范式和第六范…

提取图片文字——linux下tesseract-ocr安装编译

注&#xff1a;以下安装以ubuntu16.04为例&#xff0c;本例中用到的文件是1.71版的leptonica和3.04版的tesseract。不同的操作系统用到的文件不同&#xff0c;请勿乱用。 一、Tesseract概述 Tesseract的OCR引擎最先由HP实验室于1985年开始研发&#xff0c;至1995年时已经成为O…

ocbase 数据库 蚂蚁_oc中数据库使用详细解释(一)

以下为定义为DB.h的单例.继承自NSObject,引入sqlite3头文件.引入前请在框架Framework中引入sqlite3.0的框架#import #import interface DB : NSObject//打开数据库&#xff0c;并返回数据库的指针 (sqlite3 *)open;//关闭数据库 (void)close;end#import "DB.h"implem…