IE的左边工具栏问题 真的要疯狂了~~

lookvc 2006-12-14 04:05:59
我做了一个IE Band工具栏,在里面显示一个网页,然后我在Toolbar上放2个按钮来切换band工具栏里面的网页,居然弄了1天多,没一点头绪

...全文
503 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lion_wing 2006-12-21
  • 打赏
  • 举报
回复
怎么还不好?
lookvc 2006-12-20
  • 打赏
  • 举报
回复
第一个我是实现的
其中的m_pUnkSite是我在工具栏按钮的SetSite中保存下来的setsite变量
////
IUnknown* pUnk;
HRESULT hr = ::CoCreateInstance(CLSID_IEVerBar, NULL, CLSCTX_INPROC_SERVER,
IID_IUnknown, (void**)&pUnk);

IObjectWithSite* pOWS;
hr = pUnk->QueryInterface(IID_IObjectWithSite, (void**)&pOWS);

pOWS->SetSite( m_pUnkSite );

IDeskBand *pdb;
hr = pUnk->QueryInterface(IID_IDeskBand, (void**)&pdb);
if (SUCCEEDED(hr))
{
HWND hWnd;
pdb->GetWindow(&hWnd);
pdb->ShowDW(TRUE);
}
lookvc 2006-12-19
  • 打赏
  • 举报
回复
了解了,IE处理了快捷键,是处理了COMMAND,消息没有继续传递,所以无法删除
lion_wing 2006-12-19
  • 打赏
  • 举报
回复
//Try like this:
STDMETHODIMP CBar::TranslateAcceleratorIO(LPMSG lpMsg)
{
// Check if the message is a accelerator
if((hAccelerators != NULL) &&
::TranslateAccelerator(m_hWnd, hAccelerators, lpMsg))
{
return S_OK;
}

// Translate and Dispatch the message
::TranslateMessage(lpMsg);
::DispatchMessage(lpMsg);

return S_OK;
}
lookvc 2006-12-19
  • 打赏
  • 举报
回复
第一个我马上去试试,第二个麻烦帮我找一下,谢谢了
lion_wing 2006-12-19
  • 打赏
  • 举报
回复
兄弟,第一个问题是那样解决的吗?
lion_wing 2006-12-18
  • 打赏
  • 举报
回复
1、根据工具栏的GUID,用CoCreateInstance直接创建并调用IIEVerBar应该就可以。
2、以前见过,我再找找。
lookvc 2006-12-18
  • 打赏
  • 举报
回复
总结一下问题:
一共碰到2个比较烦的问题:
1. 获取IE桌面的band工具栏接口的问题,或者使用枚举IE所有工具条
2. 在左面band工具栏里面的Broswer打开网页里面如果又Input,无法使用backspace回退删除,也无法使用delete
lookvc 2006-12-15
  • 打赏
  • 举报
回复
STDMETHODIMP CShowMsgBTN::Exec( const GUID* pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut )
{
//我打算在这里获取到左面band工具栏的接口
}


class ATL_NO_VTABLE CIEVerBar :
public IObjectSafetyImpl<CIEVerBar, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CIEVerBar, &CLSID_IEVerBar>,
public IObjectWithSiteImpl<CIEVerBar>,
public IDispatchImpl<IIEVerBar, &IID_IIEVerBar, &LIBID_CCNTOOLBARLib>,
public IPersistStreamInitImpl<CIEVerBar>,
public CWindowImpl<CIEVerBar>,
public IDeskBand
lookvc 2006-12-15
  • 打赏
  • 举报
回复
是个com,
还有band工具栏里面的input输入内容后,没办法使用backspace删除
我也实现了IInputObject接口了,怎么无法删除,奇怪了
lion_wing 2006-12-15
  • 打赏
  • 举报
回复
你的工具栏也是一个插件呀?
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
把你的两个按钮的代码、IIEVarBar里面传递url的接口函数的代码,贴出来看看。
lookvc 2006-12-14
  • 打赏
  • 举报
回复
感觉你说的跟我想的有点区别,呵呵
我的想实现的是跟 IE的历史差不多,点击IE bar上的按钮弹出左面的band窗口
里面出现一个网页,然后点另一个按钮band窗口重新Navigate那个按钮的url

我是在按钮里面已经实现了exec和下拉菜单,并且band已经弹出来了,就是在按钮里面
获取不到band的接口,在IIEVarBar里面已经实现了一个传递url的接口函数
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
控制面板中都是用这种方式,为DLL中的函数传递不同的参数。
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
像这样:
void __stdcall Navigate(HWND hwnd,HINSTANCE hinst, LPWSTR lpszCmdLine,int nCmdShow)
{
string url = GetUrl(lpszCmdLine);//获得URL
browser.Navigate(url);//导航
}

我知道你没有实现Navigate,你如果想实现这功能,可以添加这样的函数。
因为我觉得用IE按钮直接得到并调用DLL中的接口不太可能。
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
那你用上面的动态的那种方法,应该可以实现。
lookvc 2006-12-14
  • 打赏
  • 举报
回复
而且接口里面我也没实现Navigate ,我是在CAxWindow创建的一个browser用这个来获取打开的
lookvc 2006-12-14
  • 打赏
  • 举报
回复
比如band的接口为IIEVarBar

我希望在exec里面取到IIEVarBar这个接口,因为有一个按钮需要下拉菜单,根据不同菜单给网页
不同的url参数
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
动态的好像也能实现:
1、写一个导出函数,即入口点函数Navigate
void __stdcall RunSettingsW(HWND hwnd,HINSTANCE hinst, LPWSTR lpszCmdLine,int nCmdShow)

从lpszCmdLine中分析出传入的URL,进行导航。
2、IE的按钮1的EXEC为:rundll32.exe xxx.dll,Navigate www.baidu.com
按钮2的EXEC为:rundll32.exe xxx.dll,Navigate www.google.com


除了这种方法,那就是再写一个EXE来进行调用了。
lion_wing 2006-12-14
  • 打赏
  • 举报
回复
如果你的两个URL是固定的:
1、可以把两个URL写到DLL中,让URL1对应A1,URL2对应A2
2、编写一个导出函数Navigate,运用Windows Rundll 和 Rundll32 接口,分别定为A1与A2进行导航。
参考:http://support.microsoft.com/kb/164787/zh-cn
3、IE的按钮1的EXEC为:rundll32.exe xxx.dll,Navigate A1
按钮2的EXEC为:rundll32.exe xxx.dll,Navigate A2
加载更多回复(4)

3,245

社区成员

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

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