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