子窗口控件

合集下载

Windows程序基础PPT教学课件

Windows程序基础PPT教学课件

2020/12/10
8
函数的各参数说明如下: ● hInstance和lpTemplateName—函数从hInstance参
数指定的模块中装入lpTemplateName参数指定的对话框 资源,然后显示对话框窗口。例子程序中的 lpTemplateName参数用的就是我们定义的DLG_MAIN。 ● hWndParent——对话框的父窗口,对话框关闭之前 将无法切换到父窗口所属的其他窗口中,例子中用对话 框做主窗口,所以父窗口句柄是NULL,在其他程序中使 用时,这个参数设置为主窗口的句柄。 ● lpDialogFunc——指定了对话框过程的地址,例子 程序中是_ProcDlgMain。 ● dwInitParam——当做WM_INITDIALOG消息的lParam 传给对话框过程,可以用它来做自定义的用途。
Windows
对话框
2020/12/10
1
对话框简介
• 程序往往需要和用户交互,如输入参数和输入文本等,习惯的 做法是通过选择菜单项弹出一个窗口,然后在这个窗口中完成 对话,这个窗口就是“对话框”,对话框中的按钮、文本框和 图标等称为“子窗口控件”。
• 对话框分两类:modal对话框和modeless对话框,翻译成中文 就是“模态的”和“非模态的”(也有的地方翻译成“模式的” 和“非模式的”),它们之间的区别在于是否允许用户在不同 窗口间进行切换:当显示非模态对话框时,用户可以随意在这 个对话框和其他窗口之间切换;而显示一个模态对话框时,用 户在关闭对话框之前不允许切换到同一程序的其他窗口中,但 可以切换到其他程序的窗口中;如果显示的是操作系统所属的 模态对话框(即“系统模态的”),则切换到其他任何程序的 窗口都是不允许的。
2020/12/10

VC++MFC 常用控件使用方法

VC++MFC 常用控件使用方法

VC++MFC 常用控件使用方法4.1 Button按钮窗口(控件)在MFC中使用CButton表示,CButton包含了三种样式的按钮,Push Button,Check Box,Radio Box。

所以在利用CButton对象生成按钮窗口时需要指明按钮的风格。

创建按钮:BOOL CButton::Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );其中lpszCaption是按钮上显示的文字,dwStyle为按钮风格,除了Windows风格可以使用外(如WS_CHILD|WS_VISUBLE|WS_BORDER)还有按钮专用的一些风格。

BS_AUTOCHECKBOX 检查框,按钮的状态会自动改变 Same as a check box, except thata check mark appears in the check box when the user selects the box; the checkmark disappears the next time the user selects the box.BS_AUTORADIOBUTTON 圆形选择按钮,按钮的状态会自动改变 Same as a radio button, except that when the user selects it, the button automatically highlights itself andremoves the selection from any other radio buttons with the same style in the same group.BS_AUTO3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a three-state check box, except that the box changes its state when the user selects it.BS_CHECKBOX 检查框 Creates a small square that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style).BS_DEFPUSHBUTTON 默认普通按钮 Creates a button that has a heavy black border.The user can select this button by pressing the ENTER key. This style enables theuser to quickly select the most likely option (the default option).BS_LEFTTEXT 左对齐文字 When combined with a radio-button or check-box style, the text appears on the left side of the radio button or check box.BS_OWNERDRAW 自绘按钮 Creates an owner-drawn button. The framework calls the DrawItem member function when a visual aspect of the button has changed. Thisstyle must be set when using the CBitmapButton class.BS_PUSHBUTTON 普通按钮 Creates a pushbutton that posts a WM_COMMAND message to the owner window when the user selects the button.BS_RADIOBUTTON 圆形选择按钮 Creates a small circle that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style). Radio buttons are usually used in groups of related but mutually exclusive choices.BS_3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a check box, except that the box can be dimmed as well as checked. The dimmed state typically is used toshow that a check box has been disabled.rect为窗口所占据的矩形区域,pParentWnd为父窗口指针,nID为该窗口的ID值。

mfc控件位置调整和坐标确定

mfc控件位置调整和坐标确定

mfc控件位置调整和坐标确定的方法(几个相关的函数)在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程。

位置的调整包括坐标、长度和宽度的变化,一般在窗口类的OnSize函数中实现。

