|
问题是这样的: 我弹出一个模态窗口。 并在窗口里放置了一个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);
|
|