炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2223|回复: 1

WebBrowser控件中tab等键无效的问题。

[复制链接]

该用户从未签到

发表于 2014-11-1 15:41:12 | 显示全部楼层 |阅读模式
问题是这样的:  我弹出一个模态窗口。 并在窗口里放置了一个Web控件。 发现控件里Tab等键无效。 网上搜了下, 所以想
用截获窗口的消息并发给控件。    弄好后发现不是我想的那样。 只有当焦点在窗口上时(比如用鼠标点一点边框,我按键的消息就会有反应,如下列会弹出一框。  可如果焦点在控件上时(比如用鼠标点一下控件后),怎么按键都没反应。

后来我又尝式直接把窗口的消息发给控件。  
部份代码如下:
                CComPtr<IDispatch> disp;               
                CComQIPtr<IOleInPlaceActiveObject> spInPlace;
                HRESULT hr = S_FALSE;
                hr        = pWebBrowser->get_Document(&disp);
hr = disp->QueryInterface(__uuidof(IOleInPlaceActiveObject), (void**)&spInPlace);
                        if (S_OK == hr)
                        {
                                if (spInPlace)        bool bRet = (spInPlace->TranslateAccelerator(&msg) == S_OK) ? TRUE : FALSE;  

                        }   
----------------------------------------------------------------------------------------------------------------------
这样一来,当焦点在窗口上时。按下tab键。会发现控件里有反应。就像是在网页里按了两下tab键。网页内的光标会跳两下。  如果焦点回到webbrowser控件上,再按tab键。仍是无反应。


// 这是消息处理函数
int CALLBACK WndProc(HWINDOW hWindow,UINT message, WPARAM wParam, LPARAM lParam,BOOL *pBool)
{

         if((message < WM_KEYFIRST || message > WM_KEYLAST) && (message < WM_MOUSEFIRST || message > WM_MOUSELAST))  
        return FALSE;  

        if(WM_CHAR == message)
        {
                AfxMessageBox( _T("press") );
        }
}


......................................................
下面是主程程序中的一段代码

            //创建模态窗口
                HWINDOW hModalSet=XModalWnd_CreateWindow(320,440,L"设置",XEle_GetHWnd(p2->m_hBtnSet));
               
                HXCGUI hWeb=XWeb_Create(hModalSet,0,2,300,410); //浏览器控件
                pWebBrowser=(IWebBrowser2*)XWeb_GetControl(hWeb);
                XWeb_OpenURL(hWeb, strTemp.GetBuffer( strTemp.GetLength() )); //打开
               
               XWnd_RegisterMessageProc(hModalSet, &WndProc); // 注册消息过程


                int result=XModalWnd_DoModal(hModalSet);

  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2014-11-1 18:17:28 | 显示全部楼层
    IE控件是微软的开发,非炫彩开发,所以只能为你提供一些思路,当然你也可以用其他的浏览器引擎,例如谷歌的Webkit什么的,你可以尝试以下方法,
    1.偷懒:js脚本
    2.常规:你可以通过IE控件的事件接口
    3.暴力:获取IE控件窗口句柄,替换消息过程拦截处理
    4.暴力:HOOK -- IE控件.

    相信以上总有一款适合你,祝您成功!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-9-20 00:42 , Processed in 0.069809 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表