创建窗口后窗口的句柄返回值是0

cmkyec 2009-03-31 11:16:11
#include <windows.h>

#define ID_ComboBox 1

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrvInstance,LPSTR lpCmdLine,int iCmdShow)
{
HWND hwnd;
WNDCLASS wndclass;
MSG msg;

wndclass.style = CS_VREDRAW | CS_HREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = TEXT("ComboBox");

RegisterClass(&wndclass);

hwnd = CreateWindow(TEXT("PARENT"), //此处调试时 hwnd 的值为 Ox00000000
TEXT("FATHER"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);


ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
HWND hwndComboBox;
TCHAR CONTENT[20] = "go go";

switch(message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;

case WM_CREATE:
hwndComboBox = CreateWindow(TEXT("ComboBox"),
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | CBS_SORT,
200,200,
150,500,
hwnd,
(HMENU)ID_ComboBox,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
SendMessage(hwndComboBox,CB_ADDSTRING,0,(LPARAM)CONTENT);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);
}

代码如上,编译可以通过,执行时没有窗口显示出来,但是在任务管理器中显示此程序正在运行,帮我看一下错在了哪里,不甚感谢。
...全文
312 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmkyec 2009-03-31
  • 打赏
  • 举报
回复
懂了,父窗口的类别要和所注册窗口的类别一致,谢谢5楼的帮助。
fox000002 2009-03-31
  • 打赏
  • 举报
回复
wndclass.lpszClassName = TEXT("ComboBox"); // 注册的窗口类名是这个,有问题

RegisterClass(&wndclass); // 没检查是否注册成功

hwnd = CreateWindow(TEXT("PARENT"), // 怎么能用未知的窗口类名呢,这个和注册的不一致啊
cmkyec 2009-03-31
  • 打赏
  • 举报
回复
如何取得GetLastError()的返回值?可以将代码写给我看一下吗?
lgccaa 2009-03-31
  • 打赏
  • 举报
回复
CreateWindow不是这样用的
http://msdn.microsoft.com/en-us/library/ms632679(VS.85).aspx这里是msdn的CreateWindow函数
icecools 2009-03-31
  • 打赏
  • 举报
回复
创建失败后调用GetLastError()看看到底是啥错误代码
Jacky_Dai 2009-03-31
  • 打赏
  • 举报
回复
既然返回的是0那么就说明创建窗体失败了,你可以dubug一步一步看的啊

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