我有一个托管 webbrowser 控件的自定义资源管理器栏(带对象)。我可以正确初始化 WebBrowser 控件并让它显示网页。
但是,我注意到,当我调整资源管理器栏的大小时,webbrowser 控件不会适当地调整到栏的大小:
调整大小之前:
调整大小后:
我不确定我需要处理哪些事件以及什么可以调整浏览器控件的大小。我在 .NET 编程方面有一些经验,但在 Windows 编程方面却没有。
如果您想进一步了解它,我还在这里包含了我的源代码。
我有一个托管 webbrowser 控件的自定义资源管理器栏(带对象)。我可以正确初始化 WebBrowser 控件并让它显示网页。
但是,我注意到,当我调整资源管理器栏的大小时,webbrowser 控件不会适当地调整到栏的大小:
我不确定我需要处理哪些事件以及什么可以调整浏览器控件的大小。我在 .NET 编程方面有一些经验,但在 Windows 编程方面却没有。
如果您想进一步了解它,我还在这里包含了我的源代码。
通常,当承载 OLE 控件的容器调整大小时,它会查询嵌入对象的 IOleInPlaceObject 接口,并使用该接口上的 SetObjectRects() 来告诉控件其新大小。
这个“答案”与原始问题没有直接关系,但我在尝试为一个非常相似的问题寻找解决方案时遇到了这个页面。
每当我移动分离器时,它总是会回到原来的位置。事实证明,DESKBANDINFO
模式标志对于垂直侧边栏的命名并不是特别好。我在DBIMF_NORMAL
应该使用的时候使用DBIMF_VARIABLEHEIGHT
。
示例代码:
STDMETHODIMP CMyExplorerBar::GetBandInfo(DWORD dwBandID,
DWORD dwViewMode,
DESKBANDINFO* pdbi)
{
if(pdbi)
{
m_dwBandID = dwBandID;
m_dwViewMode = dwViewMode;
if(pdbi->dwMask & DBIM_MINSIZE)
{
pdbi->ptMinSize.x = 30;
pdbi->ptMinSize.y = 30;
}
if(pdbi->dwMask & DBIM_MAXSIZE)
{
pdbi->ptMaxSize.x = -1;
pdbi->ptMaxSize.y = -1;
}
if(pdbi->dwMask & DBIM_INTEGRAL)
{
pdbi->ptIntegral.x = 1;
pdbi->ptIntegral.y = 1;
}
if(pdbi->dwMask & DBIM_ACTUAL)
{
pdbi->ptActual.x = 500;
pdbi->ptActual.y = 0;
}
if(pdbi->dwMask & DBIM_TITLE)
{
StringCchCopy(pdbi->wszTitle, 256, L"My Sidebar");
}
if(pdbi->dwMask & DBIM_MODEFLAGS)
{
pdbi->dwModeFlags = DBIMF_VARIABLEHEIGHT;
}
if(pdbi->dwMask & DBIM_BKCOLOR)
{
pdbi->dwMask &= ~DBIM_BKCOLOR;
}
return S_OK;
}
return E_INVALIDARG;
}