为什么无法创建窗口 - C++ Builder / Windows SDK/API
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#define INITGUID
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK q( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ;
HWND hwnd ;
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; //消息结构
if (!InitWindow(hInstance,nCmdShow))
{
MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
return false;
}//初始化窗体
while(1) //消息循环
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message==WM_QUIT) //退出消息循环
break;
TranslateMessage(&msg); //得到消息,处理回调函数
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//*********************************************************
//函数:InitWindow( )
//功能:创建窗口
//*********************************************************
static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
WNDCLASS wc;
wc.style = NULL; //窗口类风格
wc.lpfnWndProc = q; //指向窗口过程函数的指针
wc.cbClsExtra = 0; //窗口类附加数据
wc.cbWndExtra = 0; //窗口类附加数据
wc.hInstance = hInstance; //拥有窗口类的实例句柄
wc.hIcon = NULL; //最小窗口图标
wc.hCursor = NULL; //窗口内使用的光标
wc.hbrBackground = NULL; //用来着色窗口背景的刷子
wc.lpszMenuName = NULL; //指向菜单资源名的指针
wc.lpszClassName = NULL;// 指向窗口类名的指针
RegisterClass(&wc); //注册窗口
hwnd=CreateWindow("menpao_RPG_DEMO","menpao_RPG_DEMO",WS_POPUP|WS_MAXIMIZE,0,0,GetSystemMetrics( SM_CXSCREEN ),GetSystemMetrics( SM_CYSCREEN ), NULL,NULL,hInstance,NULL);
if( !hwnd )
{
MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
return FALSE;
}
ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow(hwnd); //刷新窗口
return TRUE;
}
//************************************************************
//函数:WinProc( )
//功能:处理主窗口消息
//************************************************************
LRESULT CALLBACK q( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_KEYDOWN://击键消息
switch( wParam )
{
case VK_ESCAPE:
MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
PostQuitMessage( 0 );//退出
break;
}
return 0;
case WM_LBUTTONDOWN:
MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
return 0;
case WM_RBUTTONDOWN:
MessageBox(hwnd,NULL,"mouse",MB_OK);
return 0;
case WM_MBUTTONDBLCLK:
MessageBox(hwnd,NULL,"mouse",MB_OK);
return 0;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam); //调用缺省消息处理过程
}
程序执行到
if( !hwnd )
{
MessageBox ( GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK ) ;
return FALSE;
}
这里就会报错 也就是说无法产生hwnd 为什么啊???
[解决办法]
@.@没看到,你注册了,不好意思,怎么会没获得窗口句柄呢。。。。应该没问题啊。
[解决办法]
把报错贴上来看看
[解决办法]
把报错贴上来看看
[解决办法]
wc.lpszClassName 为类名,必须要有,它的值要与CreateWindow 第一个参数相同(也是类名)
[解决办法]
clean 试试,vc++有时候就有这个毛病!
[解决办法]
你创建一个win32默认的工程,看看人家是怎么创建的。还有就是你可以调试,用getlasterror来获取错误的值,在c++错误查看工具中看是什么原因。自己用调试啊!