另一怪问题?在线等待

Semigod 2003-07-11 10:04:38
我的WTL对话框中,包含了一个多行Edit控件,一个IE控件,我在Edit控件的EN_CHANGE消息中将Edit控件的内容写入到IE控件。
在这一过程中出现的怪问题是:一但通过鼠标等方式使IE控件得到了输入焦点,然后再将输入焦点切换回Edit控件后,每输入一个字符,Edit控件的输入焦点就丢失了

问:如何解决这一问题?(最好不通过SetFocus()来完成,对话框中还有其它Edit控件)
...全文
48 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lop5712 2003-12-25
  • 打赏
  • 举报
回复
我觉得可能是pWebBrowser->Refresh();导致夺走焦点,楼主可以试下暂时将它去掉,看是否还会出现那种效果,如果Refresh是必须的,那么可暂时用另外的途径更新(如用一个菜单项或按钮)。

我从没用过这个组件,所以上面的仅是猜测,如果真是由于Refresh,我也不知道如何处理,查了下这个接口的类型信息,发现它有一个Refresh2,带一个long的参数,参数名为level,楼主可查下相关资料看Refresh2是否能够有用。
Semigod 2003-07-17
  • 打赏
  • 举报
回复
up
Semigod 2003-07-15
  • 打赏
  • 举报
回复
大家帮忙找找原因啦
Semigod 2003-07-11
  • 打赏
  • 举报
回复
写入操作的原代码:
CString tmp;
GetDlgItemText(IDC_EDIT_MSG, tmp);
{
IWebBrowser2 * pWebBrowser;
if (SUCCEEDED(m_wndWebBrowser.QueryControl(IID_IWebBrowser2, (void **)&pWebBrowser)))
{
IDispatch * pDisp;
if (SUCCEEDED(pWebBrowser->get_Document(&pDisp)))
{
IHTMLDocument2 * pHtmlDoc;
if (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void **)&pHtmlDoc)))
{
//pHtmlDoc->write(
static bool bFirstInit = true;
BSTR readyState;
if (bFirstInit == false && SUCCEEDED(pHtmlDoc->get_readyState(&readyState)))
{
if (CString(readyState) != _T("complete") && CString(readyState) != _T("uninitialized"))
{
SysFreeString(readyState);
return;
}
SysFreeString(readyState);
}
bFirstInit = false;
VARIANT *param;
SAFEARRAY *sfArray;
CString html = _T("<html><head></head><body leftMargin='5' topMargin='5' rightMargin='5'>") +tmp;
html+= _T("</body></html>");
BSTR bstr = SysAllocString(html);
pHtmlDoc->clear();
// Creates a new one-dimensional array
sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if (bstr == NULL
|| sfArray == NULL
|| FAILED(SafeArrayAccessData(sfArray,(LPVOID*) & param)))
goto cleanup;
// 写入新的HTML文档内容
param->vt = VT_BSTR;
param->bstrVal = bstr;
if (SUCCEEDED(SafeArrayUnaccessData(sfArray)))
{
pHtmlDoc->write(sfArray);
pWebBrowser->Refresh();
}
cleanup:
if (bstr)
SysFreeString(bstr);
if (sfArray != NULL)
{
SafeArrayDestroy(sfArray);
}
pHtmlDoc->Release();
}
pDisp->Release();
}
pWebBrowser->Release();
}
}
rtdb 2003-07-11
  • 打赏
  • 举报
回复
原因可能是在这里吧:
》我在Edit控件的EN_CHANGE消息中将Edit控件的内容写入到IE控件

不知是怎么写入IE的结果让IE获得输入焦点。

多半还得用SetFocus(), 不过就在EN_CHANGE消息中用应该能简单点,
你可以从该消息中获得EDIT的句柄进行操作。
Semigod 2003-07-11
  • 打赏
  • 举报
回复
补充一句:Edit控件丢失的输入焦点后是IE控件得到了输入焦点

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