导致CreateWindow创建窗口失败的一种原因
来源:互联网 发布:mac地址定位上网位置 编辑:程序博客网 时间:2024/05/21 11:31
导语:在封装一个基本的Frame显示窗口时遇到CreateWindow函数调用成功,但是窗口总是不显示。
CreateWindow返回NULL,GetLastError()返回0
经过网上搜集资料和单步调试发现问题
在程序调用CreateWindow函数之前会首先调用WndProc具体原因暂时不详,(我的程序这里好像是会调用三次WndProc,可能是系统发送的消息),然后会调用CreateWindow,所以当前几次调用WndProc时需要返回TURE才会成功创建window。
这是之前的WndProc函数代码
LRESULT CALLBACK MYFrame::__WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ MYFrame *pObj = ( MYFrame *)::GetWindowLong( hWnd, GWL_USERDATA); PAINTSTRUCT ps; HDC hdc; long xPos; long yPos; switch( uMsg ) { case WM_PAINT: hdc = ::BeginPaint(hWnd, &ps); ::EndPaint(hWnd, &ps); break; case WM_DESTROY: ::PostQuitMessage(0); break; default: ::DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0;}将
default: ::DefWindowProc(hWnd, uMsg, wParam, lParam);
改为
default: return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
即可,修改后成功创建window的代码为
LRESULT CALLBACK MYFrame::__WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ MYFrame *pObj = ( MYFrame *)::GetWindowLong( hWnd, GWL_USERDATA); PAINTSTRUCT ps; HDC hdc; long xPos; long yPos; switch( uMsg ) { case WM_PAINT: hdc = ::BeginPaint(hWnd, &ps); ::EndPaint(hWnd, &ps); break; case WM_DESTROY: ::PostQuitMessage(0); break; default: return ::DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0;}
将默认的消息传给DefWindowProc来处理,并返回其处理后的结果。
- 导致CreateWindow创建窗口失败的一种原因
- CreateWindow失败的一个原因
- CreateWindow创建失败的问题
- 用CreateWindow创建窗口时的注意事项
- 用CreateWindow创建窗口时的注意事项
- 窗口的创建CreateWindow/CreateWindowEx函数使用说明
- 20120816-CreateWindow创建窗口
- 一种采用 Win32 CreateWindow 方式的模态窗口
- 导致项目失败的原因
- 导致人生失败的原因
- 一种导致不明确引用的原因
- CreateWindow失败
- 关于创建COM组件时 返回 0x80040154 导致失败的一种情况
- hibernate 级联失败的一种可能原因
- 创富者导致失败的十个原因
- 经典项目过程导致失败的原因
- 导致人生失败的31种原因
- 导致人生失败的31种原因
- Tomcat免重启
- Qt example 之 简易字典
- 逻辑推理题
- 【黑马程序员】常用运算符以及各种循环结构和条件判断
- 程序员职业规划发展路线图
- 导致CreateWindow创建窗口失败的一种原因
- 通过函数名字符串调用函数【C语言版】
- Maven实用命令
- POJ 3680 Intervals (最小费用最大流+离散化)
- 派生,继承1
- 怎样集中注意力
- 坑爹的excel中无法打开链接
- JQuery对数组的一些操作总结
- C语言 全局变量和局部变量的大小限制