让ActiveX控件设计状态在容器中的大小锁定!

原创 2002年11月04日 13:09:00

让ActiveX控件设计状态时在容器中的大小锁定,可以使用下面这个宏,该宏为无窗口的ActiveX控件,在vc++.net(atl7.0)下编译成功.

#ifndef __CONTROL_NO_WINDOW_WITH_ICON__
#define __CONTROL_NO_WINDOW_WITH_ICON__

#include <atltypes.h>

/*
本宏实现无窗口控件在设计模式时在设计窗口下显示一个小图标,窗口大小为固定图标大小

本宏继承了控件的四个函数
 SetObjectRects 有些容器必须用这个函数指定窗口大小
 GetExtent  容器向控件询问窗口大小
 OnDraw   用来画图标

参数:
 classControl 控件类名字
 iconID   图标的ID
 nCx    图标(控件窗口)宽度
 nCY    图标(控件窗口)高度
*/
#define CONTROL_NO_WINDOW_WITH_ICON(classControl,iconID,nCx,nCy) /
 public: /
  STDMETHOD(SetObjectRects)(LPCRECT prcPos,LPCRECT prcClip) /
  { /
   CSize size(prcPos->right - prcPos->left,prcPos->bottom - prcPos->top); /
   /
   if(size.cx!=nCx || size.cy!=nCy) /
   { /
    m_spInPlaceSite->OnPosRectChange(CRect(prcPos->left,prcPos->top,prcPos->left+nCx,prcPos->top+nCy)); /
    return S_OK; /
   } /
   /
   IOleInPlaceObjectWindowlessImpl<classControl>::SetObjectRects(prcPos, prcClip); /
   /
   return S_OK; /
  } /
  /
  STDMETHOD(GetExtent)(DWORD dwDrawAspect, LONG lindex, DVTARGETDEVICE* ptd, LPSIZEL lpsizel) /
  { /
   HRESULT hr=IViewObjectExImpl<classControl>::GetExtent(dwDrawAspect,lindex,ptd,lpsizel); /
   /
   CSize sizePixel(nCx,nCy); /
   CSize sizeNew; /
   AtlPixelToHiMetric(&sizePixel,&sizeNew); /
   /
   if(hr==S_OK) /
   { /
    lpsizel->cx=sizeNew.cx; /
    lpsizel->cy=sizeNew.cy; /
   } /
   return hr; /
  } /
  /
  STDMETHOD(GetExtent)(DWORD dwDrawAspect, LPSIZEL lpsizel) /
  { /
   HRESULT hr=IOleObjectImpl<classControl>::GetExtent(dwDrawAspect,lpsizel); /
   /
   CSize sizePixel(nCx,nCy); /
   CSize sizeNew; /
   AtlPixelToHiMetric(&sizePixel,&sizeNew); /
   /
   if(hr==S_OK) /
   { /
    lpsizel->cx=sizeNew.cx; /
    lpsizel->cy=sizeNew.cy; /
   } /
   return hr; /
  } /
  /
  HRESULT OnDraw(ATL_DRAWINFO& di) /
  { /
   OLE_COLOR colorOle; /
   GetAmbientBackColor(colorOle); /
   COLORREF colorRgb; /
   ::OleTranslateColor(colorOle,0,&colorRgb); /
   HBRUSH hBrush; /
   hBrush=CreateSolidBrush(colorRgb); /
   RECT& rc = *(RECT*)di.prcBounds; /
   FillRect(di.hdcDraw,&rc,hBrush); /
   DeleteObject(hBrush); /
   SetBkMode(di.hdcDraw,TRANSPARENT); /
   HICON hIcon=LoadIcon(_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(iconID)); /
   DrawIcon(di.hdcDraw,rc.left,rc.top,hIcon); /
   DeleteObject(hIcon); /
   /
   return S_OK; /
  }

#endif//__CONTROL_NO_WINDOW_WITH_ICON__

ATL问题集

使用ATL创建控件过程发现一个问题: 1.
  • pipi0714
  • pipi0714
  • 2014年09月03日 13:46
  • 2800

让ActiveX控件设计状态在容器中的大小锁定

让ActiveX控件设计状态在容器中的大小锁定!yewuyu提示:用一个宏实现。让ActiveX控件设计状态时在容器中的大小锁定,可以使用下面这个宏,该宏为无窗口的ActiveX控件,在vc++.ne...
  • yewuyu
  • yewuyu
  • 2005年05月06日 20:42
  • 1128

VS2010 开发ActiveX控件 设置测试方式 .

在VS2010中开发MFC ActiveX控件,开发完后,通常使用VS自带的容器ActiveX Control Test Container来运行ActiveX控件。此容器在VS安装后的文件中是找不到...
  • u011937547
  • u011937547
  • 2015年03月09日 17:03
  • 600

ActiveX控件的MFC设计之旅-第12步

通常情况下,内制的图片属性页CLSID_CPicturePropPage能够满足需要,但有时候,也许你想有你自己的属性页来设置你的图片(IPictureDisp)类型的属性,本文将讲述如何做一个图片属...
  • xiaoqiqixiao
  • xiaoqiqixiao
  • 2006年01月14日 12:32
  • 2349

保持ActiveX控件固定大小

怎样使自己编写的控件象VB中Timer控件一样不让用户调整控件大小,一般适用于非界面控件。在控件类的构造函数中编写代码。 CArmHand() {  m_bWindowOnly = true;  //...
  • shaoqiang
  • shaoqiang
  • 2008年01月23日 15:16
  • 708

ActiveX控件的MFC设计之旅-第13步

这一步我们将持久化一个接口,可能有些难度,因为用到了很多前面讲过的东西。在第1步中,我们就实现了一个具有层次结构的控件,但是,我们并没有给这个控件提供持久化,更不用说,持久化控件的所有层次了。在上一步...
  • xiaoqiqixiao
  • xiaoqiqixiao
  • 2006年01月16日 15:29
  • 2396

IE调用Activex控件时EVENT的三种调用方式

Test 1 uses the "for" tag to setup the callback to the activeX event. This is successful on all vers...
  • jia_xiaoxin
  • jia_xiaoxin
  • 2017年06月28日 17:30
  • 818

activex布局iframe+div+css,activex无法显示的问题。

特别在Windows 7在2016年5月10日升级后,对于特殊布局进行了处理。    这个问题等待证明,但是从反馈的问题看,在之前的DIV+CSS布局没有问题,IE 11自动更新后,    Act...
  • wlanye
  • wlanye
  • 2016年06月28日 17:54
  • 842

ActiveX控件 全屏彻底实现,支持IE 和 应用程序

 在做夸浏览器控件时,遇到全屏问题。 基于ATL 开发的ACTIVEX控件,在应用程序VC 可以全屏,但在IE不能全屏, 基于MFC 开发的ACTIVEX控件,在IE 可以全屏,可以在应用程...
  • doitsjz
  • doitsjz
  • 2015年11月22日 11:22
  • 791

VC中如何调试和使用ActiveX控件

原文地址:VC中如何调试和使用ActiveX控件作者:潇湘浪子 VC中如何调试和使用ActiveX控件     由于控件并不能单独运行,所以你必须利用另一个程序来装载控件并进行调试,VC中提...
  • m372897500
  • m372897500
  • 2012年01月18日 13:27
  • 493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让ActiveX控件设计状态在容器中的大小锁定!
举报原因:
原因补充:

(最多只允许输入30个字)