`
ladymaidu
  • 浏览: 676829 次
文章分类
社区版块
存档分类
最新评论

略谈如何在对话框创建视图类画图

 
阅读更多

作者:朱金灿

来源:blog.csdn.net/clever101

在对话框上画图可以通过添加控件来进行,但这种画图有一个严重弊端就是画图范围受控件范围控制。最近做一个程序,需要一个数据报告窗口,因为输出的内容比较多,格式不一致(涉及多个表,但每个表的数据要严格对齐),所以如ListControl等控件并不适合。所以我想到在对话框上创建视图类上进行数据显示。

一是视图窗口如何动态创建。首先是视图窗口的定位。一般的动态创建窗口定位窗口的位置不太容易。我从网上找到的一个好办法在对话框上加一个静态文本控件,然后把视图创建在该控件之上。这个问题想好,创建就基本完成了。

创建的具体步骤如下:

1. 定义一个派生自CScrollView类的视图类CDrawView(至于为什么不是CView而是CScrollView,原因我会在下面谈)。

2. 在对话框类上定义一个CDrawView类指针*m_pDrawView

具体代码如何:

二.前面我已经谈到了在对话框上绘图的一个弊端是绘图范围受控件范围所谓,一不小心就会出界,如下图所示:

绘图范围受控件范围所

使用视图类的好处是你可以使用滚动条扩大绘图范围,这也是我为何将自定义视图类继承CScrollView类的原因。

实际上滚动条的处理也是不太容易的,主要是滚动条添加后如何重绘新的显示范围比较麻烦。为此我重翻petzod的名著《Windows程序设计》的里面一节:建立更好的滚动。将里面的Win API代码改为MFC实现。因为我的程序是输出文字的,我就以如何在文字输出视图窗口创建滚动条。

首先要创建窗口的滚动条,你就必须在动态创建是指定两种窗口风格:WS_VSCROLL|WS_HSCROLL

其次你需要指定窗口的滚动范围,具体就是滚动的最大高度和宽度。我的做法是在视图类定义两个变量:

int m_iMaxWidth; // 滚动的的最大宽度

int m_MaxNumLines; // 滚动的最大高度

这个你可以自定义滚动范围。

其次你还要定义一些文字大小的相关变量:

int m_cxChar;

int m_cxCaps;

int m_cyChar;

OnCreate函数()(WM_CREATE消息映射函数)获取字体大小,代码如下:

OnSize函数(WM_SIZE消息映射函数)设置滚动范围:

分别响应WM_VSCROLL消息和WM_HSCROLL,主要目的是设置滚定信息和决定是否要更新窗口:

然后在OnPaint函数(WM_PAINT消息响应函数)你就可以获取当前绘图范围了:

效果图如下:

效果图

分享到:
评论

相关推荐

    可视化程序设计 c++ 计算器 画图程序 图书管理系统

    6、视图类设计 实训报告三 一、实训日期: 二、实训题目:图书管理系统 三、实训目的: 四、实现过程: 1、需求分析 2、总体设计 (1)、系统层次模块图 (2)、数据库设计 3、详细设计: (1)、主控平台的...

    PT80-NEAT开发指南v1.1

    窗口类 CNeatView 视图类 ................................................................................................................... 26 CNeatControl 类 ............................................

    windows应用高级编程-C#编程篇

    具体内容包括:利用各种控件创建图形用户界面,在Windows应用程序中使用图形和GDI+,在标准Windows文件中加载和保存数据,通过应用程序打印信息,开发能够处理多文档的应用程序,链接数据库,提供帮助,部署应用程序等;...

    windows应用高级编程-C#编程篇.part1

    菜单和工具栏 4.1 菜单控件和类 4.1.1 创建主菜单 4.1.2 创建上下文菜单 4.2 工具栏控件和类 4.2.1 创建工具栏 4.2.2 显示/隐藏工具栏 4.3 小结 第5章 使用图形 5.1 设备语境 5.2 ...

    C++ MFC实现飞机大战游戏

    在类视图中,为对话框类添加成员变量(控件变量)。设置变量的名称、类型、最值等信息。  (4). 在资源视图菜单中,选择相应的菜单项,右击添加时间监听程序,设置函数处理程序名称。  (5). 在处理程序函数中添加...

    VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:

    ②在普通窗口中,直接创建一个CXPButton类对象,然后在OnCreate()中调用CXPButton的Create方法; 以下的章节将综合地使用以上的方法,请读者朋友留心观察。 3.2 使用MFC类的既有函数 在界面美化的专题中,MFC也...

    Delphi5开发人员指南

    8.4.3 画图的示范程序 185 8.4.4 用TCanvas输出文字 189 8.5 坐标系统和映射模式 193 8.5.1 设备坐标系 193 8.5.2 逻辑坐标系 194 8.5.3 屏幕坐标系 194 8.5.4 窗体坐标系 194 8.5.5 坐标映射 195 8.5.6 设置映射...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例202 在关闭窗体时弹出确认对话框 270 实例203 隐藏应用程序在任务栏中的图标 272 实例204 实现动态系统托盘图标 272 实例205 实现气泡提示窗口 275 实例206 从桌面右下角显示的Popup窗口提醒 276 实例207 设置可...

    《计算机应用基础》目录.doc

    任务4 生成表查询 任务5 追加查询 任务6 更新查询 任务7 删除查询 7.4 窗体设计 任务1 自动创建窗体 任务2 使用向导创建窗体 任务3使用设计视图创建窗体 任务4 窗体布局与修饰 任务5 标签控件的使用 7.5

    东大22春《计算机应用基础》在线平常作业2.docx

    A、bit B、byte C、bite D、bat 8.Excel中,在工作表中用"图表向导"创建图表时,第一个对话框是让用户选择()。 A、正确的数据区域引用及数据系列产生在"行"或"列" B、所生成图表的位置是嵌入在原工作表还是新建一...

    Delphi开发范例宝典目录

    实例047 在关闭窗口前加入确认对话框 56 实例048 程序在循环中响应界面操作 57 实例049 使用任意组件拖动窗体 58 实例050 动态创建窗体和释放窗体 59 实例051 修改提示字体及颜色 60 1.14 其他技术 61 ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

Global site tag (gtag.js) - Google Analytics