qq魔法表情播放器应该是一个dynamic ole object host之类的东东,其能播放swf之类的文件,并且播放时是没有窗体的,这让人看起来感觉很酷,下面简单的讲一下其实现。
首先利用flash.ocx写一个透明显示flash的控件,这个可以参考 http://www.codeguru.com/cpp/com-tech/activex/com/article.php/c12229/#more关于写透明flash控件的。
然后在该透明flash控件上添上相关的有用的设置,大家可以添加自己想要的功能,我讲下我添加的功能和实现步骤。
1.用vs2008(推荐vs 6.0,我是没有安装)创建个Win32的项目,然后向项目添加下载的透明flash控件 FlashWnd.cpp和 FlashWnd.h文件。
2.因为要无窗体显示透明的flash,可以在主窗体创建后并不显示,然后创建相应的CFlashWnd。
3.因为隐藏了主窗口,所以要用透明显示Flash的控件来交互,如加载flash、退出程序,这里可以通过修改FlashWnd.h中的COleContainerWnd窗口的回调函数来实现
首先利用flash.ocx写一个透明显示flash的控件,这个可以参考 http://www.codeguru.com/cpp/com-tech/activex/com/article.php/c12229/#more关于写透明flash控件的。
然后在该透明flash控件上添上相关的有用的设置,大家可以添加自己想要的功能,我讲下我添加的功能和实现步骤。
1.用vs2008(推荐vs 6.0,我是没有安装)创建个Win32的项目,然后向项目添加下载的透明flash控件 FlashWnd.cpp和 FlashWnd.h文件。
2.因为要无窗体显示透明的flash,可以在主窗体创建后并不显示,然后创建相应的CFlashWnd。
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- UNREFERENCED_PARAMETER(hPrevInstance);
- UNREFERENCED_PARAMETER(lpCmdLine);
- // TODO: 在此放置代码。
- MSG msg;
- HACCEL hAccelTable;
- // 初始化全局字符串
- LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- LoadString(hInstance, IDC_MAGICFLASH, szWindowClass, MAX_LOADSTRING);
- MyRegisterClass(hInstance);
- // 执行应用程序初始化:
- if (!InitInstance (hInstance, nCmdShow))
- {
- return FALSE;
- }
- hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MAGICFLASH));
- OleInitialize(NULL);
-
- //创建相应的显示透明flash的控件窗口
- g_flashWnd = new CFlashWnd;
- g_flashWnd->Create(ShockwaveFlashObjects::CLSID_ShockwaveFlash,
- WS_EX_LAYERED, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS,
- g_hWnd, g_hInst);
- // 主消息循环:
- while (GetMessage(&msg, NULL, 0, 0))
- {
- if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- delete g_flashWnd;
- OleUninitialize();
- return (int) msg.wParam;
- }
- OLECONTAINER(LRESULT)::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- int wmId, wmEvent;
- switch (uMsg)
- {
- case WM_COMMAND:
- {
- wmId = LOWORD(wParam);
- wmEvent = HIWORD(wParam);
- // 分析菜单选择: