在视图上描绘
来源:互联网 发布:冒险与挖矿 源码 编辑:程序博客网 时间:2024/04/29 19:00
- /*
- DC的分类:
- 设备上下文是一个包含了设备属性等信息的Windows数据结构,所有与描画相关的
- 函数调用都是通过DC对象完成的,DC对象封装了WindowsAPI函数.DC允许设备独立
- 地在系统是进行描画,可以描画到显示器上,打印机及中间文件上.
- CPaintDC封装了Windows的常用描画流程:先调用BeginPaint,然后进行描画,最后
- 调用EndPaint.CPaintDC的构造函数会帮助我们调用BeginPaint,析构函数会帮助
- 我们调用EndPaint.基本流程就是创建CDC对象,然后描画,最后销毁CDC对象.在
- 编程框架中,这些流程都是自动完成的,它会向我们的OnDraw函数传递一个CD指针,
- 然后我们就可以在这个DC上进行描画操作了.传递过来的DC指针会被编程框架
- 销毁,底层的设备上下文会根据我们OnDraw函数的返回值决定是否被释放.
- CClientDC封装只工作在窗口客户区的设备上下文,它的构造函数会调用GetDC,
- 其析构函数会调用ReleaseDC。
- CWindowDC封装了工作在整个窗口,包括边框的设备上下文。
- CMeteFileDC封装了工作在Windows中间文件上的设备上下文,在这种情况下,
- 为了获得DC,我们需要手工调用OnPrepareDC。
- */
- /*
- 在视图上描绘:
- 几乎所有的描绘操作都发生在视图的OnDraw函数里,所以我们应该重载我们自己
- 视图的OnDraw函数:
- 1:通过我们自己的文档类方法获取数据
- 2:通过编程框架传递过来的DC进行数据的显示
- 当文档类的数据发生变化的时候,视图类需要即时地反映出这一变化。常规情况
- 下,变化是用户通过文档的视图操作完成的。这种情况下,视图通过调用文档类
- 的UpdateAllViews来通知本文档的所有视图去更新他们自己。UpdateAllViews
- 会调用每一个视图的OnUpdate方法,默认情况下OnUpdate会重绘整个视图的客户区。
- 当然我们可以重载OnUpdate以便能让其只重绘与变化数据相关的区域。
- 文档的UpdateAllViews和视图的OnUpdate允许用户只传递针对已变化数据的信息。
- 这种“微量机制”就允许我们限制客户区域的重绘区域,从而提高效率。OnUpdate
- 需要两个“微量参数”,第一个类型为LPARAM,允许你传递任何你喜欢的数据,
- 第二个类型为CObject,允许你传递任何派生自CObject的对象指针,这里体现出
- 了针对接口编程的思想。
- 当视图无效之后,系统会向其发送WM_PAINT消息,视图的OnPaint函数会响应这个
- 消息,它会创建一个CPaintDC类型的DC,然后调用视图的OnDraw函数,一般情况
- 下我们不需要重载OnPaint函数。
- 经典的在视图中进行描绘操作的代码是先获得相关文档的指针,然后调用DC的方法
- 进行描绘操作。
- */
- void CMyView::OnDraw(CDC* pDC)
- {
- CMyDoc* pDoc = GetDocument();//获得文档指针
- ASSERT_VALID(pDoc);
- if (!pDoc)
- return;
- CString s = pDoc->GetData();//在我们自己的文档类中,我们可以复杂化GetData
- CRect rect;
- GetClientRect(&rect);
- pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
- pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
- }
- /*
- 通过视图解析用户的输入:
- 视图的其它成员函数会处理和解析用户的所有输入。通常情况下你应该在视力类中
- 定义一个消息响应函数去处理以下内容:
- 产生自鼠标和键盘的Windows消息。
- 来自菜单,工具栏和快捷键的命令消息。
- 这些消息处理函数会将鼠标的单击,双击,移动,拖拽,键盘按下,菜单命令解析
- 为数据的输入,选择,编辑,及复制与粘贴等。
- 程序应该处理哪些消息应该根据程序本身的需要。
- */
- 在视图上描绘
- 在视图上加ToolTip
- 在视图上建立触发器
- 在对话框上添加视图
- 在视图上创建索引
- 在视图上创建约束
- 在键盘上加入视图
- 在webView上添加视图
- 如何在透明视图上显示不透明的子视图
- 在滚动视图上添加子视图(UIScrollView)
- 如何在一个视图上增加菜单
- ios在视图上设置按钮
- 在视图上创建ListCtrl的做法
- SqlServer在视图上创建索引
- 在Android上实现模糊视图
- ios 在UITableViewController上添加悬浮视图
- 找到在根视图上的坐标
- SpringBoot在linux上视图解析问题
- 文件选择对话框的使用(CFileDialog)
- Silverlight开发MMORPG大型多人在线角色扮演游戏(团队项目)
- Spring 2.0 AOP 与事务配置突破
- HK_C_U/Software/Microsoft/Windows/ShellNoRoam/MUICache键值作用
- JavaScript and HTML Tricks
- 在视图上描绘
- C++ 中重载 + 操作符的正确方法
- javascript 调整宽度和高度的div
- py单词翻译小工具(python抓取html实现)
- symbian字符编码
- 一篇介绍Nevow的非常好的文章,推荐
- 解析.net中ref和out的实质(高手勿进)
- ASP.NET 清除 HTML 标记函数
- 文件上传Fileupload(无刷新页面)