为什么不能在WM_CREATE中绘制

原创 2012年03月26日 21:21:28

问题:

case WM_CREATE:
  TextOut(hdc,10,53,TEXT("OKOK"),4);//这条语句不能打印出结果,即不可见
  return 0;

case WM_PAINT :
  hdc=BeginPaint(hwnd,&ps);
  TextOut(hdc,10,53,TEXT("OKOK"),4);//这条语句可以正确打印结果
  EndPaint(hwnd,&ps);
  return 0;

如下,为什么TextOut(hdc,10,53,TEXT("OKOK"),4);这条语句必须要放在WM_PAINT :这个消息下才有正确的执行结果,在屏上打印字符,而放在WM_CREATE:消息下无任何反应呢?


答:

1、由于WM_CREATE只产生一次,即使绘制了,其绘制的东西也会因为WM_PAINT的响应而被清除掉。

在窗口无效(或部分RECT无效)时,是会反复接收到WM_PAINT消息的。所以这里绘制是最好的。

2、在WM_CREATE时,窗口句柄尚未生效。可以GetLastError查看。

3、事实上WM_CREATE里面根本无法绘制任何图形,因为绘制环境还没有创建(必须的)


WM_CREATE消息的处理过程

今天在看的时候, 有一个小问题困扰了我很长时间.书中写到在CreateWindowEx函数中会发出WM_CREATE消息, 之后会在CmainFrame::OnCreate中处理. 我突然想到, 在C...
  • WhiteBird99
  • WhiteBird99
  • 2014年01月02日 16:18
  • 1086

android 不能在子线程中更新ui的讨论和分析

问题描述  做过android开发基本都遇见过ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是只能在主线程中更改ui,子线程要修改ui...
  • zhao_zepeng
  • zhao_zepeng
  • 2016年01月26日 18:54
  • 9934

二、WM_CREATE消息

一、你好世界 通常
  • nuomibuliu
  • nuomibuliu
  • 2014年09月07日 11:43
  • 1644

可以在子线程绘画的View SurfaceView

转载请注明出处:王亟亟的大牛之路最近两天都没有写文章,一方面是自己在看书,一方面不知道写什么,本来昨天想写Glide或者RxAndroid的东西结果公司的“狗屎”网怎么都刷不好Gradle我也是无语了...
  • ddwhan0123
  • ddwhan0123
  • 2016年03月22日 16:36
  • 6040

Win32项目中的WM_CREATE消息何时被调用的

(本文转载自http://bbs.ednchina.com/BLOG_ARTICLE_3005454.HTM) VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式 wxlea...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年05月12日 15:20
  • 1332

2.3几条汇编指令

通过汇编指令控制CPU进行工作,看一下表中的几条指令:   汇编指令举例   汇编指令 控制CPU完成的操作 用高级语言的语法描述 mov...
  • qq_38176439
  • qq_38176439
  • 2017年04月05日 06:44
  • 1548

c++中成员初始化列表的问题

c++中提供了成员列表初始化的方法,我们知道const变量一般是在变量申明的时候就初始化,但是可以通过成员变量的方法动态的改变const变量的值,同时如果类的成员变量是引用,那么我们也必须通过成员列表...
  • justperseve
  • justperseve
  • 2016年05月21日 14:30
  • 382

为什么不能在BroadcastReceiver中开启子线程

如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的, 程序在BindService中的onCreate()方法...
  • a916879788
  • a916879788
  • 2017年05月04日 13:25
  • 762

为什么不能在构造函数中使用虚函数

先上代码: // c_datastructure.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using names...
  • OliverkingLi
  • OliverkingLi
  • 2017年11月21日 22:00
  • 78

为什么不能在子线程中修改UI

1、在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就让大家误以为分线程可以更新...
  • kimimoko
  • kimimoko
  • 2017年10月13日 09:09
  • 79
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么不能在WM_CREATE中绘制
举报原因:
原因补充:

(最多只允许输入30个字)