zwb8848happy的专栏

为找个漂亮老婆而读书

为什么不能在WM_CREATE中绘制

问题:

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


阅读更多
文章标签: 图形
上一篇对数组名取地址
下一篇windows滚动条
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