VC++ win32 application里如何建一个子窗口

VC++ win32 application里如何建一个子窗口,第1张

从WINDOWS系统的窗口机制上来说需要至少三步:

1、注册窗口类

2、利用CreateWindow/CreateWindowEx() API 创建窗口

3、实现窗口类中的定义的消息事件的回调函数。

如果是创建已经注册好的窗口(比如系统提供的一些窗口类型,编辑框、树形列表等)无须注册窗口类,直接通过CreateWindowEx() 进行创建,也无须处理窗口的事件消息。 如果需要自己处理这些消息,那么就是所谓的子类化或超类化的技术概念了。

如果是实现对话框,则比较简单。 对话框是一个特殊的窗口类型,需要现在资源中定义一个对话框模板,然后通过DialogBoxParam/DialogBoxIndirectParam()等API直接创建就可以了。

从实现上来说:

1、SDK 编程, 那么需要按需求手动编码,依据需要处理这几个步骤

2、基于ATL框架, 直接创建一个基于CWindowImpl<>模板类,继承实现一个类实例来处理消息链。 然后在需要的地方直接创建一个类实例,调用类实例的Create() 方法就成。

3、基于MFC框架,直接创建一个基于CWnd/CDialog类,继承实现类实例,来处理消息链。原理同ATL类似,无非是实现方式不大一样。

基于ATL/MFC框架都可以通过VS的向导进行创建,原理是一样的,无非就是省却大部分手动敲码的过程。

这里以一个实例来演示:

1、我们新建一个基于对话框的项目,项目名字为test。

2、在资源视图中添加两个对话框IDD_ENQIURENOTE_NEWDLG_INFO、IDD_ENQIURENOTE_NEWDLG_ENQIURE,并设计好对话框的界面。

在资源视图的子窗口通过右键,选择属性,把子窗口的style设置为child。

而picture控件的border属性默认是典型的对话框形式,如果想搞嵌入式的,可以改为none,即没有边框或者改为thin则是细边框.

3、在父窗口上用工具箱的PictureControl选择出一个区域,将来让子窗口显示在这个区域中,并将该控件命名为IDC_STATIC_ChildArea。

4、在资源视图中找到两个子窗口的对话框上,分别右键,选择添加类(Add Class),然后d出的对话框中对新增的类进行设置。

其中,在基类(Base Class)需要选择CDialogEx(老版本的VC是CDialog),然后输入新增类的名称(例如输入C_NewDlg1、C_NewDlg2),点击确认即可新增类。

这样,这个新建的类不仅有对应的头文件还有.cpp文件,还有一个与这个类对应的UI界面。

5、把需要将新增的类对应的头文件#include "C_NewDlg1.h"、 #include "C_NewDlg2.h"包含到它对应的父类的头文件(如testDlg.h )中。

同时在protected域中声明一个这个类的对象,比如:

C_NewDlg1 m_NewDlg_InfoC_NewDlg2 m_NewDlg_EnqiureCRect m_DialogChild

6、在父类的初始化函数OnInitDialog()中作如下的改动:

BOOL CtestDlg::OnInitDialog(){CDialog::OnInitDialog()//下面的m_NewDlg_Info和m_NewDlg_Enqiure是将要显示在同一个区域的不同的类,其中默认显示第一个。m_NewDlg_Info.Create(IDD_ENQIURENOTE_NEWDLG_INFO,this)m_NewDlg_Enqiure.Create(IDD_ENQIURENOTE_NEWDLG_ENQIURE,this)//读取嵌入位置,IDC_STATIC_ChildArea。GetDlgItem(IDC_STATIC_ChildArea)->GetWindowRect(&m_DialogChild)ScreenToClient(m_DialogChild)//以下的功能是显示m_NewDlg_Info的内容。为了显示m_NewDlg_Enqiure,可以在相应的处理函数中放入代码,并隐藏m_NewDialog_Info即可。m_NewDlg_Info.MoveWindow(m_DialogChild)m_NewDlg_Info.ShowWindow(SW_SHOW)GetDlgItem(IDC_STATIC_ChildArea)->ShowWindow(false)return TRUE}

这样就完成了MFC中添加子内容到某一个区域的功能。

第一个MDI主窗体

Form2 f = new Form2()

f.Owner = this  //设置第二个窗口的Owner为主窗体

f.ShowDialog()

第二个窗体

Form3 f = new Form3()

f.MDIParent = this.Owner  //设置第三个窗体成为MDI主窗体的子窗体

f.Show()

C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化 *** 作和C++的高运行效率,以其强大的 *** 作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。[1]

C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。

C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11809587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存