为什么在减小窗口大小时发送WM_ERASEBKGND消息?
发布时间:2020-12-16 07:14:25 所属栏目:百科 来源:网络整理
导读:我注意到当我减小窗口大小时,正在发送WM_ERASEBKGND消息,任何人都可以解释为什么在这种情况下发送此消息,我的意思是我明白当我增加窗口大小时我应该删除新的背景显示区域,但为什么在减小窗口大小时需要擦除背景?! 这是一个说明此行为的屏幕截图(我将Spy设
我注意到当我减小窗口大小时,正在发送WM_ERASEBKGND消息,任何人都可以解释为什么在这种情况下发送此消息,我的意思是我明白当我增加窗口大小时我应该删除新的背景显示区域,但为什么在减小窗口大小时需要擦除背景?!
这是一个说明此行为的屏幕截图(我将Spy设置为仅显示WM_ERASEBKGND消息): 这是我用来创建窗口的代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd,message,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wc.lpszMenuName = NULL; wc.lpszClassName = "WinClass"; wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION); RegisterClassEx(&wc); HWND hWnd = CreateWindowEx(0,"WinClass","My Window",WS_OVERLAPPEDWINDOW,400,NULL,hInstance,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); MSG msg; while(GetMessage(&msg,0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } 编辑: 我忘了提一个重要的细节:当我减小窗口大小时,只发送WM_ERASEBKGND消息而没有WM_PAINT消息. 解决方法
如果您不希望在调整大小时发送自动擦除,请从窗口类注册中删除CS_HREDRAW和/或CS_VREDRAW样式.这些标志告诉系统分别在水平或垂直调整大小上重绘窗口.
至于为什么这种行为可能是理想的,一些控件在调整大小时保持文本居中,如果它们没有擦除旧尺寸的背景伪像可能会被遗留. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 什么是rubyGems env中的“用户安装目录”
- 如何做Flex日期扣除和添加
- ruby-on-rails – Rails 4升级 – ActionController :: Url
- Cocos2d-x 之 Lua 编程之路 · 开篇1 · 环境变量配置
- ruby-on-rails – Rails 3.1可安装引擎:如何在另一个应用程
- ruby-on-rails – Ruby on Rails私有方法?
- c# – 使用xPath循环遍历项目
- ruby-on-rails – Rails / Rspec – 编写涉及自定义验证和b
- Oracle到Mysql移库心得
- 正则表达式 – 在Xcode 4中使用通配符查找和替换