WS_EX_COMPOSITED会导致意外的WM_PAINT

WS_EX_COMPOSITED会导致意外的WM_PAINT,第1张

概述使用WS_EX_COMPOSITED样式创建一个窗口: hWnd = CreateWindowEx(WS_EX_COMPOSITED, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 为窗口设置插入符号: case 使用WS_EX_COMPOSITED样式创建一个窗口:

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1226828.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存