1 UpdateData 不能及时更新控件内容

原因:

UpdateData是通过数据交换实现改变控件显示的。改变了之后必需要调用一次OnPaint才干实现刷新。

因此,若是在一个函数里重复多次调用有时是没有效果的。

若想及时更新控件内容。在调用UpdateData后。须要再调用下UpdateWindow() 来刷新窗体。

  1. UpdateData(FALSE);
  2. UpdateWindow();

2 Invalidate、Invalidate(FALSE)、Invalidate(TRUE) 关系

1)

  1. void Invalidate(
  2. BOOL bErase = TRUE
  3. );

bErase

Specifies whether the background within the update region is to be erased.

Invalidate() 相当于 Invalidate(TRUE)

 TRUE代表更新时察除背景色

  FALSE表示更新时不察除背景,在原有背景上继续绘图

2)

UpdateWindow();     表示马上更新

可是必须先设置须要更新的无效区域才有效果, 否则不会发生变化。

下例显示的效果为: 直接在原图背景上 绘制新图,  因此会有反复现象

  1. Invalidate(FALSE);
  2. UpdateWindow();

下例显示的效果为: 先将原图清理掉,然后再画新图, 因此不会有反复现象,但可能会发生闪烁

其效果等同于RedrawWindow()

  1. Invalidate();
  2. UpdateWindow();
  1. RedrawWindow();

3  使用空刷子绘图和不使用空刷子绘图的差别

  1. CBrush * pBrush=CBrush::FromHandle((HBRUSH(GetStockObject(NULL_BRUSH))));
  2. CBrush* pOldBrush=pDC->SelectObject(pBrush);
  3. Draw(); //使用空刷子绘图
  4. pDC->SelectObject(pOldBrush);

考虑这样一种情况:

先画一个小矩形, 然后再画一个大矩形。使得大矩形包括小矩形

  1. CRect rc1(0,0,100,100);
  2. CRect rc2(0,0,200,200);
  3. pDC->Rectangle(&rc1);
  4. pDC->Rectangle(&rc2);

1)  不使用空刷子时, 则终于结果仅仅能看见大矩形

2) 使用空刷子时。      则大小矩形都可看见

原因分析:

不使用空刷子,系统默认的白色刷子,  这样绘图时,  先使得绘图区域失效。然后用刷子刷一下绘图区域,最后再往这块区域中绘图。

因此,当画大矩形时, 先用刷子刷这块区域,这样就将小矩形给冲刷掉了。

而。 使用空刷子时。 由于刷子是空的, 所以画大矩形时, 便不再用刷子刷这块区域, 而是直接在这块区域上绘图,因此。原先的小矩形还保留着,没有受到影响。

4 画矩形框架(仅仅画外围框架,不覆盖内部内容)



  1. CBrush brush(RGB(255,0,0));
  2. CRect rect(0,0,100,100);
  3. pDC->FrameRect(&rect,&brush);

5  ON_COMMAND与ON_UPDATE_COMMAND_UI 差别

ON_COMMAND是点了button或菜单项后的响应消息,

ON_UPDATE_COMMAND_UI是用来表示相应的button和菜单项的状态的响应消息.   消息函数对button的状态进行控制, 如将button设置为无效(灰色显示)

如:控制buttonIDM_DRAW_TABLE 是否有效

  1. afx_msg void OnUpdateDrawTable(CCmdUI *pCmdUI);
  1. ON_UPDATE_COMMAND_UI(IDM_DRAW_TABLE, OnUpdateDrawTable)
  1. void CImageView::OnUpdateDrawTable(CCmdUI *pCmdUI)
  2. {
  3. if(m_TableStep==2)  pCmdUI->Enable(TRUE);  //button有效
  4. else                pCmdUI->Enable(FALSE);  //button无效
  5. }
  1. void CImportView::OnUpdateFormatBrush(CCmdUI *pCmdUI)
  2. {
  3. if (bFormat)
  4. {
  5. pCmdUI->Enable(TRUE);
  6. pCmdUI->SetRadio(TRUE); //显示凹陷状态
  7. return;
  8. }else
  9. pCmdUI->SetRadio(FALSE); //显示正常状态
  10. }

