关于SubclassWindows
1.Intime的项目中,程序退出时经常有异常时因为static控件用了Attach,而不是SubclassWindow;
2.SubclassWindow和Attach的区别:
a.Attach是为了操作窗口 SubClassWindow更多是为了依附在那个窗体上,做自身类想要的动作;
b.SubclassWindow完成了两项功能:我们对该窗体实例调用成员函数将会直接改变相关窗体句柄对应的窗体(Attach); 系统传给相关窗体句柄的消息会先经过该窗体实例的消息映射(SetWindowLong)。
关于子类化
SubclassWindow是MFC对子类化的简化
例:实现一个拖动的button,并在对话框中方便使用,假设对话框中安置了一个普通按钮IDOK。
1.从CButton派生一个CMyButton,实现拖动功能
2.得到句柄hOK = GetDlgItem(IDOK)->m_hWnd
3.定义变量 CMyButton b;
b.SubclassWindow(hOK);
子类化就是改变一个已创建窗口的行为,即改变窗口函数,SubclassWindow是MFC对此目的进行的简化。上述方法的好处在于:你可以用普通控件布置对话框。另外,UnsubclassWindow是必须的善后步骤。
关于对话框的一些知识总结
1. CreateInDirect用来根据内存中的模板创建无模式对话框,InitModalIndirect用来根据内存中的模板创建模式对话框。
2. AfxDlgProc处理WM_INITDIALOG消息时调用虚拟函数OnInitDialog,给程序员一个机会处理对话框的初始化。
3. 得到父窗口:CWnd *pWnd = CWnd::GetSafeOwner(m_pParentWnd, &m_hWndTop);
返回父窗口句柄:return pWnd->GetSafeHwnd();
4. 无模式对话框:CSrollView,CFormView都继承至CView;
WTL相关知识
1. WTL中如何查看某个控件的消息:在Resource Edit界面,双击这个控件;在VS200中也可以右键点击该控件,选"Add Event Hander"。
2. WTL中GetResourceInstance(),它返回你的EXE的HINSTANCE实例,和MFC的AfxGetResourceHandle()方法相似。(当然还有CComModule::GetModuleInstance(),它相当于MFC的AfxGetInstanceHandle()。)
3. ATL中的对话框,窗口的基类是CDialogImpl而不是CWindowImpl。
4. CWindow::rcDefault,这是CWindow中的成员(静态数据成员),数据类型是RECT。和调用CreateWindow() API时使用CW_USEDEFAULT指定窗口的宽度和高度一样,ATL使用rcDefault作为窗口的最初大小。
5. 要在StdAfx中在#include <atlbase.h>前面加上#define _SECURE_ARL 1;
6. Deploy应用时,要在项目设置中把Deployment->Additional File里清空,否则会出现找不到系统文件的错误;
7. ListBox和ComboBox都用来显示列表项目,所不同的是ComboBox占用较少的空间。ListBox则提供了一个项目列表以供选择。以下是一个ComboBox和一个ListBox的示意图:
8. 控制Windows窗口、控件、资源……都是通过它们的句柄来实现,如 HHANDLE、HWND、HDC都是句柄,它表现为一个32位长整形数据,存放于Windows中的特定区域,我们可以把它理解为指向我们想控制的窗口、控件、资源的索引,有了它,我们就可以控制我们想要控制的对象。
9. 在OnInitDialog中设置了某个控件得到焦点后(m_EditOne.SetFocus),要return FALSE,否则不生效。return TRUE表示“Let the system set the focus”. 10. CMessageLoop实例,该实例包含了这个线程的消息循环。这些消息循环都放在模块的全局消息循环中,通过线程的ID来索引。这样,该线程的其它代码就能访问得到。每一个应用程序维护一个消息循环队列Map,应用程序中的每个线程都通过"_Module.AddMessageLoop(&theLoop)",把该线程的消息循环加入到_Module的消息循环Map中。消息循环对象包含了消息过滤和空闲处理。每个线程都可以加入空闲处理代码和消息过滤。
10.VC6.0用UNICODE后出现msvcrtd.lib(crtexew.obj) : error LNK2001的问题的解决办法Project Setting->Link->Output->将Entry-Point Symbol填入:wWinMainCRTStartup就可以了。
分享到:
相关推荐
VS2008开发WinCE上的应用时,只能先到Windows Mobile 5.0, 而无法选到Windows Mobile 6.0, 找了些资料,为便于自己以后使用资源做个记录 我的环境 Win7(Enterpise en) + VS2008(CHS) + VS2008 SP1(不用VS2008中文版...
Windows CE 6.0 开发环境搭设及内核配置和应用开发 Windows CE 是一种实时操作系统,广泛应用于嵌入式系统中。为了满足不同的应用需求,Windows CE 提供了高度可定制的特性,允许开发者根据实际需求对系统进行裁剪...
本文将详细介绍如何在旗舰版Windows 7系统上搭建Windows CE 6.0 开发环境,并涉及VS2008的安装、构建SDK、模拟器调试等内容。 #### 二、安装准备 1. **操作系统**:本文档假设的操作系统为Windows 7旗舰版。 2. **...
Win CE 6.0模拟器是一个强大的开发工具,允许开发者在桌面环境下模拟Win CE设备的行为,进行应用程序的调试和测试。它提供了以下功能: 1. **真实环境模拟**:模拟器能够精确复制目标硬件的环境,包括处理器、内存...
本书全面深入地介绍了Windows Embedded CE 6.0开发环境,通过一系列的示例练习揭示了CE 6.0的开发和应用。 #### 二、开发环境与工具 - **开发环境**:包括设置开发环境的基础知识,如安装必要的软件(如Visual ...
车载CE6.0操作系统是微软开发的一个嵌入式操作系统,主要应用于汽车电子设备,如车载信息娱乐系统。CE,全称Windows Embedded Compact,是微软针对小型设备推出的操作系统系列,而CE6.0是其中的一个重要版本,发布于...
开发CE 6.0应用程序可以使用Visual Studio工具集,支持多种编程语言,如C++、C#和.NET Compact Framework。此外,还可以使用ActiveX控件和COM接口来构建用户界面。 8. **网络与通信** CE 6.0提供了丰富的网络功能...
模拟器是开发者在没有实际硬件设备的情况下,测试和调试CE6.0应用程序的重要工具。CE6.0模拟器提供了一个虚拟环境,允许开发人员在个人计算机上模拟CE6.0设备的行为。它包含了CE6.0的核心系统组件、运行时环境以及...
本书由姜波撰写,旨在为开发者提供一个全面的开发指南,帮助他们理解和实践CE 6.0的程序设计。 在Windows Embedded CE 6.0中,程序设计主要涉及以下几个关键知识点: 1. **系统架构**:CE 6.0采用微内核设计,其...
在使用Visual Studio 2008进行Windows CE 6.0开发的过程中,可能会遇到安装WinCE6.0中文模拟器SDK时出现错误的情况。具体表现为安装过程中出现以下错误信息: ``` ToolsMsmCA(Error):IHxFilters filter registration...
为了便于开发人员快速上手,Windows Embedded CE 6.0 提供了一系列开发工具和资源。 - **Platform Builder 6.0**:用于创建和定制操作系统映像,可以轻松地选择所需的组件来构建一个满足特定需求的操作系统。 - **...
学习Windows Embedded CE 6.0不仅需要理解其架构,还需要掌握配置、驱动程序开发和应用程序编程。这三个章节的学习资料将帮助初学者建立起对这一系统的全面认识,并为高级开发工作打下坚实基础。通过深入研究这些...
Windows CE 6.0(以下简称“CE 6.0”)是一款由微软开发的嵌入式操作系统,广泛应用于各种嵌入式设备。为了能够顺利进行CE 6.0的应用程序开发或操作系统定制等工作,首先需要搭建好相应的开发环境。本文将详细介绍...
Windows CE 6.0 BSP(板级支持包)是微软为嵌入式设备开发提供的一种核心操作系统,它允许硬件制造商定制适合其特定设备的操作系统。本文将深入探讨Windows CE 6.0 BSP的重要特性、开发过程以及压缩包中的资源。 ...
《Windows CE 6.0 开发者参考 SDK》是一份专为嵌入式系统开发者设计的重要资源,它包含了丰富的信息和工具,旨在帮助开发者在Windows CE 6.0平台上进行高效且灵活的应用程序开发。这一SDK是Windows CE操作系统的一个...
这个过程详细阐述了如何从零开始构建一个针对AT91SAM9261芯片的WINCE6.0应用程序,涵盖了从硬件层面的驱动支持到软件层面的应用开发,对于理解嵌入式系统的开发流程具有重要意义。开发者需要对WINCE6.0的架构、组件...
在Win CE 6.0版本中,微软提供了强大的模拟器工具,使得开发者和用户可以在个人计算机上模拟运行Win CE系统,进行应用开发、测试或体验。本文将详细探讨如何利用Win CE 6.0模拟器运行凯立特6.0版本的导航系统。 ...
配套的SDK(Software Development Kit)和源代码是学习和开发基于Windows CE 6.0应用程序的关键资源。 Windows CE 6.0 SDK是一个开发工具集合,它包含了一系列的库、头文件、文档以及编译和调试工具,这些工具使得...
2. **应用程序开发环境**:开发WinCE 6.0应用程序通常使用Visual Studio工具,配合Platform Builder进行系统定制和应用程序编译。开发者可以使用.NET Compact Framework、C++、C#或VB.NET等语言编写代码。 3. **...