控件位置的调整涉及的函数有:GetWindowRect()、ScreenToClient()、GetClientRect()、MoveWindow()或SetWindowPos(),功能意义如下:GetWindowRect():获得窗口在屏幕上的矩形坐标,调整控件位置时必须首先获得该屏幕坐标;ScreenToClient():转换屏幕坐标到客户区坐标,如果为子窗口,转换后坐标为相对于父窗口的坐标,若为独立窗口,转换后客户区左上坐标为(0,0);调整子窗口时这一步也是必须的;GetClientRect():获得窗口客户区坐标,左上坐标永远为(0,0);MoveWindow():调整控件到指定位置;SetWindowPos():调整控件的位置,该函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:控件位置调整涉及的参变量有:主窗口的cx、cy坐标、参考点坐标。

相对于调整位置时调用的函数,变量稍许复杂些。

cx、cy 坐标为主窗口的宽和高,有OnSize的参数给出,为窗口控件调整提供了变化的范围,所有的控件为了能够正常显示都不能超出这个范围。

其实在开发过程中较难和重要的是参考控件的选择,其位置相对于主窗口来说必须好确定。

常用的策略:1.选择主窗口上位置不随窗口大小变化的控件为参考;2.选择主窗口上控件的宽或者高固定的控件;3.选择与主窗口满足固定坐标关系的控件;4.选择主窗口上控件位置或者高宽容易确定的控件。

以上四种策略可在实际开发中作为参考!不管遇到什么的情况,一定要清楚:选择一个。

c#控件介绍(太详细了)

c#控件介绍(太详细了)

C#控件及常用设计整理1、窗体1、常用属性(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。

(2)WindowState属性:用来获取或设置窗体的窗口状态。

取值有三种:Normal (窗体正常显示)、Minimized(窗体以最小化形式显示)和Maximized(窗体以最大化形式显示)。

(3)StartPosition属性:用来获取或设置运行时窗体的起始位置。

