今天解决的问题:
1, IE插件中的ToolBar上“添加”一个Combobox,并正确处理焦点和输入
这里说的“添加”并不是真的添加,而是利用MoveWindow将Combobox移动
到ToolBar上相应的位置。
要实现这样的功能,必须完成以下步骤:
<1>: Band类实现IInputObject的三个方法,
UIActivateIO, HasFocusIO, TranslateAcceleratorIO.
UIActivateIO是activate控件元素。这里我们SetFocus相应的控件,
不是Combobox而是它内部的edit控件,下面会说如何获得edit的handle.
HasFocusIO
询问band成员是否具有焦点,遍历所有的元素,与GetFocus比较、
TranslateAcceleratorIO
处理相应的系统快捷键,这个由超类化Combobox的类
处理即可。
<2>
获得Combobox内部edit空间的handle
COMBOBOXINFO cbi;
cbi.cbSize = sizeof(COMBOBOXINFO);
GetComboBoxInfo(m_hCombo, &cbi);
m_hEdit = cbi.hwndItem;
2, ToolBar实现ToolTip功能
必须完成如下步骤:
1,创建ToolBar时指定
TBSTYLE_TOOLTIPS
2,
在ToolBar的parent窗口中添加一个消息处理,处理TTN_GETDISPINFO
代码如下:
case TTN_GETDISPINFO:
LPTOOLTIPTEXT lpttt;
lpttt = (LPTOOLTIPTEXT)lParam;
UINT_PTR idButton = lpttt->hdr.idFrom;//Button
的command id.
switch(idButton)
{
case IDM_SEARCH:
lpttt->lpszText = TEXT("
最常用的书签"
);
break;
}
3,就这么简单!
3, Info Band中打开一个网页(host a web control),正确处理输入,包括backspace
必须完成如下步骤:
1,Band对象实现IOleControlSite, IOleClientSite
最简单的实现即可。
2,将web控件“停靠”到band对象,即实现了上述两个接口的band对象
注意不是控件的parent窗口,这个可以任意
即先获得web控件的IOleObject接口,然后调用:
m_pIOleObject->SetClientSite(this);//this
指针就是band对象的指针,它动态
转换成IOleObject*类型,因为我们的band已经实现了这个接口。
3,Band对象的对应窗口,设置为web控件的parent窗口
即:实现GetWindow. (IOleWindow的方法)