
hWnd = CreateWindowEx(WS_EX_COMPOSITED,szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAulT,NulL,hInstance,NulL);
为窗口设置插入符号:
case WM_PAINT: OutputDeBUGStringA("WM_PAINT"); hdc = BeginPaint(hWnd,&ps); // Todo: Add any drawing code here... EndPaint(hWnd,&ps); break;case WM_SETFOCUS: ::DestroyCaret(); ::CreateCaret(hWnd,2,12); ::SetCaretPos(200,200); ::ShowCaret(hWnd); break;case WM_KILLFOCUS: ::DestroyCaret(); break;case WM_CHAR: ::DestroyCaret(); ::CreateCaret(hWnd,200); ::ShowCaret(hWnd); break; 启动应用程序,什么都不做.他们将是一个无限的WM_PAINT,直到隐藏插入符号或插入符号.
间谍表明:
每个0x118(WM_SYSTIMER)闪烁插入符后面跟一个WM_PAINT消息.
BeginPaint返回的绘制结构是
WM_PAINT:invaliate rect wIDth = 2,height = 12
这只是插入符号的宽度和高度.总之,WM_PAINT用于闪烁插入符号.
但是如果我从窗口的额外样式中删除WM_EX_COMPOSITED样式,则不再存在无限的WM_PAINT.
这是windows的错误吗?
PS:测试环境windows 7 64bit visual studio 2012.
解决方法 插入符号也被视为对照.不要将WS_EX_COMPOSITED用于顶级窗口.要么将它用于特定的有问题的控制.或者忽略控件的WndProc中的WM_ERASEBACKGROUND,其中前景内容覆盖整个客户区,并且控件在调整大小时会闪烁.
总结以上是内存溢出为你收集整理的WS_EX_COMPOSITED会导致意外的WM_PAINT全部内容,希望文章能够帮你解决WS_EX_COMPOSITED会导致意外的WM_PAINT所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)