用CreateWindow创建窗口时的注意事项
2009-10-13 13:47
225 查看
5.1前,为了模拟一个程序的测试,从那个程序里copy出来一段代码,功能就是调用CreateWindow创建一个窗口;但是怎么也通过不了,CreateWindow老是返回NULL;查了MSDN,上面的代码也基本一样,没找到任何问题,郁闷的要命。
STDMETHODIMP CSetReady::Init( long hInst)
{
HWND s_wndPump = NULL;
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = PumpWndProc;
wc.cbClsExtra = wc.cbWndExtra = 0;
wc.hInstance = (HINSTANCE)hInst;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = _T("Test_Window");
RegisterClass(&wc);
s_wndPump = CreateWindow(wc.lpszClassName, NULL,
WS_DISABLED, 0, 0, 0, 0, NULL, NULL, wc.hInstance, NULL);
return S_OK;
}
原来问题出在传给WNDCLASS的窗口处理函数PumpWndProc上;调用CreateWindow时,CreateWindow会调用一次PumpWndProc,并且要求PumpWndProc返回TRUE。由于代码是copy过来的所以调试CreateWindow,没注意PumpWndProc的返回是什么,造成一直在CSetReady::Init里找原因,白忙活了半天。
STDMETHODIMP CSetReady::Init( long hInst)
{
HWND s_wndPump = NULL;
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = PumpWndProc;
wc.cbClsExtra = wc.cbWndExtra = 0;
wc.hInstance = (HINSTANCE)hInst;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = _T("Test_Window");
RegisterClass(&wc);
s_wndPump = CreateWindow(wc.lpszClassName, NULL,
WS_DISABLED, 0, 0, 0, 0, NULL, NULL, wc.hInstance, NULL);
return S_OK;
}
原来问题出在传给WNDCLASS的窗口处理函数PumpWndProc上;调用CreateWindow时,CreateWindow会调用一次PumpWndProc,并且要求PumpWndProc返回TRUE。由于代码是copy过来的所以调试CreateWindow,没注意PumpWndProc的返回是什么,造成一直在CSetReady::Init里找原因,白忙活了半天。
相关文章推荐
- DirectDraw创建窗口程序的注意事项
- 数据库索引的创建 和 注意事项
- 包含别人的dll,然后我们用类库再次封装成dll的时候的注意事项;源文件与模块生成时的文件不同;创建调试信息文件 ··PDB时发生意外的错误,进程无法访问文件,因为另一个程序正在使用此文件
- MFC浮动窗口使用方法和注意事项
- CreateWindow创建指定宽和高的client区域窗口的方法
- 模态窗口原理及注意事项
- C语言初学者:使用CreateWindow创建一个窗口
- 函数的创建及使用时的注意事项
- 创建Oracle索引的7个注意事项
- [Boolan] C++第一周(创建一个不带指针成员变量的类)[注意事项]
- sqlyog创建存储过程注意事项
- Qt创建函数注意事项
- 关于创建内存DC用于贴图的注意事项
- Salesforce 进程生成器创建计划操作注意事项
- 创建一个论坛注意事项
- 在eclipse上用Maven创建WEB项目一些注意事项
- Mysql 创建联合索引注意事项
- oracle创建表中LONG字段类型的使用注意事项
- 创建数据库的注意事项
- lr学习笔记1:创建脚本的注意事项