利用wtl的CDialogResize自动调整atl ActiveX控件布局
前言
利用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
利用wtl的CDialogResize自动调整atl ActiveX控件布局的更多相关文章
- vs 2005/2008/2010 ATL ActiveX控件显示XP风格
vs 2005/2008/2010 ATL ActiveX控件在IE浏览器中控件显示的是原始的风格,要显示XP风格只要进行以下操作 一.在Stdafx.h中增加下以内容 #if defined _M_ ...
- C#编写ActiveX控件
用C#编写ActiveX控件 http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/hom ...
- 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件
用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...
- COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...
- 用ATL和MFC来创建ActiveX控件
摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...
- ATL开发 ActiveX控件的 inf文件模板
ATL开发 ActiveX控件的 inf文件模板
- ActiveX控件(ATL篇)
目录 第1章 VC++6.0创建 2 1.1 目标 2 1.2 创建项目 2 1.3 增加COM类 4 1.4 属性 7 1.5 事件 8 1.6 实现连接点 ...
- COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)
源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...
- 如何用ATL创建ActiveX控件
演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...
随机推荐
- apply & call
一.意义 function.apply(obj,args) obj代替function里this对象 args作为参数传给function 二.实例 1. obj代替function里this对象 f ...
- CS224n学习资源汇总
一.课程网站: http://web.stanford.edu/class/cs224n/archive/WWW_1617/index.html 二.视频(中文字幕) http://www.mooc. ...
- Map中object转换成boolean类型
Ajax请求查询数据之后,返回的是map类型, resultMap.put("flag", flag); 在接收到数据之后判断时,转换出现异常,导致页面点击按钮之后,页面没有反应, ...
- Andorid:日常学习笔记(3)——掌握日志工具的使用
Andorid:日常学习笔记(3)——掌握日志工具的使用 使用Android的日志工具Log 方法: Android中的日志工具类为Log,这个类提供了如下方法来供我们打印日志: 使用方法: Log. ...
- Loadrunder脚本篇——webservice接口测试(二)
1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“Import” ->弹出窗中选择“URL”,填写wsdl地址,导 ...
- qt_hal_verion
/opt/EmbedSky/B2/linux-3.0.35/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h 文件中的具体版本 export DI ...
- JSP语法及内置对象
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动 ...
- JMeter学习(十三)JMeter使用中遇到的问题:Jmeter Debug - "Unrecognized VM option '+HeapDumpOnOutOfMemoryError"
启动JMeter.bat的程序时,出现以下出错信息: Unrecognized VM option '+HeapDumpOnOutOfMemoryError' Could not create the ...
- 使用Homebrew管理你的mac开发包
很多人可能不了解 Homebrew, 其实它相当于开发软件界的 Appstore. 比如,如果我要安装 python 的最新版本,那么传统的做法是 1. 到官方网站下载 python 的最新版本 2. ...
- python 操作mongoDB数据库
网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...