(4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。

(5)Width属性:用来获取或设置窗体的宽度。

(6)Height属性:用来获取或设置窗体的高度。

(7)Left属性:用来获取或设置窗体的左边缘的x坐标(以像素为单位)。

(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。

(9)ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。

值为tru e时将显示控制框,值为false时不显示控制框。

(10)MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。

值为true时显示最大化按钮,值为false时不显示最大化按钮。

(11)MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。

值为true时显示最小化按钮,值为false时不显示最小化按钮。

(12)AcceptButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Enter 键时就相当于单击了窗体上的该按钮。

(13)CancelButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Esc 键时就相当于单击了窗体上的该按钮。

(14)Modal 属性:该属性用来设置窗体是否为有模式显示窗体。

如果有模式地显示该窗体,该属性值为true;否则为false。

当有模式地显示窗体时,只能对模式窗体上的对象进行输入。

第8章 Windows窗体

第8章 Windows窗体
表8-6列举出TextBox常用的属性, 表8-7列举出了TextBox的常用事件: 【实例8-2】对话框应用程序
8.6 单选按钮和复选框
单选按钮和复选框就是RadioButton和CheckBox控件,实际上RadioButton 和CheckBox控件与按钮控件有相同的基类,只是它们的外观和用法大不相同。 传统上,单选按钮显示为一个标签,左边是一个圆点,该点可以是选中或未选 中分在要给用户提供几个互斥选项时,就可以使用单选按钮。例如,询问用户的 性别。 把单选按钮组合在一起,给它们创建一个逻辑单元,此时必须使用GroupBox 控件。首先在窗林上拖放一个该组框,再把需要的RadioButton按钮放在组框的 边界之内,RadioButton就会知道如何改变自己的状态,以反映组框中惟一被选 中的选项。如果不把它们放在组框中,则在任意时刻,窗体不会只有一个 RadioButton被选中。 传统上,CheckBox显示为一个标签,左边是一个带有标记的小方框。在希望 用户可以选择一个或多个选项时,就应使用复选框。例如询问用户要使用的操作 系统(如Windows 2000,Windows XP, Linux等)
8.1 Windows窗体简介
删除窗体的方法非常简单,只需要在要删除的窗体名称上单击鼠标右键, 再弹出的快捷菜单中选择“删除”命令,即可将窗体删除,如图8-9所示。
8.1 Windows窗体简介
8.1.3 设置启动窗体属性 一个完整的Windows应用程序是由多个窗体组成的,比如一个图书管理系统,就 有登录窗口、主窗口、查询窗口等多个窗口。多个窗口的建立是向项目中添加多个窗 体,具体添加方法可以参照在8.1.2窗体的创建与删除。 当向项目中添加了多个窗体以后,如果要调试运行程序,必须要设置先运行的窗 体。这样就需要设置项目的第一个启动窗体。项目的启动窗体时在Program.cs文件中 设置,在Program.cs文件中改变Run方法的参数,即可实现设置启动窗体。 Program.cs中主要的代码片断如下: [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }

第5章PB的窗口菜单

第5章PB的窗口菜单

第五章窗口与菜单
5.2.4响应窗口(Response Window)
响应窗口经常被叫作对话框,它没有自 己的菜单,也不能最大化和最小化。 当响应窗口被打开时,不能把焦点转移 到同一个应用程序的其它窗口上去,只有 关闭响应窗口才能把输入焦点转移到其它 窗口上。 响应窗口通常用来强迫用户处理特定的 消息或事件。

第五章窗口与菜单

5.5.1理解菜单对象
菜单是由一系列的命令或选项构成的,是和当前活动 窗口的命令或者选择项相关的列表,菜单中的每个选 项被叫作菜单项。用户可以通过选择这些菜单来发出 命令,指示程序完成用户希望的任务。PB中除了子 窗口和响应窗口外,其它窗口都允许拥有菜单。 菜单的相关知识:访问键,快捷键,分割线,“省略 号”,“箭头”,“小勾” PB中工具条是菜单的一部分,通过菜单来指定工具 条,工具条上的工具按钮与菜单项一一对应,工具条 不能单独创建。只有MDI帧窗口的菜单对象才能显示 相应的工具条。

Close函数
及其中的控件的内存,通过单击窗口的关闭按钮来关 闭窗口时,PB不会释放这些内存。 语法:Close(windowname)
Close函数关闭一个窗口,并且释放分配给这个窗口以
第五章窗口与菜单
5.4.3窗口对象的事件 用户在窗口中的操作会触发一些事件的发生,正是 通过编写这些时间的处理脚本才可以实现用户和 应用程序之间的交互。 Open事件:窗口被打开,但还没有被显示时触 发,通常用来对窗口中控件进行初始化。 Active事件:在窗口变成活动状态前触发,这 时窗口中具有最小Tab次序值的控件可以获得 输入焦点。通常用来使能窗口中的菜单项。 CloseQuery事件:用户试图关闭窗口时触发, 我们可以通过这个事件来要求用户在执行了特 定的操作后才能关闭窗口。

窗体名词解释

窗体名词解释窗体是一种应用程序的用户界面,可以容纳子控件,如按钮、选择框、复选框、编辑框等,通常用于表达不同的文本信息或者来实现特定的操作。

窗体是用户与应用程序之间最常见的交互方式。

它们可能包括一个或多个空间,可以显示文本、图像、控件、菜单或其他内容。

【窗体名词解释】一、窗体:窗体是计算机图形用户界面(GUI)上用于容纳子控件的部件。

它是一种让用户可以更利于交互并且可以更易操作的方式,用户可以通过窗体来实现不同的文本信息的显示或特定的操作,从而达到交互的效果。

窗体可以包含一个或多个空间,可以显示文本、图像、控件、菜单或其他内容,这样的样子就让用户可以很容易的获取信息并且与系统交互,从而达到用户轻松操作的效果。

窗体也可以分为3个层次,分别是应用程序层、操作系统层和底层硬件层,这三层次之间是一个完整的系统,在窗体的上层应用程序层,是直接对用户可见的,用户可以通过窗体来操作系统。

二、子控件:子控件是位于窗体内部的组件,它们可以被用来显示文本、图像、按钮、复选框、编辑框等内容,是实现文本信息的显示及特定的操作的基础构件。

它们可以以窗体的任何部分作为起始点,或以同一窗体内的其它控件,作为子控件,以及将子控件放在窗体中,以划分空间来显示内容。

三、控件:控件是窗体中用于容纳子控件的部件,它可以用于表达特定的文字信息,以实现特定的操作。

控件可以分为两种:普通控件和容器控件。

普通控件一般用于显示图像、文本,以及实现特定的操作,如按钮、复选框、编辑框等;而容器控件则用于容纳其它控件,如窗体,可以放置多个控件,从而实现复杂的操作。

四、管理窗口:管理窗口是应用程序用于管理窗体的抽象概念。

管理窗口可以用于处理窗体的层次结构,如添加、更改或删除窗体,以及控制窗体的显示和隐藏设置等操作,这些操作可以使得窗体能够更好地协调它们之间的关系,从而达到更好的用户体验。

总结:窗体是一种应用程序的用户界面,其包含一个或多个空间,用于显示文本、图像、控件、菜单或其他内容,以此来实现用户与应用程序之间的交互方式。

Windows常用控件介绍

第5章 常用控件介绍
控件是Windows应用程序的图形界面的重 要组成部分,用户可以通过控件完成与应 用程序的交互。控件其实在MFC中是对数 据和方法的封装,当然控件就有自己的属 性和方法。在MFC中,所有的控件都是由 CWnd类派生来的,所以控件可以作为对 话框的子窗口而创建。本章以对话框程序 为基础介绍一些基本和常用的控件,学习 掌握Windows控件一般的使用方法和步骤。
2、列表框控件常用方法
为列表框关联一个控件类型的变量,可以
利用这个变量来调用列表框控件类CList
Box里面的方法。
列表框类 CListBox方法
描述
AddString()eteString() 从列表框中删除一个字符串
GetCurse()
返回选中字符串的索引
GetText()
5.1 Button按钮
• Button按钮是在Windows应用程序中最 常见的控件之一。如确定、取消、QQ 登录,Button按钮无处不在。这一节中 主要介绍Button按钮的添加,利用其控 件变量和消息响应函数来完成应用程 序的操作。
5.1.1 创建一个“打开”按钮
• 利用第4章所述方法,创建一个项目名 为Test1的对话框应用程序。为对话框 拖一个ID为IDC_BUTTON_OPEN, Caption为“打开”的Button按钮。同时删 除对话框中间的静态文本“TODO: 在这 里设置对话框控制”。
最后的程序要实现,初始状态“打开”按钮可用,“关闭”按钮 不可用。单击“打开”按钮弹出对话框提示“以打开”,之后 “打开”按钮不可用。单击“关闭”按钮,弹出对话框提示“已 关闭”,恢复初始状态。
1、定义一个BOOL型标记变量 因为程序要实现关闭打开轮流操作,所以需要一个变量标 记当前状态是打开还是关闭。我们选择BOOL变量来表示, TRUE为“打开”可用,FALSE为“关闭”可用。下面在对话框类 声明中定义一个名为m_bOpen的BOOL型变量,并在构造 函数中初始化为TRUE。代码如下:

flowlayoutpanel控件用法

《深入探讨FlowLayoutPanel控件的用法》一、引言在Windows应用程序开发中,UI界面的设计和布局是至关重要的一部分。

而对于那些需要在界面上显示多个控件,并且希望它们能够根据窗口大小自动调整位置的情况来说,FlowLayoutPanel控件就显得尤为重要。

本文将深入探讨FlowLayoutPanel控件的用法,带您了解如何正确地利用这一控件,实现灵活的控件布局。

二、概述1. 什么是FlowLayoutPanel控件?FlowLayoutPanel是Windows Forms中的一个控件,它允许容纳多个子控件,并且可以根据特定的布局方式(例如从左到右、从上到下)自动调整这些子控件的位置。

这使得FlowLayoutPanel成为了一个非常灵活的布局控件,无需手动计算每个控件的位置,就能够实现自适应的控件布局。

2. FlowLayoutPanel的特点和优势- 自动布局:无需手动计算控件位置,即可实现动态布局。

- 灵活性:可以根据不同的需求选择水平或垂直布局,并且可以设置控件之间的间距等属性。

- 响应式设计:适应窗口大小变化,自动调整控件位置,保证界面整洁美观。

三、基本用法1. 创建FlowLayoutPanel控件在Visual Studio中,打开Windows Forms应用程序,从工具箱中拖拽一个FlowLayoutPanel控件到窗体上即可。

2. 添加子控件通过代码或者可视化设计器,往FlowLayoutPanel中添加需要布局的子控件,可以包括按钮、文本框、标签等。

3. 设置布局方式通过FlowLayoutPanel的属性设置,选择合适的布局方式(如从左到右、从上到下),以及调整间距、控件大小等。

四、进阶用法1. 控件的动态添加和删除利用C#代码,在运行时动态添加或删除FlowLayoutPanel中的子控件,实现动态布局的效果。

2. 子控件的自适应大小和位置在代码中编写逻辑,实现子控件的自适应大小和位置,以适应不同的分辨率和窗口大小。

在winform下实现左右布局多窗口界面的方法

在winform下实现左右布局多窗⼝界⾯的⽅法在web页⾯上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界⾯,⽽在winform、WPF中实现其实也很容易,我这⾥就分享⼀个:在winform 下实现左右布局多窗⼝界⾯。

我这⾥说的多窗⼝是指⼀个⽗窗⼝包含多个⼦窗⼝,在winform中实现这种效果很简单,即将某个窗⼝的IsMdiContainer设为true,然后将其它⼦窗⼝的MdiParent设为其⽗窗⼝对象即可,这样就完成了⼀个多窗⼝界⾯,效果如下:点击NEW新打开⼀个窗⼝,其效果如下:请看我上图红⾊标注的地⽅,Windows菜单项下⾯显⽰的是当前所有已打开的⼦窗⼝,点击某个菜单,即可快速切换到其它窗⼝,若关闭某个⼦窗⼝,与之相对应的菜单项也会⾃动被移除,实现这个功能也很简单,只需要将菜单的MdiWindowListItem属性设为需要显⽰活动窗⼝列表的菜单项即可,如:this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem;上述⽰例完整的实现代码如下:public partial class FormMdi : Form{private int formCount = 0;public FormMdi(){this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem;}private void newToolStripMenuItem_Click(object sender, EventArgs e){ShowChildForm<FormChild>();}private void ShowChildForm<TForm>() where TForm : Form, new(){TForm childForm = new TForm(); = "frm" + Guid.NewGuid().ToString("N");childForm.Text = string.Format("Child Form -{0}", ++formCount);childForm.MdiParent = this;childForm.WindowState = FormWindowState.Maximized;childForm.Show();}}相信实现上⾯这部份功能⼀般⽤过winform的⼈都会操作,我这⾥就当是复习顺便给新⼿⼀个参考,同时也为下⾯要实现的左右布局功能做⼀个铺垫吧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

子窗口控件 壹佰软件开发小组 整理编译

回忆第七章的CHECKER程序。这些程序显示了矩形网格。当您在一个矩形中按下鼠标按键时,该程序就画一个x;如果您再按一次鼠标按键,那么x就消失。虽然这个程序的CHECKER1和CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口。这些矩形由一个叫做ChildProc的独立窗口消息处理程序维护。

如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其父窗口消息处理程序(WndProc)发送消息的手段。通过呼叫GetParent,子窗口消息处理程序能确定其父窗口的窗口句柄:

hwndParent = GetParent (hwnd) ;

其中,hwnd是子窗口的窗口句柄。它可以向其父窗口消息处理程序发送消息: SendMessage (hwndParent, message, wParam, lParam) ;

那么message应该设定为什么呢?您可以随意地设定,数值大小可以与WM_USER相同或更大,这些数字代表和预先定义的WM_ 消息不冲突的消息。也许对这个消息,子窗口可以将wParam设定为它的子窗口ID。如果在该子窗口单击,那么lParam可以被设为1;如果未在该子窗口上单击,那么lParam将被设为0。这是处理方式的一种选择。

事实上,这是在建立一个「子窗口控件」。当子窗口的状态改变时,子窗口处理鼠标和键盘消息并通知父窗口。使用这种方法,子窗口就变成了其父窗口的高阶输入设备。它将与自己在屏幕上的图形外观相应的处理,对使用者输入的响应以及在发生重要的输入事件时通知另一个窗口的方法给封装起来。

虽然您可以建立自己的子窗口控件,但是也可以利用一些预先定义的窗口类别(和窗口消息处理程序)来建立标准的子窗口控件,您一定在别的Windows程序中看到过这些控件。这些控件采用的形式有:按钮、复选框、编辑方块、清单方块、下拉式清单方块、字符串卷标和卷动列。例如,如果想在您的电子表格程序的某个角落放置一个标有「Recalculate」的按钮,那么您可以通过呼叫CreateWindow来建立这个按钮。您不必担心鼠标操作、按钮显示操作或按下该按钮时的自动闪烁操作,这些是由Windows内部完成的。您所要做的只是拦截WM_COMMAND消息-当按钮被按下时,它通过这一消息通知您的窗口消息处理程序。真的这样简单吗?是的,一点也没错。

子窗口控件在对话框中最常用。在第十一章中您将会看到,子窗口控件的位置和尺寸,是在范例程序的资源描述叙述中的对话框模板里定义的。但是,您也可以使用预先定义的,在普通窗口显示区域里的子窗口控件。您可以呼叫一次CreateWindow来建立一个子窗口,并通过呼叫MoveWindow来调整子窗口的位置和尺寸。父窗口消息处理程序向子窗口控件发送消息,子窗口控件向父窗口消息处理程序传回消息。

在建立普通窗口时,首先定义窗口类别,并使用RegisterClass将其注册到Windows中,然后用CreateWindow命令依据该窗口类别建立一个普通窗口,从第三章开始,我们就是这么做的。但是,当您使用预先定义的某个控件时,不必为子窗口注册窗口类别,窗口类别已经存在于Windows之中,并且有一个预先定义的名字。您只需在CreateWindow中把它们用作窗口类别参数。CreateWindow中的窗口样式参数准确地定义了子窗口控件的外形和功能。Windows内建了处理发送给依据这些窗口类别建立的子窗口消息的窗口消息处理程序。

直接在您的窗口上使用子窗口控件完成某些任务,这些任务的层次低于在对话框中使用子窗口控件所要求的层次。这里,对话框管理器在您的程序和控件之间增加一个隔离层。值得一提的,您可能会发现在您的窗口上建立的子窗口控件,没有利用Tab键或方向键将输入焦点从一个控件移动到另一个控件的内部功能。子窗口控件能够获得输入焦点,但是获得后,它将不能把输入焦点传回给父窗口。这就是本章要解决的问题。

Windows程序设计的文件在两个地方讨论了子窗口控件:首先是,简单的常用控件,我们可以在/Platform SDK/User Interface Services/Controls的文件所描述的无数对话框中看到。这些子窗口包括按钮(其中包括复选框的单选按钮)、静态控件(例如文字卷标)、编辑方块(您可以在此编辑一行或多行文字)、卷动列、清单方块和下拉式清单方块。除下拉式清单方块以外,在Windows 1.0中就包括了这些控件。这部分的Windows文件还包括Rich Text文字编辑控件,它与编辑方块相似,但还允许编辑不同字体与样式的格式化文字,以及桌面应用工具列。

相对于「常用控件」,还有一些神秘的特殊控件。这些控件在/Platform SDK/User Interface Services/Shell and Common Controls/Common Controls描述。本章不讨论常用控件,但它们将出现在本书的其它部分。在这部分的Windows文件中,很容易找到您想从别的Windows应用程序中应用到您自己的应用程序里头那些部分信息。

按钮类别 下面我们将通过叫做BTNLOOK(「button look」)的程序来开始介绍按钮窗口类别,如程序9-1所示。BTNLOOK建立10个子窗口按钮控件,每个控件对应一个标准的按钮样式,因此共有10种标准按钮样式。

程序9-1 BTNLOOK

BTNLOOK.C

/*--------------------------------------------------------------------------

BTNLOOK.C -- Button Look Program

(c) Charles Petzold, 1998

---------------------------------------------------------------------------*/

#include

struct

{

int iStyle ;

TCHAR * szText ;

}

button[] =

{

BS_PUSHBUTTON, TEXT ("PUSHBUTTON"),

BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"),

BS_CHECKBOX, TEXT ("CHECKBOX"),

BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"),

BS_RADIOBUTTON, TEXT ("RADIOBUTTON"),

BS_3STATE, TEXT ("3STATE"),

BS_AUTO3STATE, TEXT ("AUTO3STATE"),

BS_GROUPBOX, TEXT ("GROUPBOX"),

BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),

BS_OWNERDRAW, TEXT ("OWNERDRAW")

} ;

#define NUM (sizeof button / sizeof button[0])

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("BtnLook") ;

HWND hwnd ;

MSG msg ;

WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow (szAppName, TEXT ("Button Look"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

{

相关文档
最新文档