WS_EX_COMPOSITED会导致意外的WM_PAINT
发布时间:2020-12-16 07:05:46 所属栏目:百科 来源:网络整理
导读:使用WS_EX_COMPOSITED样式创建一个窗口: hWnd = CreateWindowEx(WS_EX_COMPOSITED,szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,NULL,hInstance,NULL); 为窗口设置插入符号: case WM_PAINT: OutputDebugStringA("WM_PAINT"); hdc = BeginPain
使用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,直到隐藏插入符号或插入符号. 间谍表明: 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,其中前景内容覆盖整个客户区,并且控件在调整大小时会闪烁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |