您现在的位置:首页 >> 前端 >> 内容

IE浏览器控件页面如何在选中的文本框输入焦点输入文字

时间:2017/9/4 9:24:00 点击:

  核心提示:目前多数移动操作系统IOS, android,还有windows10系统也可以做到当光标落到文本输入框上时,自动弹出虚拟键盘。很多自助设备上现在都采用HTML展示UI交互,大多数使用IE核或控件进行二...

目前多数移动操作系统IOS, android,还有windows10系统也可以做到当光标落到文本输入框上时,自动弹出虚拟键盘。

很多自助设备上现在都采用HTML展示UI交互,大多数使用IE核或控件进行二次开发。那我们如何可以做到我们自已的输入法(拼音,手写,只要是第三方或自已定义的输入方法)可以准确的写入到焦点对像上呢?

通过IE控件我们是有办法获取WEB上的事件的,比如说光标位置,单双击事件等等,那么通过这个事件,我们就可以得到当前是不是有输入框被选中为焦点,如果是,我们就可以读取或修改他的值(内容)了。

BOOL CHtmlCtrl::PreTranslateMessage(MSG* pMsg)

{

if (pMsg->message == WM_LBUTTONUP)

{

LPPOINT lpoint = new tagPOINT;

::GetCaretPos(lpoint);//得到光标位置

IHTMLDocument2* pDoc = (IHTMLDocument2*)GetHtmlDocument();

if (pDoc)

{

IHTMLElement * pElem = NULL;

pDoc->elementFromPoint(lpoint->x, lpoint->y, &pElem);

if (pElem)

{

BSTR bstrSrc;

VARIANT_BOOL * val = new VARIANT_BOOL;

*val = VARIANT_TRUE;

HRESULT ret = pElem->get_isTextEdit(val);

//pElem->get_className

pElem->get_innerText(&bstrSrc);

if (ret == S_OK && * val == VARIANT_TRUE)

{

CString temp = bstrSrc;

AfxMessageBox(temp);

//pElem->put_innerText(_T("............"));

//AfxMessageBox(_T("click"));

delete lpoint;

delete val;

return FALSE;

}

delete lpoint;

delete val;

//HRESULT hr = S_OK;

//IHTMLElement *pBodyElement;

//hr = pDoc->get_body(&pBodyElement);

//if (pBodyElement != NULL)

//{

// CString cs = _T("hellogirl");

// BSTR pbBody = cs.AllocSysString();

// hr = pBodyElement->put_innerHTML(pbBody); //类似的还有put_innerTEXT

// pBodyElement->Release();

//}

//pDoc->Release();

//if (hr == S_FALSE) return FALSE;

//else return TRUE;

}

}

}

if (WM_KEYDOWN == pMsg->message || WM_CHAR == pMsg->message || WM_KEYUP == pMsg->message)

{

LPPOINT lpoint = new tagPOINT;

::GetCaretPos(lpoint);//得到光标位置

IHTMLDocument2* pDoc = (IHTMLDocument2*)GetHtmlDocument();

if (pDoc)

{

IHTMLElement * pElem = NULL;

pDoc->elementFromPoint(lpoint->x, lpoint->y, &pElem);

if (pElem)

{

VARIANT_BOOL * val = new VARIANT_BOOL;

*val = VARIANT_TRUE;

HRESULT ret = pElem->get_isTextEdit(val);

if (ret == S_OK && * val == VARIANT_TRUE)

{

//AfxMessageBox(_T("abc"));

delete lpoint;

delete val;

return FALSE;

}

delete lpoint;

delete val;

}

}

}

return CHtmlView::PreTranslateMessage(pMsg);

}

Tags:IE E浏 浏览 览器 
作者:网络 来源:黄普普的专栏