本人目前在修改一个游戏,游戏下载的地址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窗体,而是由于环境设置可能出现问题,因此请问高手如何解决这个问题?
//一些宏定义参数
#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窗体,而是由于环境设置可能出现问题,因此请问高手如何解决这个问题?
解决方案 »
- MFC InsertString() 出现乱码
- 为何继承CStatic类的对象没有响应OnLButtonDown
- MFT文件记录中,30-38位表示什么
- 直接用CreateWindow创建的Edit控件怎么响应回车键?
- 关于Cstring中GetBuffer函数接受数据库返回字符串的问题!
- 让俺崩溃的CString
- 求教,用ntohs(htons(80))方式转来转去是不是有点无聊!
- 请教怎么开一个线程来播放一个.mp3的文件做为一个背景音乐呢
- 如何在现有程序中使用socket (在线等候)
- 如何处理可变大小的对话框?关于WM_SIZE、GetWindowRect、MoveWindow的问题。
- ATL ActiveX Control在Web Page上为什么不Work?
- 提问了N次,没人给出满意答案。附上附件,请大家帮忙。
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,请问高手如何解决?
看看成功了么
肯定是由数据值的,另外使用CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,...)仍然搞不定
改成
rcWnd.top - rcWnd.bottom
检查一下你这个hInstacne
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;
}