首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

为什么无法创建窗口解决思路

2012-03-19 
为什么无法创建窗口 - C++ Builder / Windows SDK/API#include windows.h#include windowsx.h#include

为什么无法创建窗口 - 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++错误查看工具中看是什么原因。自己用调试啊!

热点排行