利用wtl的CDialogResize自动调整atl ActiveX控件布局

时间:2020-12-01 00:23:29

前言

利用atl 开发activex控件时,如果使用atl复合控件时,acitvex控件上的界面元素不会自动改变大小,如果自己在OnSize中处理每个子控件的布局是一件非常麻烦的事,我们可以借助wtl中的CDialogResize类来帮我们轻松的完成这项工作。本文以vs2010为例,讲解如何使用CDialogResize类

步骤

一、新建atl工程ResizableActiveX

二、在ResizableActiveX工程上右键,Add->Class,弹出窗口中选择ATL->ATL Control->Add

三、弹出窗口中Short Name输入ResizableTest, 其他默认生成。option中选择Composite control,其他默。Interfaces中增加IObjectSafty和IObjectWithSite两个接口。

  在Stock Properties中增加AutoSize和TabStop点击Finshed完成ResizableTest ActiveX控件的创建

四、修改ResizableTest.html,加上width和border属性,可以观察当前不支持自动调整的效果

  <OBJECT width=100% border=1 ID="ResizableTest" CLASSID="CLSID:1EEE1EA2-BCEA-4383-ADBC-EF7D99CE8751"></OBJECT>

五、修改代码

  StdAfx.h中增加 :

#include <atlapp.h>
#include <atlframe.h>

  CResizableTest中增加从CResizableTest类继承,OnInitDialog中增加 DlgResize_Init(false, false, WS_CHILD);

  增加CHAIN_MSG_MAP(CDialogResize<CResizableTest>),BEGIN_DLGRESIZE_MAP中增加要调整的控件布局方式

class ATL_NO_VTABLE CResizableTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CResizableTest, IResizableTest>,
public IOleControlImpl<CResizableTest>,
public IOleObjectImpl<CResizableTest>,
public IOleInPlaceActiveObjectImpl<CResizableTest>,
public IViewObjectExImpl<CResizableTest>,
public IOleInPlaceObjectWindowlessImpl<CResizableTest>,
public ISupportErrorInfo,
public IObjectWithSiteImpl<CResizableTest>,
public IQuickActivateImpl<CResizableTest>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CResizableTest>,
#endif
public IProvideClassInfo2Impl<&CLSID_ResizableTest, NULL, &LIBID_ResizableActiveXLib>,
public IObjectSafetyImpl<CResizableTest, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
public CComCoClass<CResizableTest, &CLSID_ResizableTest>,
public CComCompositeControl<CResizableTest>,
public CDialogResize<CResizableTest> BEGIN_MSG_MAP(CResizableTest)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
CHAIN_MSG_MAP(CComCompositeControl<CResizableTest>)
COMMAND_HANDLER(IDC_BTN_SELECTFOLDER, BN_CLICKED, OnBnClickedBtnSelectfolder)
CHAIN_MSG_MAP(CDialogResize<CResizableTest>)
END_MSG_MAP() BEGIN_DLGRESIZE_MAP(CResizableTest)
DLGRESIZE_CONTROL(IDC_BTN_SELECTFOLDER, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_EDIT_PATH, DLSZ_SIZE_X)
DLGRESIZE_CONTROL(IDC_LIST_FILE, DLSZ_SIZE_X | DLSZ_SIZE_Y)
END_DLGRESIZE_MAP()        LRESULT OnInitDialog(
_In_ UINT /*uMsg*/,
_In_ WPARAM /*wParam*/,
_In_ LPARAM /*lParam*/,
_Out_ BOOL& bHandled)
{
DlgResize_Init(false, false, WS_CHILD);
bHandled = FALSE; //这里一定要设置为FALSE,好让CComCompositeControl有机会处理
return 1; }

六、编译后打开ResizableTest.htm,调整窗口大小可看到ActiveX动态改变大小的效果

  参考:http://www.codeproject.com/Articles/1214/Using-WTL-s-Built-in-Dialog-Resizing-Class

  源码:ResizableActiveX.zip

利用wtl的CDialogResize自动调整atl ActiveX控件布局的更多相关文章

  1. vs 2005&sol;2008&sol;2010 ATL ActiveX控件显示XP风格

    vs 2005/2008/2010 ATL ActiveX控件在IE浏览器中控件显示的是原始的风格,要显示XP风格只要进行以下操作 一.在Stdafx.h中增加下以内容 #if defined _M_ ...

  2. C&num;编写ActiveX控件

    用C#编写ActiveX控件 http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/hom ...

  3. 用C&num;编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...

  4. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小&lpar;上&rpar;

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

  5. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

  6. ATL开发 ActiveX控件的 inf文件模板

    ATL开发 ActiveX控件的 inf文件模板    

  7. ActiveX控件&lpar;ATL篇&rpar;

    目录 第1章 VC++6.0创建    2 1.1 目标    2 1.2 创建项目    2 1.3 增加COM类    4 1.4 属性    7 1.5 事件    8 1.6 实现连接点    ...

  8. COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小&lpar;下&rpar;

    源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...

  9. 如何用ATL创建ActiveX控件

    演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...

随机推荐

  1. espcms内容页上下篇按后台手动排序号

    模板文件: {%get name=plist class="did":$read.did,pid:$read.pid%} <li class="fl"&g ...

  2. ASPX版菜刀一句话,留后门专用

    首先解释一下为什么要做这个玩意:众所周知.net一句话是不能插入到文件之中的,除非那个页面使用Jscript编写,但是现在看来 Jscript市场很低,遇到的.net站基本都是C#.新建一个SHELL ...

  3. makeKeyAndVisible的功能

    makeKeyAndVisible的作用 [self.window makeKeyAndVisible] 由于iPhone是单窗口程序,所以也就只有这么一个Window对象,而且是UIWindow,不 ...

  4. Quartz定时任务学习(六)作业

    org.quartz.Job 接口 把 Quartz 作用到 Java 类上唯一要做的就是让它实现 org.quartz.Job 接口.你的 Job 类可以实现任何其他想要的接口或继承任何需要的基类, ...

  5. java学习 (2)xml操作 SAX(增、删、改、查)

    sax是事件驱动的,sax是一种推模式 SAX常用事件: startDocument()----文档开始事件 startElement()-----元素开始事件 charElement()----文本 ...

  6. Alpha冲刺No&period;7

    一.站立式会议 彻底完成初步的界面设计 实现界面的简单跳转 完成部分事件监听 移植摄像头.图库功能到真实手机环境测试 数据库上传获取日记 二.项目实际进展 完成了简单的界面设计 大致完成了跳转任务 数 ...

  7. mipush ionic3 线上push

    <dict> <key>aps-environment</key> <string>production</string> </dic ...

  8. hdu4990 转移矩阵

    找了半天错发现m有可能是1.. /* 如果n是奇数,就进行(n/2)次转移,然后取F[2],反之取F[1] */ #include<bits/stdc++.h> using namespa ...

  9. Page 对象详解

    Page 对象 由于网页编译后所创建的类由Page派生而来,因此网页可以直接使用Page对象的属性.方法和事件. Page对象的常用属性 1.IsPostBack(bool类型) 获取一个值,该值指示 ...

  10. hdu 2642 Stars 【二维树状数组】

    题目 题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星.为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗.最开始,没有明亮的星星在天空中,然后将给出一些信息 ...