这是一个基于对话框的程序,对话框上有按钮,还有几个CStatic用来绘图,之前都是好好的,今天改成Unicode版本后,编译正常,运行时CStatic中的图像怎么也不显示,有时候会闪现一次就消失,问题非常诡异。同样的代码,如果工程属性中选回“使用多字节字符集”,则没有问题;若再改成“使用Unicode字符集”,则问题重现。

研究了半天,发现网上相关的解释一般都是说把OnPaint中的对基类的调用CDialogEx::OnPaint();这句注释掉,或者放在自己的绘图代码后面,试了下并没有效果。

基于MFC原理,OnPaint中是对无效区域进行绘图处理的,基类的CDialogEx::OnPaint()调用之后,所有的无效区域都不存在了,因此之后的任何绘图代码都不会反映在界面上。正因为如此,把自己的绘图代码放在CDialogEx::OnPaint()之前是有必要的,但前提是你应该在CPaintDC dc(this)中绘制图像,因为此时的无效区域就是它。

如果你绘图的区域不在CPaintDC中,比如是在CStatic中,那么在绘图之前,你必须先强制CStatic更新,即像下面代码那样处理

CStatic* pHeadPhoto = (CStatic*)GetDlgItem(IDC_STATIC_HEADPHOTO);
pHeadPhoto->UpdateWindow(); CDC* pDC = pHeadPhoto->GetDC();
// 以下是具体的绘图代码(略)

  

通过以上这些处理,你完全没必要注释掉CDialogEx::OnPaint()的调用,却让程序跑得更好。

(实际上一旦注释掉CDialogEx::OnPaint(),界面的默认处理就失效了,比如按钮就不会及时刷新。)

CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题的更多相关文章

  1. VC 对话框程序加入工具栏button图标及其buttontooltip

    注意:本人使用VC++2010开发环境进行測试. 在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,非常多资源都须要自己手动加入.近期在开发一个程序时.想尝试在对话框程序里面加入 工具 ...

  2. [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)

    [原]MFC中DIALOG(对话框)程序响应加速键(快捷键) 2014-8-6阅读266 评论0 新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件.添加一个按钮,Caption ...

  3. VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)

    基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键:同时由于对话框上可能有很多控件,且默认情 ...

  4. 非对话框程序创建组合框Groupbox

    对话框程序中的控件,例如button.groupbox之类,是直接放上去的.当然,除groupbox以外,在MFC中其他控件都有相对应的类,以支持程序员在非对话框程序中动态创建控件.而唯独好像没有gr ...

  5. Win32对话框程序(2)

    接着Win32对话框程序(1)来写 ,解决遗留的问题,即理解函数及其调用关系.文章中有些地方是自己的推断,因此肯定有叙述不准确甚至错误的地方,请指正,感谢~ ********************* ...

  6. Win32对话框程序(1)

    之前学C语言是一直都是在控制台下面操作的,面对的都是黑框框,严重的打击了学习的兴趣.后来在TC下进行C语言课程设计,做了图形界面编程,但都是点线面画的…… 中间隔了好长一段时间没有碰过C语言,最近才开 ...

  7. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  8. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  9. MFC模态对话框程序不响应OnIdle

    从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinT ...

随机推荐

  1. JAVA SFTP文件上传、下载及批量下载

    JavaJsch  1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是 ...

  2. 解决Arcgis相同投影仍出现偏差的问题

    网上下载了一个土地利用分类的polygon矢量图---导入arcgis--投影不是我想要的.出现了一些偏差 立即转换投影----按照网上教程--先定义投影-再定义坐标系---结果很糟糕,inconsi ...

  3. 创建Java多线程的两种方式和线程异常

    一.使用多线程的两种方法  使用多线程的两种方法有:继承Thread类和实现runable接口. 二.继承Thread类 来看一下thread类的源代码: class Thread implement ...

  4. JAVA高级篇(四、JVM垃圾回收和调优)

    本文转自https://zhuanlan.zhihu.com/p/25539690 JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会 ...

  5. linux自启动tomcat

    第一种方式 1.修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自定的开机启动程序,可以在里面添加想在系统启动之后执行的脚本或者脚本执行命令 2.添加如下内 ...

  6. 在linux系统下运行jar包的命令如下

    1.java -jar xxxxx.jar  // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2.java -jar xxxxx.jar &   //当 ...

  7. 浅谈一下mshta在CVE-2017-11882里的命令构造

    Evi1cg同学前不久放出CVE-2017-11882的一个 python利用脚本,地址在https://github.com/Ridter/CVE-2017-11882/,不过其中一个版本里边有一个 ...

  8. APDL link180单元

    目录 APDL代码实现link180单元的使用 结果图片 APDL代码实现link180单元的使用 由于不知道怎样使用LINK180单元,故按照相关的教程和理解,整理了一下比较完整的APDL的代码.其 ...

  9. 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战

    ========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...

  10. zombodb 聚合函数

    zombodb 暴露基本上所有es 的集合函数为sql 函数,我们可以方便使用 比如 count FUNCTION zdb.count( index regclass, query zdbquery) ...