6  画工具栏button

【视图】-->【工具栏】--->【图像编辑器】 调出图像编辑器工具栏。

选取工具栏中提供的工具, 当中包括 A  (文本工具---能够直接往工具栏button写字)

选择颜色时,没有  填充工具 或 颜色选择工具时  没有调出系统颜色窗体 , 此时 需通过 【图像】-->【显示颜色窗体】来显示不同的颜色

 

当往一个button上写2个字时,  点中工具栏上的A后,须要划出一个字的范围, 写入改字后。再调整范围,然后划出还有一个字的范围,再画还有一个字, 最后调节两字。

能够使用放大镜将其放大到最大程度书写

转自:http://blog.csdn.net/shuilan0066/article/details/7309501

MFC 小知识总结二的更多相关文章

  1. MFC 小知识总结四

    1 PlaySound  播放WAV格式的音乐 This function plays a sound specified by a file name, resource, or system ev ...

  2. AngularJs——基础小知识(二)

    AngularJs的过滤器 1.Currency :过滤器(金额货币格式化)       

  3. js--Ajax的小知识(二):处理ajax的session过期的请求

    问题的产生: 现如今Ajax在Web项目中应用广泛,几乎可以说无处不在. 有时会碰到这样个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax ...

  4. MFC 小知识总结五

    1 移动无标题对话框   响应WM_NCHITTEST 消息 [cpp] view plaincopy LRESULT CTimeJishiDlg::OnNcHitTest(CPoint point) ...

  5. MFC 小知识总结三

    1 载入资源位图 1 获取程序实例 HINSTANCE   m_hInst; m_hInst=AfxGetInstanceHandle();                         //获取程 ...

  6. 【C#小知识】C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举 分类: C# 2014-02-03 01:24 1576人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 继上篇对一些C#概念问题进行细节的剖析以后,收获颇多.以前,读书的时候,一句话一掠而 ...

  7. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  8. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  9. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

随机推荐

  1. bzoj 3669 lct维护最小生成树

    大概题意:给一个无向图,有a,b两种边权,找一条从1到n的路径,使得max(a[i])+max(b[i])最小a[i],b[i]表示该路径上的边的对应权. 如果用类似最短路的DP来做,显然每个点的状态 ...

  2. python开发_html_html处理

    ''' python中,html模块提供了只提供了一个方法: html.escape(s, quote = True) 该方法主要是把html文件中的特殊字符(&,<,>,&quo ...

  3. wikioi 1068 乌龟棋

    四维dp表示分别用了多少张卡后可以获得的最大分数 #include <cstdio> #include <cmath> #include <cstring> #in ...

  4. ASP.NET MVC的请求处理流程

    (1)用户打开浏览器,在地址栏输入某个网址URL并回车,浏览器便开始向该URL指向的服务器发送HTTP请求(一般是GET方式).(2)服务器端的网站服务系统(IIS)接收到该请求,先检查自己是否认识该 ...

  5. IO流-递归遍历目录下指定后缀名结尾的文件名称

    /* *自定义遍历目录下指定后缀名结尾文件的名称的方法: * * param file:指定目录 name:指定后缀名 */ 1 public static void FileName(File fi ...

  6. Git_搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  7. php远程获取图片或文件信息(get_headers,fsocketopen,curl)

    <?php if(!function_exists("remote_filesize")){ /** * 获取远程或本地文件信息 * @param string $strUr ...

  8. patch 用法

    diff -Nrua a b > c.patch 实例说明: --- old/modules/pcitable Mon Sep 27 11:03:56 1999 +++ new/modules/ ...

  9. SpringMVC和Springboot的区别(网摘)

    spring boot 我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种 sta ...

  10. 《STL源代码剖析》---stl_set.h阅读笔记

    SET是STL中的标准容器,SET里面的元素会依据键值自己主动排序,它不像map那样拥有实值value和键值key的相应,set仅仅有实值.SET的底层实现时RB-tree,当插入到RB-tree中后 ...