ActiveX Control Text Container与VB作为容器上的实现不一样???奇怪。

jhb 2001-07-12 12:49:38
用MFC写控件,运行方式时窗口不可见的,设计方式下需保持控件尺寸不变。在控件类构造函数中用:SetInitialSize(16,16),然后响应WM_SIZE消息,调用:SetControlSize(16,16)。在ActiveX Control Text Container下使用设计方式测试正常,但在VB下使用时尺寸不能固定,仿佛加入的代码完全没起作用。对此我极为疑惑,请兄弟们帮忙解答.谢谢.
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhb 2001-07-21
  • 打赏
  • 举报
回复
n6002(阿斯):
谢了,用你的方法解决了:)。不过这下在VB里行了,在ActiveX Control Text Container反而又不行了。不知道什么回事,不过没影响就好。
谢谢。
jhb 2001-07-12
  • 打赏
  • 举报
回复
n6002(阿斯):
在MFC的控件类中没法重载SetExtent啊,我想是没有实现ColeClientItem这个接口吧。只有一个相似的OnSetExtent(LPSIZEL lpSizeL),但重载后还是没效果,在ActiveX Control Text Container下都没效。是咋回事,你知道吗?
ahphone 2001-07-12
  • 打赏
  • 举报
回复
??

听课!
n6002 2001-07-12
  • 打赏
  • 举报
回复
标准的做法
MFC版本
重载COleClientItem::SetExtent和下面的差不多。

ATL做的
...
class ATL_NO_VTABLE CYourCtl:
...
STDMETHOD(SetExtent)(DWORD dwDrawAspect, SIZEL *psizel)
{
ATLTRACE(_T("SetExtent sizing control to 16x16\n"));
psizel->cx = psizel->cy = 16;
return IOleObjectImpl<CYourCtl>::SetExtent(dwDrawAspect, psizel);
}
...
};
n6002 2001-07-12
  • 打赏
  • 举报
回复
MFC的我不大清楚,不过好像要这样
BOOL CYourCtrl::OnSetExtent(LPSIZEL lpSizeL)
{
CWnd *pWnd = CWnd::FromHandle(::GetDesktopWindow());
CClientDC dc(pWnd);

CSize sz(16,16);
dc.DPtoHIMETRIC(&sz)
lpSizeL->cx = sz.x;
lpSizeL->cy = sz.y;
return COleControl::OnSetExtent(lpSizeL);
}

还有不知道这样能不能工作:
BOOL CYourCtrl::OnSetExtent(LPSIZEL lpSizeL)
{
return FALSE;
}
jhb 2001-07-12
  • 打赏
  • 举报
回复
n6002(阿斯)
成了,你的方法起作用了,谢谢。不过好像在VB和Delphi中的大小不一样啊,用GetDC()->DPtoHIMETRIC又要出内存错,有什么办法吗?

3,245

社区成员

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

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