一直用的WIN2K系统,写的一个程序在本机正常,到XP系统的机器运行发现调整窗口大小时界面闪得厉害,程序比较大,而且这种闪烁还不好调试,因为单步调试没有闪烁效果,只能排除法找原因,最后以为找到原因了,就写了一个测试程序,就是用VC6向导自动生成API的Hello World程序,然后修改一下其WM_PAINT代码:

  1. case WM_PAINT:
  2. hdc = BeginPaint(hWnd, &ps);
  3. // TODO: Add any drawing code here...
  4. RECT rt;
  5. GetClientRect(hWnd, &rt);
  6. InflateRect(&rt,-20,-20);
  7. BitBlt(hdc,rt.left,rt.top,rt.right-rt.left,rt.bottom-rt.top,hdc,0,0,BLACKNESS);
  8. EndPaint(hWnd, &ps);
  9. break;

效果是在窗口中间显示一个黑框,编译后调整窗口大小时画面闪烁,这是正常的。把窗口类型的CS_HREDRAW | CS_VREDRAW取消掉,即把ATOM MyRegisterClass(HINSTANCE hInstance)函数里改成

wcex.style   = 0;//CS_HREDRAW | CS_VREDRAW;

这下不闪了,但是也不画黑框了,因为不刷新了,需要在WM_SIZE消息里面通知刷新一下:

  1. case WM_SIZE:
  2. InvalidateRect(hWnd,NULL,FALSE);
  3. return DefWindowProc(hWnd, message, wParam, lParam);

按道理这段代码造成的效果应该是:黑框跟着窗口尺寸变化,但是背景会花,因为InvalidateRect的最后一个参数如果是FALSE,是不刷新背景的。在WIN2000下运行的确是这个效果,而在XP下,不管这最后一个参数是TRUE还是FALSE,效果跟原始代码是一样的,黑框闪烁得厉害,好象这个参数在XP下无效了。

解决方案是响应WM_ERASEBKGND,直接返回TRUE,在WIN2000和XP下就表现一致了。但是这个InvalidateRect的最后一个参数无效的问题就不知道怎么回事了,不知道是不是XP的BUG。

http://blog.csdn.net/ringphone/article/details/2866719

奇怪的问题,InvalidateRect最后一个参数在XP下无效的更多相关文章

  1. esnext:最后一个参数后面也允许加逗号了

    https://jeffmo.github.io/es-trailing-function-commas 目前是一个 stage 3 的提案,Chakra 和 JSC 已经实现了,它允许我们在函数定义 ...

  2. APN APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。

    apn 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. 对于手机用户来说,可 ...

  3. 预编译那些事#define后面只跟一个“参数”

    一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条 ...

  4. ADO.NET+Access: 2,至少一个参数没有被指定值

    ylbtech-Error-ADO.NET+Access: 2,至少一个参数没有被指定值. 1.A,错误代码返回顶部  2,至少一个参数没有被指定值. 1.B,出错原因分析返回顶部  未解决 1.C, ...

  5. ibatis把表名作为一个参数报错问题的解决方案

    用ibatis的时候,想把表名也作为一个参数传进去,可是报错了,在ibatis配置文件里面是#resource#的方式,报错信息如下: org.apache.cxf.interceptor.Fault ...

  6. list append 总是复制前面的参数,而不复制最后一个参数

    append 总是复制前面的参数,而不复制最后一个参数 (define a1 '(1 2 3)) (define a2 '(a b c)) (define x (append a1 a2)) x ; ...

  7. execlp("ls","flw","-?",(char *)0) 为什么少了最后的一个参数就不行?

    execlp("ls","flw","-?",(char *)0) 为什么少了最后的一个参数就不行?

  8. 一个参数引起的mysql从库宕机血案

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1859252 一个参数 ...

  9. 使用volley上传多张图片,一个参数对应多张图片,转载

    https://my.oschina.net/u/1177694/blog/491834 原帖地址 而如果使用volley的话,因为请求数据那些都很简便,但遇到上传文件就麻烦那可不好,同时使用多个网络 ...

随机推荐

  1. javascript 学习随笔

    var carname="Volvo"; var carname; 重新声明变量后变量的值不变,在这里还是volvo var carname="Volvo"; ...

  2. datetime.timedelta

    from django.utils import timezoneimport datetime timezone.now()datetime.datetime(2014, 7, 18, 9, 42, ...

  3. jsp字段判空

    是对象吧String jsp的写法 <% if(str == null) { %> str is null <% } else { %> str not null <% ...

  4. 临时节点不能有child 子节点

    [zk: 127.0.0.1:2181(CONNECTED) 67] create '/zk01/0001/aaaa' dada Ephemerals cannot have children: /z ...

  5. 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法

      题目

  6. 九度OnlineJudge之1022:游船出租

    题目描述:     现有公园游船租赁处请你编写一个租船管理系统.当游客租船时,管理员输入船号并按下S键,系统开始计时:当游客还船时,管理员输入船号并按下E键,系统结束计时.船号为不超过100的正整数. ...

  7. Lucene核心--构建Lucene搜索(上篇,理论篇)

    2.1构建Lucene搜索 2.1.1 Lucene内容模型 一个文档(document)就是Lucene建立索引和搜索的原子单元,它由一个或者多个字段(field)组成,字段才是Lucene的真实内 ...

  8. 另一种数据库连接字符串的编写方式(Sqlbuilder)

    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "&q ...

  9. AES加密时抛出java.security.InvalidKeyException: Illegal key size or def

    原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def 使用AES加密时,当密钥大于128时,代码会抛出 java. ...

  10. 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...