因加密的需要, 我创建了一个播放myflash控件,在该控件调用了CShockwaveFlash控件。在IE调用myflash控件。
flash不能响应方向键,但是可以响应其他字母键。也可以播放。在对话框可以调用该程序。也可以响应方向键
  有人说是放向键盘是控制IE滚动条垂直和水平方向。
代码如下:CShockwaveFlash m_Flash;int CmyflashCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

    
m_Flash.Create(NULL, WS_VISIBLE|WS_CHILD, CRect(50,50,100,100), this, IDC_SHOCKWAVEFLASH1);
m_Flash.LoadMovie(0,"D:\\TDDOWNLOAD\\flash代码\\PlayFlash\\PlayFlash\\youxi.swf");
}
  1 大家说说是怎么回事,怎么可以让flash 响应键盘方向键事件.
  2 有人说可以通过PreTranslateMessage消息进行转发给m_Flash,具体怎么转发,请教!
 
在此小弟谢谢,散分酬谢!

解决方案 »

  1.   

    关注一下这个 mfc 的问题.
      

  2.   

    从flash 中query出 IOleInPlaceObjectWindowless指针
    在 PreTranslateMessage 里 把消息通过 IOleInPlaceObjectWindowless::OnWindowMessage()给flash
      

  3.   

    你需要在播放器(myflash控件)中加入响应..,
    没看到你写FlashCall ,也没有FSCommand 函数,你崩溃什么?http://hi.baidu.com/jjzhang166/blog/item/2e01be8b024bf5759e2fb4cd.html
      

  4.   

    BOOL CDADengJiView::PreTranslateMessage(MSG* pMsg)
    {
    if ( pMsg->message == WM_KEYDOWN )
    {
    // 读取键盘值
    DWORD vKey = pMsg->wParam; //wParam中存放键盘上字符的虚拟码
    LONG keyData = pMsg->lParam;
    switch( pMsg->wParam ) //使用pMsg->wParam拦截回车键
    {
    case VK_RETURN :
    DoReturnKey(); 
    return 1; break;
    }
    }return CFormView::PreTranslateMessage(pMsg);
    }
      

  5.   

    你用spy++看看消息发到哪里去了
    自己拦截后在post给你要的窗口
      

  6.   

    5 楼兄才说的是: 
    我已经解决了
    1 首先激活控件
      COleControl::OnActivateInPlace(TRUE,NULL);
    2 消息转发
        BOOL CCtrl::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    //消息转发flash     

    CString msg;

        msg.Format("  PreTranslateMessage(pMsg->message=%d,pMsg->wParam=%d,pMsg->lParam=%d)  ",
                                  pMsg->message,pMsg->wParam,pMsg->lParam);
    //OutputDebugString(msg);
       
    if (pMsg->message==WM_KEYDOWN)
    {
    switch(pMsg->wParam)
    {
    case VK_TAB:
    case VK_RETURN:
    case VK_LEFT:
    case VK_RIGHT:
    case VK_UP:
    case VK_DOWN:
    m_Flash.SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
    return TRUE;
    break;
    default:
    break;
    }
    }
    return COleControl::PreTranslateMessage(pMsg);
    }