| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2202 人关注过本帖
标题:WNDCLASS注册问题
只看楼主 加入收藏
gao_gao86
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-3-3
收藏
 问题点数:0 回复次数:4 
WNDCLASS注册问题

我写的程序运行后没有窗口,查了下,是ReigsterWindowEx执行失败了,错误代码是87,说参数不正确,我想了半天都没找到哪里不对了,我把部分代码帖出来高手能不能指点我一下? 不胜感激! 错误的地方我注释出来了, 和其他代码应该没什么关系。
#include <windows.h>
#include <dinput.h>

HINSTANCE g_hInst;
HWND g_hWnd;
const TCHAR g_szWndClass[]=TEXT("Game");
const TCHAR g_szWndTitle[]=TEXT("DirectInput 键盘输入");
WNDCLASSEX g_wcex;


ATOM RegWndClass(HINSTANCE);
BOOL CreateWnd(HINSTANCE,int);
LRESULT WndProc(HWND,UINT,WPARAM,LPARAM);
extern BOOL InitKeyboard();
extern BOOL IsKeyPressed(int);
extern void ReleaseCOMObject();

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
g_hInst=hInstance;
ATOM atom=RegWndClass(hInstance);
int error =GetLastError(); ////错误代码为87,参数不正确
if(!CreateWnd(hInstance,nCmdShow))
{
return FALSE;
}
if(!InitKeyboard())
{
return FALSE;
}
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if(IsKeyPressed(DIK_RIGHT))
{
MessageBox(NULL,TEXT("右箭头按下"),TEXT("按键状态"),MB_OK|MB_ICONINFORMATION);
}
if(IsKeyPressed(DIK_LEFT))
{
MessageBox(NULL,TEXT("左箭头按下"),TEXT("按键状态"),MB_OK|MB_ICONINFORMATION);
}
if(IsKeyPressed(DIK_D)&IsKeyPressed(DIK_LCONTROL))
{
MessageBox(NULL,TEXT("Ctrl+D双键按下"),TEXT("按键状态"),MB_OK|MB_ICONINFORMATION);
}
if(IsKeyPressed(DIK_ESCAPE))
{
PostQuitMessage(0);
}
}
}
return msg.wParam;
}

//ReleaseCOMObject();

ATOM RegWndClass(HINSTANCE hInstance)
{
g_wcex.cbSize=sizeof(WNDCLASS);
g_wcex.style=CS_HREDRAW|CS_VREDRAW;
g_wcex.lpfnWndProc=(WNDPROC)WndProc;
g_wcex.cbClsExtra=0;
g_wcex.cbWndExtra=0;
g_wcex.hInstance=hInstance;
g_wcex.hIcon=LoadIcon(NULL,IDI_WINLOGO);
g_wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
g_wcex.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
g_wcex.lpszMenuName=NULL;
g_wcex.lpszClassName=g_szWndClass;
g_wcex.hIconSm=NULL;
int error =GetLastError();
return RegisterClassEx(&g_wcex); ///////////////这里出错

}

BOOL CreateWnd(HINSTANCE hInstance,int nCmdShow)
{
g_hWnd=CreateWindow(g_szWndClass,g_szWndTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
//int error =GetLastError();
if(!g_hWnd)
{
return false;
}
ShowWindow(g_hWnd,nCmdShow);
UpdateWindow(g_hWnd);
return true;
}

LRESULT WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}

高手能不能帮告诉我哪里的问题? 小弟先谢过拉!

搜索更多相关主题的帖子: WNDCLASS windows HINSTANCE include BOOL 
2007-08-20 13:05
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
用0RegisterClass注册,用WNDCLASS结构,不用扩展的Ex

2007-08-20 13:35
gao_gao86
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-3-3
收藏
得分:0 
回复:(余来)用0RegisterClass注册,用WNDCLASS结构...

恩,我以前用WNDCLASS注册没出现这样的问题,但为什么不能用RegisterClassEx注册呢? 两者有什么不同呢?还望指教啊! 呵呵!

2007-08-20 14:32
磐涅
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-11-7
收藏
得分:0 
g_wcex.cbSize=sizeof(WNDCLASSEX);

... 相差2个参数

2007-08-20 20:20
gao_gao86
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-3-3
收藏
得分:0 
回复:(磐涅)g_wcex.cbSize=sizeof(WNDCLASSEX);......

唉~~~~~~~~~~ 我也刚发现, 居然是这么个错误,搞了半天,谢谢啊! 呵呵!

2007-08-21 09:38
快速回复:WNDCLASS注册问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017953 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved