类似qq魔法表情播放器的实现

    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.cppFlashWnd.h文件。
    2.因为要无窗体显示透明的flash,可以在主窗体创建后并不显示,然后创建相应的CFlashWnd。
  1. int APIENTRY _tWinMain(HINSTANCE hInstance,
  2.                      HINSTANCE hPrevInstance,
  3.                      LPTSTR    lpCmdLine,
  4.                      int       nCmdShow)
  5. {
  6.     UNREFERENCED_PARAMETER(hPrevInstance);
  7.     UNREFERENCED_PARAMETER(lpCmdLine);
  8.     // TODO: 在此放置代码。
  9.     MSG msg;
  10.     HACCEL hAccelTable;
  11.     // 初始化全局字符串
  12.     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  13.     LoadString(hInstance, IDC_MAGICFLASH, szWindowClass, MAX_LOADSTRING);
  14.     MyRegisterClass(hInstance);
  15.     // 执行应用程序初始化:
  16.     if (!InitInstance (hInstance, nCmdShow))
  17.     {
  18.         return FALSE;
  19.     }
  20.     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MAGICFLASH));
  21.     OleInitialize(NULL);   
  22.    
  23.    //创建相应的显示透明flash的控件窗口
  24.     g_flashWnd = new CFlashWnd;
  25.     g_flashWnd->Create(ShockwaveFlashObjects::CLSID_ShockwaveFlash,
  26.         WS_EX_LAYERED, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS,
  27.         g_hWnd, g_hInst);
  28.     
  29.     // 主消息循环:
  30.     while (GetMessage(&msg, NULL, 0, 0))
  31.     {
  32.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  33.         {
  34.             TranslateMessage(&msg);
  35.             DispatchMessage(&msg);
  36.         }
  37.     }
  38.     delete g_flashWnd;
  39.     OleUninitialize();
  40.     return (int) msg.wParam;
  41. }
    3.因为隐藏了主窗口,所以要用透明显示Flash的控件来交互,如加载flash、退出程序,这里可以通过修改FlashWnd.h中的COleContainerWnd窗口的回调函数来实现
  1. OLECONTAINER(LRESULT)::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  2. {
  3.     int wmId, wmEvent;
  4.     switch (uMsg)
  5.     {
  6.     case WM_COMMAND:
  7.         {
  8.             wmId    = LOWORD(wParam);
  9.             wmEvent = HIWORD(wParam);
  10.             // 分析菜单选择:
  11.             
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值