关闭

为什么不能在WM_CREATE中绘制

573人阅读 评论(0) 收藏 举报

问题:

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里面根本无法绘制任何图形,因为绘制环境还没有创建(必须的)


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:222522次
    • 积分:3327
    • 等级:
    • 排名:第10526名
    • 原创:114篇
    • 转载:37篇
    • 译文:0篇
    • 评论:24条
    最新评论