当前位置: 首页 > news >正文

成都网站建设是什么意思如何制作网络游戏

成都网站建设是什么意思,如何制作网络游戏,大连能做网站的公司有,建筑网官方网站查询OnPaint()与OnDraw()的区别#xff1a;OnPaint是WM_PAINT的消息响应函数#xff0c;在MFC的基类里OnPaint函数调用了OnDraw()函数。OnPaint函数另外还调用了OnPrepareDC()函数。如果在窗口子类覆盖了OnPaint函数#xff0c;当MFC调用我们重写的OnPaint函数时#xff0c;就调…OnPaint()与OnDraw()的区别OnPaint是WM_PAINT的消息响应函数在MFC的基类里OnPaint函数调用了OnDraw()函数。OnPaint函数另外还调用了OnPrepareDC()函数。如果在窗口子类覆盖了OnPaint函数当MFC调用我们重写的OnPaint函数时就调不到OnDraw()函数了除非我们去调用OnDraw()函数。Invalidate函数族介绍函数: Invalidate(BOOL bErase TRUE)函数: InvalidateRect(CRect* rect,BOOL bErase TRUE)函数: InvalidateRgn(CRgn* rgn,BOOL bErase TRUE)将一个区域放入Update Region中。[UpdateRegion]是窗口的无效区域。[无效区域]是需要重绘的区域。为何需要重绘呢第1类事件当需要展现某窗口的“新的”区域时就需要重绘。当创建一个窗口时当把窗口从另一个窗口的背后弹到前面时当从图标化到最大化转变时当滚动式的窗口发生滚动事件时当把遮挡在前面的窗口一点一点拖开让被遮挡的窗口一点一点的露出时就需要重绘。这些动作都是由WINDOWS系统管理的系统会很肯定的认为在上述事件发生时必须重绘。注如果把被遮挡的窗口一点一点的遮盖住就不需要重绘。第2类事件当有业务数据改变的事件发生时。窗口是用来显示业务数据的。比如我的窗口正在显示一个椭圆后台将业务数据变成了三角形我需要显示这个三角形这时就需要重绘了。对于第2类事件WINDOWS不可能感知到你需要重绘。例如我有一个变量 int m_shape1; 1代表椭圆2代表三角形。我需要让窗口的图形显示m_shape代表的形状当我把m_shape的值由1变成2时WINDOWS根本不知道我需要重绘一个三角形。对于第1类事件WINDOWS会自动发出WM_PAINT消息窗口的对应处理函数OnPaint()就会被调用。程序员不必关心“在何时”和“在何地”重绘。对于第2类事件程序员必须通知WINDOWS在何地重绘。至于“何时”重绘WINDOWS会挑选一个合适的时机。Invalidate函数族同第2类事件有关。通过调用Invalidate函数族通知windows系统我有一些窗口区域需要重绘。CWnd::Invalidate()是说整个窗口都需要重绘。CWnd::InvalidateRect()是说窗口的某个矩形区域需要重绘。CWnd::InvalidateRgn是说窗口的某个不规则区域需要重绘。“不规则区域”可以是任意多边形椭圆形当然也包括矩形。用伪代码说明上述三个函数的等价关系。CRgn rgn;rgn.CreateRectRgn(...);CWnd::InvalidateRgn(rgn,...);等价于CRect rect;CWnd::InvalidateRect(rect,...);CRect rect;GetClientRect(rect);CWnd::InvalidateRect(rect,...);等价于CWnd::Invalidate(...);Invalidate函数族中都有一个bErase参数。此参数的含义bEraseTRUE擦除背景bEraseFALSE不擦除背景何为背景想象窗口就是小朋友的画纸。当你把这张画纸给另一个小朋友画画时前一个小朋友画的东西就是“背景”。一般我们不希望两个小朋友画的东西夹杂在一起。我们就需要擦除前一个小朋友画的“背景”。用什么擦除背景呢WINDOWS允许我们设置“背景刷”就是用某种颜色的刷子把整个画纸涂抹一遍有点像刷白墙。Invalidate函数族的调用不会立刻引发窗口重绘。Invalidate函数族只是累积和标记需要重绘的区域。下一次WM_PAINT messageoccurs时(MSDN语)一次性处理累积和标记的所有需要重绘的区域。显然从Invalidate调用到实际的重绘动作是异步调用的。人类视觉有延迟现象一秒连续播放24帧就可以认为是“动画”了所以上述重绘方式人类是察觉不出异样的。假设每次Invalidate都同步的引发重绘OnPaint有两个不良后果一是程序效率太差二是可能让人察觉出闪烁感。那么何时下一次WM_PAINT message occurs呢当应用的消息队列没有其他消息时并且窗口的[Update Region]不为空时系统就会自动产生WM_PAINT消息。例子演示“失效区域”是如何起作用的。//每次重绘会交替展现两个不同的椭圆形。void XXX::OnPaint(){CPaintDC dc(this);staticint x0;if(x0){dc.Ellipse (0, 0, 100, 200);//横向的椭圆形x1;}else{dc.Ellipse (0, 0, 200, 100);//竖向的椭圆形x0;}}某CButton中OnBnClicked伪代码CRect rect;XXX-GetClientRect(rect);rect.bottom rect.bottom/2;XXX-InvalidateRect(rect,true);//擦除背景即使我擦除了背景仍旧能看到前一个椭圆。因为我设定的“非法区域”只是rect的上半部分。CRect rect;XXX-GetClientRect(rect);XXX-InvalidateRect(rect,true);//擦除背景可以正常的展现能交替展现两个不同的椭圆形。Validate函数族作用同Invalidate函数族相反将一个区域从[Update Region]排除这样就不会被重绘。当然了Validate要在下一次WM_PAINT message occurs之前的调用才能起作用。如果发生了第1类事件会造成大面积的区域变成“需重绘区域”Validate设定的“不需重绘区域”又会变成“需重绘区域了”。UpdateWindow函数UpdateWindow会检查窗口的Update Region当其不为空时才发送WM_PAINT消息。UpdateWindow可以绕开应用程序消息循环直接发送WM_PAINT消息给窗口。RedrawWindows函数可以简单理解为Invlidate UpdateWindow但是功能更强大一些。SetRedraw函数可以阻止窗口重绘。是解决窗口闪烁的一个办法MSDN的一个例子m_List.SetRedraw(FALSE); //暂时阻止窗口m_List重绘...//大规模对m_List改头换面m_List.SetRedraw(TRUE);//解除阻止窗口m_List重绘m_List.Invalidate();m_List.UpdateWindow();  //触发WM_PAINT消息SetRedraw函数好像是戏台的前幕后面切换场景时先遮挡一下。介绍了图形密集型程序“闪”的原因。主要技术为1 选用黑色背景或者背景同前景相近的颜色作为背景刷。2 双缓冲技术就是先在内存设备DC里准备好需要显示的内容然后拷贝到屏幕设备DC3 剪裁区域的合理利用。
http://www.zqtcl.cn/news/478557/

