ATL窗口】的更多相关文章

这是一个相当于“Hello world!”的任务,作为认识ATL,考查了其运作流程与机制. 环境:VS2008 创建:新建-项目-Win32项目-添加公用头文件用于(选择ATL). PS:注意新建项目取消预编译头与设置自增链接为默认 需要用到的头文件: ,, OK,下面进行程序设计:(非完整代码,主要便于认识) Main函数: int APIENTRY _tWinMain(HINSTANCE hInstance,     HINSTANCE hPrevInstance,     LPTSTR l…
标准的Windows应用程序框架: /*------------------------------------------------------------ HELLOWIN.C -- Displays "Hello, Windows 98!" in client area (c) Charles Petzold, 1998 ------------------------------------------------------------*/ #include <win…
开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是最好的选择 ATL的窗口架构是这样的—— [两个底层封装类] CWindow 窗口句柄和API封装类 只封装了hWnd窗口句柄和与之有关的WinAPI,CWindow和hWnd可以方便地进行转换. CMessageMap 消息映射接口 该基类有一个待实现的函数ProcessWindowMessage…
有时候想写个几十kb的小程序,MFC实在是太大了,Win32有时又太麻烦,怎么办呢?用ATL写会更方便和轻量级一些 ATL和MFC不同的是,ATL并没有强制性封装WinMain函数,仅封装了WndProc,所以使用ATL写Windows程序有很高的自由度 ATL的窗口架构是这样的—— [两个底层封装类] CWindow 窗口句柄和API封装类 只封装了hWnd窗口句柄和与之有关的WinAPI,CWindow和hWnd可以方便地进行转换. CMessageMap 消息映射接口 该基类有一个待实现的…
我们知道Windows的窗口消息处理函数是C方式, 面向过程的, 所以窗口框架的基本任务就是将它转成面向对象的方式, 确切的说如何将消息处理函数第一参数HWND转成对象指针. 关于这个问题, 其实网上大家已经说滥了,  这里只是简单记录一下. Map方式:MFC就是采用这种方式, 就是建立一张从HWND到CWindow*的映射表, 每次收到消息都从Map中根据HWND找到CWindow*, 再进行调用 UserData的方式:CreateWindow时将最后一个附加数据设置为对象CWindow*…
STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.        STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方…
STL   即   Standard   Template   Library         STL(标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander   Stepanov.Meng   Lee和David   R   Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.         STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭…
第四章 对话框和控件 对于Win32 GUI的程序设计来说,其实大部分的情况下我们都不需要自己进行窗口类的设计,而是可以使用Win32中与用户交互的标准方式--对话框(Dialog Box).我们可以在VC IDE的资源设计器中设计对话框资源,并在其上放置各种控件资源--的确是非常方便.在本章里,李马将要向诸位介绍如何利用ATL来操作对话框,以及如何操作对话框上的各种控件. 题外话先 ATL,是的,正是由于我所讲的是"ATL的GUI程序设计",所以我才可能将内容直接经由CWindowI…
第三章 ATL的窗口类 CWindowImpl.CWindow.CWinTraits,ATL窗口类的奥秘尽在此三者之中.在本章里,李马将为你详细解说它们的使用方法.另外,本章的内容也可以算是本书的核心部分--如果你要进行ATL的GUI程序设计的话,就必须将ATL的窗口类设计理念了然于心. 窗口的组成 把ATL的窗口类撇开不谈先.我在上一章中提到:窗口类并非任何一种OOP语言中的类--它所包括的并不是通称的属性和方法(在C++中称作成员变量和成员函数),而是属性和响应.现在是解释这句话的时候了.…
做“HOOK文件打开/保存对话框”的过程中,我首先研究了界面库的相关知识.界面库一般都是由C/C++这种中低级语言编码,这是因为在Windows下的界面库实现技术大都以直接操作控制Windows的消息和调用Windows的API为主,这就是这种中低级语言的优势了.无论何种界面库,最为根本的原理就是获得或者截获窗口的某些消息,按照自己的需要处理这些消息,画出自己需要的界面. 按照Windows下的界面库的使用方法来分类,可以分为两种: 1. 通过派生.继承界面库中的类来使用库.这类界面库现在是占绝…
三. MFC篇 Windows API是面向过程的接口,因此对于当时的编程技术来说,它是完美无缺的.但是,随着人们逐渐使用C++进行Windows程序的开发,迫切需要建立与Windows API的面向对象包装的接口.1992年,微软将Windows API开发成为它的应用程序框架(AFX),后来该产品又演变成为目前的微软基础类库(MFC)产品.下图2展示了MFC的顶级类层次结构. 图2.MFC的类层次结构. MFC为使用C++开发Windows GUI应用程序提供了一个十分全面的基础框架,它对以…
ATL中采用了一种动态生成机器指令的方式进行窗口句柄与窗口对象进行关联,以是详细分析: CWindowImpl会在第一次调用Create时注册窗口类,该窗口类是的信息是在CWindowImpl的子类中使用 DECLARE_WND_CLASS定义的,该宏会为CWindowImpl的子类定义一个静态成员函数GetWndClassInfo, 该函数返回一个CWndClassInfo结构体,其中包含了WNDCLASSEX,用于指定该类的窗口类注册时所用的 WNDCLASSEX结构. 在DECLARE_W…
从VS2010开始ATL ActiveX支持IObjectSafety接口,所以用VS2010来编写,新建一个ATL项目 向导的第一页没什么东西,直接下一步,选项可以根据具体需求调整 点“完成”,切换到类视图,新建一个“ATL控件”类 点击“添加”后出现向导,这里我输入MainWindow,因为这是作为一个窗口容器的标准窗体(不是ActiveX容器) 点击“下一步”,如果需要网页接收ActiveX的事件则在“连接点”打钩,“已授权”未知(应该和数字签名有关系) 点击“下一步”,让控件支持IObj…
双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像.图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码: HRESULT OnDraw(ATL_DRAWINFO& di)    {        RECT& rc = *(RECT*)di.prcBounds;        // 将剪…
方法一: 转载:http://blog.csdn.net/chenlycly/article/details/46447297 转载:http://blog.csdn.net/harvic880925/article/details/8925650 方法二: 转载:http://blog.csdn.net/xdrt81y/article/details/22063479 搞Windows程序的人尽皆知分层窗口能够实现很多不错的效果,之前看过一些异形窗口的实现,所以就手痒也想自己搞一个玩一玩.自己…
今天看到的,感觉不错.转载了 一.什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范…
步骤2.1:建立一个解决方案. 步骤2.2:在 该解决方案中,新建一个 vc++ 的 ATL 项目.示例程序叫 Simple2,并选择DLL方式,见图一.图二. 图一.新建 ATL 项目 图二.选择非属性化的DLL组件类型 属性化 属性化编程,是未来的方向,但我们现在先不要选它. 动态链接库(DLL) 选择它. 可执行文件(EXE) 以后再讲. 服务(EXE) 表示建立一个系统服务组件程序,系统启动后就会加载并执行的程序. 允许合并代理/存根(stub)代码 选择该项表示把"代理/存根"…
建立 ATL 工程 步骤2.1:建立一个工作区(WorkSpace). 步骤2.2:在工作区中,建立一个 ATL 工程(Project).示例程序叫 Simple1,并选择DLL方式,见图一. 图一.建立 ATL DLL 工程 Dynamic Link Library(DLL) 表示建立一个 DLL 的组件程序. Executable(EXE) 表示建立一个 EXE 的组件程序. Service(EXE) 表示建立一个服务程序,系统启动后就会加载并执行的程序. Allow merging of…
1,#ifdef _ATL_DISABLE_NO_VTABLE#define ATL_NO_VTABLE#else#define ATL_NO_VTABLE __declspec(novtable)#endif This form of __declspec can be applied to any class declaration, but should only be applied to pure interface classes, that is, classes that wil…
我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的.但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水. 下面我们主要分析一下ATL中的一些汇编代码. ATL中出现汇编代码主要是2处,一处是通过Thunk技术来调用类成员函数处理消息:还有一处是通过打开_…
演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部单击将会使多边形的边数在当前的基础上-1,并能改变多边形的颜色.最后举了两个例子说明了如何使用这个刚刚生产得控件.一个是把该控件应用到网页中,一个则是用于一个基于对话框的程序中.详细代码请下载压缩包. (一) 创建工程 (1) 打开VC6集成开发环境,按新建按钮,选择PROJECT标签.(2) 选择…
摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码.这两种框架在它们对于开发ActiveX的用途上会合了.我们将看看这两种框架是如何适用于创建ActiveX控件的——突出其优缺点,亲自经历创建一个控件的过程——以便你能够决定何时使用一种框架,何时使用另一种. 如果你希望用C++来写ActiveX®控件,有两个流行的框架,一个是Mi…
Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H"//消息值的定义来源 #include "Dde.h"//DDE消息值的定义来源 #include "CPL.H"//控制面板消息值的定义来源 #include "WFEXT.H"//文件管理器的消…
无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试. a>.DCOM配置里的属性灰色不可用的解决方法,   1>.管理工具->组件服务-计算机-电脑-iis admin server (详情查看)  appid= iis admin server A9E69610-B80D-11D0-B9B9-00A0C922E750   2>.用regedit,定位到HKEY_CLASSES_ROOT\AppID\{刚查到的ID}”   3>…
用ATL开发和部署ActiveX网页控件 摘 要 ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程.学习使用ActiveX让浏览器访问客户端的硬件资源. 关键字 ATL,ActiveX控件,COM组件   一.前言 在B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等.对于一个完善系统来说,往往很多时候又需要控制这些资源.通过在浏览器中插入ActiveX插件是一种很好的解决方式…
http://blog.csdn.net/titilima/archive/2004/07/18/44273.aspx 介绍 本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C++和Visual Basic程序来分别调用这个服务器.我并不想深入探讨COM的细节,也不想让你深陷于IDL之中.这一教程只是为VC++的新手程序员设计的,告诉他们利用ATL来创建一个COM对象有多么简单,并让他们能对ATL产生更多的兴趣. 第1步:启动ATL COM Wizard 你所需要做的…
查看一个浏览器源码实现,发现其中使用了ie的控件,但例子中没有找到任何创建ie浏览器控件的代码,经过仔细跟踪,发现CAxWindow类是可以这么使用滴.. 创建的时候第三个参数直接传入url.调用到CWindowImpl::Create 多次跟踪后发现疑点: 跟踪到这个函数,查看定义,可以看到如下实现,/(ㄒoㄒ)/~~ 也就是说传入得窗口名中如果包含":"就认为是一个URL,并创建WebBrowser控件. 对于这种实现我只能说也是醉了.   References: Web Appl…
如果你有SDK的编程经验,就一定应该知道在创建窗口时需要指定窗口类,窗口类中的一种重要的参数就是窗口过程.任何窗口接收到的消息,都是由该窗口过程来处理. 在面向对象编程中,如果还需要开发人员来使用原始的窗口过程这种面向过程的开发方式,面向对象就显得不那么纯粹了.所以,在界面编程的框架中,框架往往会隐藏窗口过程,开发人员看到的都是一个个的类. 如果要处理某一个消息,则需要在窗口对应的类中加入响应的message map即可. 那么,框架是如何将窗口过程跟窗口对应的类关联起来呢? ATL中用的是一个…
////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H"//消息值的定义来源 #include "Dde.h"//DDE消息值的定义来源 #include "CPL.H"//控制面板消息值的定义来源 #include "WFEXT.H"//文件管理器的消息值的定义来源 #include &quo…
原文:http://www.cnblogs.com/clever101/archive/2009/12/14/1624204.html 本文转自博客园,此文作者依据codeproject英文版本翻译! 原文地址:http://www.codeproject.com/KB/cs/DotNetActiveX.aspx 原文作者:Daniel Yanovsky 翻译:朱金灿   本文介绍了怎样在C++工程集成C#窗口(Window Form). 介绍 本文介绍如何在C++窗口中集成C#窗体(也被称为视…