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


你可能感兴趣的:(图形)