相关文章:

  • 商务网站建设的主流程西安建设局网站
  • 邢台营销型网站建设做网站的保证承诺
  • 关于茶叶的网站模板免费下载wordpress多边形按钮
  • 贵阳市网站建设手工制作花
  • 娄底哪里做网站免费永久不限空间
  • 网站标签怎么做wordpress 后台模板
  • 内江移动网站建设网站内部链接的作用有哪些
  • 阿里云的wordpress建站wordpress 批量定时发布
  • 网站院长信箱怎么做海报设计制作网站
  • 办网站如何备案怎么制作微信链接网页
  • 聊城门户网站建设怎样能有个人网站
  • 营销网站建设资料创意网站 模板
  • 免费的短网址生成器深圳外贸网站优化
  • 网站推广哪个平台最好图库
  • 在东莞做网站vue做网站好吗
  • 手机网站的页面大小郑州恩恩网站建设
  • 视频运营管理平台长沙网站seo技术
  • 网站建设有哪些规章制度网页版面
  • 海伦网站建设做网站建设的联系电话
  • 免费做字体的网站枣强网站建设代理
  • 建设网站素材海南百度推广公司电话
  • 温州企业网站建设费用培训行业门户网站建设方案
  • 口碑好的常州网站优化深圳市光明区实验学校
  • 网站怎么做微博认证网页设计代码html作品展示
  • 在线网站建设活动初创企业的建站流程
  • 汨罗哪里有网站开发的公司电话百度首页关键词推广
  • 天津百度整站优化服务政务网站模版
  • 推荐家居企业网站建设用什么工具修改wordpress
  • wix做的网站能扒下来哈尔滨做网站的oeminc
  • 做网站的网络公司门户网站介绍