win32 api 子窗口创建 求教

老灰狼 2013-04-10 07:52:47
子窗口不显示,哪里的问题???是不是窗口类赋值有问题?
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HINSTANCE hinstance;
LPRECT lprect;
WNDCLASS wndclass;
HWND hwndgame;
switch (message)
{
case WM_CREATE:
MoveWindow(hWnd,0,0,800,400,TRUE);
//GetClientRect(hWnd,lprect);
//MessageBox(0,0,0,0);
hinstance=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);

//子窗口类
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.hCursor=0;
wndclass.hIcon=0;
wndclass.hInstance=hinstance;//???????
wndclass.lpfnWndProc=wndproc1;//处理函数定义在下面
wndclass.lpszClassName=TEXT("game");
wndclass.lpszMenuName=0;
wndclass.style=CS_HREDRAW;

if(RegisterClass(&wndclass))MessageBox(0,TEXT("子窗口注册"),0,0);

hwndgame= CreateWindow(TEXT("game"),NULL,WS_CHILDWINDOW,
0,0,600,400,
hWnd,0,hinstance,0);
//ShowWindow(hwndgame,SW_SHOW);
break;
case WM_COMMAND:
....}
...全文
336 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
窗口句柄在回调函数结束后被销毁了!!!
南山攻城狮 2014-08-15
  • 打赏
  • 举报
回复
你好,你是怎么改好的,能发完整的代码看看吗 ? 非常感谢
老灰狼 2013-04-13
  • 打赏
  • 举报
回复
问题已经找到,是由于没有对创建窗口前给消息过程发送的一个消息没进行处理;导致创建失败
老灰狼 2013-04-11
  • 打赏
  • 举报
回复
引用 4 楼 pathuang68 的回复:
引用 3 楼 qqfeng0908 的回复:引用 2 楼 pathuang68 的回复:引用 1 楼 qqfeng0908 的回复:没人安慰我幼小的心灵么。。。 我来安慰你一下吧。 为啥要注释下面这行? //ShowWindow(hwndgame,SW_SHOW);好人我去掉注视他也不显示。。。 单步看了一下窗口类注册正常,但是 createwindow返回……
你的子窗口呢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
pathuang68 2013-04-11
  • 打赏
  • 举报
回复
引用 3 楼 qqfeng0908 的回复:
引用 2 楼 pathuang68 的回复:引用 1 楼 qqfeng0908 的回复:没人安慰我幼小的心灵么。。。 我来安慰你一下吧。 为啥要注释下面这行? //ShowWindow(hwndgame,SW_SHOW);好人我去掉注视他也不显示。。。 单步看了一下窗口类注册正常,但是 createwindow返回空值
给你一个完整的实例参考一下吧:

#include <windows.h>

LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
	TCHAR szname[]=TEXT("classname");
	HWND hwnd;
	MSG msg;
	ZeroMemory(&msg,sizeof(msg));
	WNDCLASS wndclass;
	wndclass.style=CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc=WinProc;
	wndclass.cbClsExtra=0;
	wndclass.cbWndExtra=0;
	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);	
	wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wndclass.hInstance=hInstance;	wndclass.lpszClassName=szname;
	wndclass.lpszMenuName=NULL;
	RegisterClass(&wndclass);
	hwnd=CreateWindow(szname,TEXT("windowsnametest"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
	if(hwnd)
		ShowWindow(hwnd,SW_SHOW);
	else
	{
		MessageBox(NULL,TEXT("创建窗口失败!"),TEXT("提示"),MB_OK);
		UnregisterClass(szname,hInstance);
		return 1;	
	}
	UpdateWindow(hwnd);
	while(GetMessage(&msg,hwnd,0,0)>0)
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	UnregisterClass(szname,hInstance);
	return msg.wParam;
}

LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	switch(message)
	{
	case WM_CLOSE:
		DestroyWindow(hwnd);
		PostQuitMessage(0);	
		break;	
	default:
		return DefWindowProc(hwnd,message,wParam,lParam);
	}
	return 0;
}
老灰狼 2013-04-11
  • 打赏
  • 举报
回复
引用 2 楼 pathuang68 的回复:
引用 1 楼 qqfeng0908 的回复:没人安慰我幼小的心灵么。。。 我来安慰你一下吧。 为啥要注释下面这行? //ShowWindow(hwndgame,SW_SHOW);
好人我去掉注视他也不显示。。。 单步看了一下窗口类注册正常,但是 createwindow返回空值
pathuang68 2013-04-11
  • 打赏
  • 举报
回复
引用 1 楼 qqfeng0908 的回复:
没人安慰我幼小的心灵么。。。
我来安慰你一下吧。 为啥要注释下面这行? //ShowWindow(hwndgame,SW_SHOW);
老灰狼 2013-04-11
  • 打赏
  • 举报
回复
没人安慰我幼小的心灵么。。。

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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