200 分请教高手 IE ToolBar 问题!!!

布学无数 2005-08-24 02:12:12
我用 ATL 做了一个 IE Band 工具条,加入任何其他控件如 COMBOBOX,EDIT 等都没问题。
但当我加入 TOOLBAR 时,问题就来了,我的 TOOLBAR 会盖住 IE 的菜单条,高手们都出来帮帮小弟啊。
我是菜鸟~```
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
老夏Max 2005-08-25
  • 打赏
  • 举报
回复
TOOLBAR 在Create的指定Bands的窗口为其父窗口,试试。
布学无数 2005-08-25
  • 打赏
  • 举报
回复
谢谢各位的回复,我太菜了,看了文章还是不知道该如何动手:(
创建一个 IE BANDS 对象已经成功了,而且可以在 IE 中显示出来,并且在这个 BANDS 对象中创建 STATIC,EDIT 等窗口都完全没有问题,一切正常。
但是,当我想要在 BANDS 对象中创建一个 TOOLBAR 时,我的 TOOLBAR 不会老老实实的呆在 BANDS 对象中,而是盖住了 IE 本来的菜单栏,即 TOOLBAR 和 BANDS 对象分家了,但按理来说 TOOLBAR 应该是呆在 BANDS 对象中的,说了这么多,也不知道大侠们能不能理解。
请各位高手们继续关注啊~```
lixiaosan 2005-08-25
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/listdoc.asp?sclsid=1711
wshcdr 2005-08-25
  • 打赏
  • 举报
回复
友情UP一下
布学无数 2005-08-25
  • 打赏
  • 举报
回复
还是贴出代码让各位看看吧,请各位不吝赐教啊:

const TBBUTTON TBButtons[] = {
{0,IDM_SAMPLE1,TBSTATE_ENABLED,TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,0,0},
{1,IDM_SAMPLE2,TBSTATE_ENABLED,TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,0,0},
{2,IDM_SAMPLE3,TBSTATE_ENABLED,TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,0,0}
};

/////////////////////////////////////////////////////////////////////////////
// CMySample

CMySample::CMySample()
{
m_dwBandID = 0L;
m_dwViewMode = 0L;

m_fShow = FALSE;
m_fEnterMode = FALSE;

m_hWndParent = NULL;
m_hWnd = NULL;

m_pSite = NULL;
}

BOOL CMySample::_CreateToolBar()
{
m_hWnd = ::CreateToolbarEx(m_hWndParent,WS_CHILD | TBSTYLE_FLAT,IDC_TOOLBAR,3,_Module.GetResourceInstance(),IDB_TOOLBAR,TBButtons,sizeof(TBButtons) / sizeof(TBBUTTON),16,16,16,16,sizeof(TBBUTTON));
if(::IsWindow(m_hWnd))
{
::SendMessage(m_hWnd,TB_SETEXTENDEDSTYLE,0L,TBSTYLE_EX_DRAWDDARROWS);

return TRUE;
}

return FALSE;
}

// IDeskBand
STDMETHODIMP CMySample::GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi)
{
m_dwBandID = dwBandID;
m_dwViewMode = dwViewMode;

if(pdbi)
{
if(pdbi->dwMask & DBIM_MINSIZE)
{
pdbi->ptMinSize.x = 240L;
pdbi->ptMinSize.y = 24L;
}

if(pdbi->dwMask & DBIM_MAXSIZE)
{
pdbi->ptMaxSize.x = -1L;
pdbi->ptMaxSize.y = 24L;
}

if(pdbi->dwMask & DBIM_INTEGRAL)
{
pdbi->ptIntegral.x = 1L;
pdbi->ptIntegral.y = 1L;
}

if(pdbi->dwMask & DBIM_ACTUAL)
{
pdbi->ptActual.x = 0L;
pdbi->ptActual.y = 0L;
}

if(pdbi->dwMask & DBIM_TITLE)lstrcpyW(pdbi->wszTitle,L"My Sample");
if(pdbi->dwMask & DBIM_BKCOLOR)pdbi->dwMask &= ~DBIM_BKCOLOR;
if(pdbi->dwMask & DBIM_MODEFLAGS)pdbi->dwModeFlags = DBIMF_NORMAL;
}

return S_OK;
}

// IOleWindow
STDMETHODIMP CMySample::GetWindow(HWND* phwnd)
{
HRESULT hr = S_OK;

if(phwnd == NULL)hr = E_INVALIDARG;
else *phwnd = m_hWnd;

return hr;
}

STDMETHODIMP CMySample::ContextSensitiveHelp(BOOL fEnterMode)
{
m_fEnterMode = fEnterMode;

return S_OK;
}

// IDockingWindow
STDMETHODIMP CMySample::CloseDW(unsigned long dwReserved)
{
if(::IsWindow(m_hWnd))::DestroyWindow(m_hWnd);

return S_OK;
}

STDMETHODIMP CMySample::ResizeBorderDW(const RECT* prcBorder, IUnknown* punkToolbarSite, BOOL fReserved)
{
return E_NOTIMPL;
}

STDMETHODIMP CMySample::ShowDW(BOOL fShow)
{
HRESULT hr = S_OK;

m_fShow = fShow;
::ShowWindow(m_hWnd,fShow ? SW_SHOW : SW_HIDE);

return hr;
}

// IObjectWithSite
STDMETHODIMP CMySample::SetSite(IUnknown* pUnkSite)
{
//If a site is being held, release it.
if(m_pSite)
{
m_pSite->Release();
m_pSite = NULL;
}

//If punkSite is not NULL, a new site is being set.
if(pUnkSite)
{
//Get the parent window.
IOleWindow *pOleWindow = NULL;

m_hWndParent = NULL;

if(SUCCEEDED(pUnkSite->QueryInterface(IID_IOleWindow,(LPVOID*)&pOleWindow)))
{
pOleWindow->GetWindow(&m_hWndParent);
pOleWindow->Release();
}

if(!::IsWindow(m_hWndParent))return E_FAIL;

if(!_CreateToolBar())return E_FAIL;

//Get and keep the IInputObjectSite pointer.
if(SUCCEEDED(pUnkSite->QueryInterface(IID_IInputObjectSite,(LPVOID*)&m_pSite)))return S_OK;

return E_FAIL;
}

return S_OK;
}

STDMETHODIMP CMySample::GetSite(REFIID riid, void **ppvSite)
{
*ppvSite = NULL;

if(m_pSite)return m_pSite->QueryInterface(riid,ppvSite);

return E_FAIL;
}

// IPersist
STDMETHODIMP CMySample::GetClassID(CLSID *pClassID)
{
*pClassID = CLSID_MySample;

return S_OK;
}

// IPersistStream
STDMETHODIMP CMySample::IsDirty(void)
{
return S_FALSE;
}

STDMETHODIMP CMySample::Load(IStream *pStm)
{
return S_OK;
}

STDMETHODIMP CMySample::Save(IStream *pStm, BOOL fClearDirty)
{
return S_OK;
}

STDMETHODIMP CMySample::GetSizeMax(ULARGE_INTEGER *pcbSize)
{
return E_NOTIMPL;
}

大侠帮帮我啊,分不够的话我可以再开帖子啊~```
goodboyws 2005-08-25
  • 打赏
  • 举报
回复
需要看一下你的代码
debehe 2005-08-25
  • 打赏
  • 举报
回复
相信下面这篇文章对你有帮助,有源码可下。
我原来实现过,应该没问题。

http://www.vckbase.com/document/viewdoc/?id=1457

3,245

社区成员

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

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