本人目前在修改一个游戏,游戏下载的地址www.mobijoy.cn,此游戏的pc端使用vc++开发,使用了一套开源的UI,此UI使用dx9作为显示和加速引擎,目前因为游戏过于简单,趣味性不强,本人想在游戏中加入Flash的功能,在网上找到利用win32直接调用flash的代码,但是需要一个窗口才能显示在游戏中采用窗口win32的建立窗口,窗口缺注册不了,代码如下:
//一些宏定义参数
#define WND_NAME "迷你小游戏"
#define WND_W 500
#define WND_H 500
///////////////////////////////////////
         DWORD dwStyle =  WS_DLGFRAME;
RECT rcWnd = {0,0,WND_W,WND_H};
HINSTANCE hInstance = g_Game.GetWndInst();
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); 
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProcFlash;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAME_ICON));
wcex.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAME_ICON));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = CreateSolidBrush(RGB(0,0,255));//(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = WND_NAME;
//注册窗口,但是不知道为什么注册窗口不成功
if(!RegisterClassEx(&wcex)){
          return;
        }
        //创建一个窗口
HWND hWnd = CreateWindowEx( NULL, WND_NAME, WND_NAME,dwStyle,
rcWnd.left, rcWnd.top, rcWnd.right - rcWnd.left, rcWnd.bottom - rcWnd.top,
g_Game.GetWndHwnd(), NULL, hInstance, NULL );
if (!hWnd){
return;
}

g_pFlashWidget->StartAnimation("d:/1.swf",WND_W,WND_H,hWnd);
g_pFlashWidget->SetQuality(FlashPlayer::QUALITY_HIGH);
ShowWindow(hWnd, 1);
UpdateWindow(hWnd);
后来使用win32中的 MessageBox(NULL, "test 对话框!","提示",0); 弹出窗口没有问题,说明并非在dx环境中不能显示win32窗体,而是由于环境设置可能出现问题,因此请问高手如何解决这个问题?

解决方案 »

  1.   

    用GetLastError看看错误代码是什么
      

  2.   

    现在注册的动作过了,但是
    HWND   hWnd   =   CreateWindowEx(   NULL,   WND_NAME,   WND_NAME,dwStyle, 
    rcWnd.left,   rcWnd.top,   rcWnd.right   -   rcWnd.left,   rcWnd.bottom   -   rcWnd.top, 
    g_Game.GetWndHwnd(),   NULL,   hInstance,   NULL   ); 
    if(!hWnd){ 
    error=GetLastError();
    return; 

    这个没有成功,使用error=GetLastError();得到的结果为0,请问高手如何解决?
      

  3.   

    g_Game.GetWndHwnd()
    看看成功了么
      

  4.   

    CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,...)试一下~~~
      

  5.   

    g_Game.GetWndHwnd() 
    肯定是由数据值的,另外使用CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,...)仍然搞不定
      

  6.   

      rcWnd.bottom - rcWnd.top
    改成
      rcWnd.top - rcWnd.bottom
      

  7.   

    WndProcFlash有没有添加消息处理代码
      

  8.   

    HINSTANCE   hInstance   =   g_Game.GetWndInst();
    检查一下你这个hInstacne
      

  9.   

    原来这个方法是空的,现在加入了这些代码,窗口就出现了,多谢9楼大哥提醒
    LRESULT CALLBACK WndProcFlash(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    PAINTSTRUCT ps;
    HDC hdc; switch (message) 
    {
    case WM_CREATE:
    OnCreate(hWnd);
    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    OnPaint(hWnd,hdc);
    EndPaint(hWnd, &ps);
    break;
    case WM_TIMER:
    OnTimer(hWnd,(UINT_PTR)wParam);
    break;
    case WM_LBUTTONDOWN:
    OnMouseDown(hWnd,LOWORD(lParam),HIWORD(lParam));
    break;
    case WM_LBUTTONUP:
    OnMouseUp(hWnd,LOWORD(lParam),HIWORD(lParam));
    break;
    case WM_MOUSEMOVE:
    OnMouseMove(hWnd,LOWORD(lParam),HIWORD(lParam));
    break;
    case WM_RBUTTONDOWN:
    ChangeFlash(hWnd);
    break;
    case WM_DESTROY:
    OnDestroy(hWnd);
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
    }