CreateWindow在什么情况下返回0??
在使用CreateWindow函数的时候,得到的hWnd总是返回0。所以程序一直都没有能够运行起来。请问一下造成这样的原因是什么?
(自己搜到一篇关于CreateWindow这方面的解释是:
///////////////////////////////////////////
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里找原因,白忙活了半天。
//////////////////////////http://blog.csdn.net/toleon/archive/2005/05/24/372491.aspx
照它上面的解释是我的窗口处理函数的问题吗?于是我想跟踪一下程序运行 在我自己的WndProc中加了断点(不过好像单步执行的时候,并没有看见在CreateWindow函数中显示的调用了WndProc)那我该怎么修改我的程序呢?另外怎么才能知道在调用CreateWindow函数的时候WndProc 返回的值。
下面是我自己的程序
大家帮看看哪里出错了
//////////////
HWND hWnd;
hWnd = CreateWindow("5_1",
"Program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
return FALSE;
hWndMain = hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
////////////////////
//下面是WndProc函数
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
{
HDC hDC;
PAINTSTRUCT ps;
HPEN hPen;
HBRUSH hBrush;
switch (iMessage)
{
case WM_KEYDOWN :
....
break;
case WM_KEYUP :
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_CHAR :
.....
break;
case WM_PAINT :
.....
break;
case WM_DESTROY :
PostQuitMessage(0);
return 0;
default :
return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
return 0;
}
///
哪位大哥能说说~~~ 先谢谢了
(自己搜到一篇关于CreateWindow这方面的解释是:
///////////////////////////////////////////
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里找原因,白忙活了半天。
//////////////////////////http://blog.csdn.net/toleon/archive/2005/05/24/372491.aspx
照它上面的解释是我的窗口处理函数的问题吗?于是我想跟踪一下程序运行 在我自己的WndProc中加了断点(不过好像单步执行的时候,并没有看见在CreateWindow函数中显示的调用了WndProc)那我该怎么修改我的程序呢?另外怎么才能知道在调用CreateWindow函数的时候WndProc 返回的值。
下面是我自己的程序
大家帮看看哪里出错了
//////////////
HWND hWnd;
hWnd = CreateWindow("5_1",
"Program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
return FALSE;
hWndMain = hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
////////////////////
//下面是WndProc函数
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
{
HDC hDC;
PAINTSTRUCT ps;
HPEN hPen;
HBRUSH hBrush;
switch (iMessage)
{
case WM_KEYDOWN :
....
break;
case WM_KEYUP :
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_CHAR :
.....
break;
case WM_PAINT :
.....
break;
case WM_DESTROY :
PostQuitMessage(0);
return 0;
default :
return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
return 0;
}
///
哪位大哥能说说~~~ 先谢谢了
...全文
相关推荐
CreateWindow函数详解.doc )
### CreateWindow函数详解#### 一、概述`CreateWindow`函数是Windows编程中的核心API之一,用于创建各种类型的窗口,如交叠窗口、弹出窗口或子窗口等。
CreateWindow
`CreateWindow`函数的基本调用格式如下:```cppHWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle
Windows_API开发详解__函数、接口、编程实例
**CreateWindow**:用于创建一个新窗口。
pyqt5的QWebEngineView 使用模板的方法
这可以通过返回`self`来实现,但不推荐这样做:```pythonclass WebEngineView(QWebEngineView): def createWindow(self, QWebEnginePage_WebWindowType
123播放器 V2.0
在123播放器 V2.0的开发过程中,开发者可能使用了API中的CreateWindow函数创建主界面,SendMessage函数进行消息处理,以及waveOutOpen、waveOutWrite等音频播放相关的


