控件可以被理解为主窗口中的子窗口。这些子窗口的行为和主窗口一样,既能够接收键盘和鼠标等外部输入,也可以在自己的区域内进行输出,只是它们的所有活动都被限制在主窗口中。MiniGUI也支持子窗口,并且可以在子窗口中嵌套建立子窗口。
在Windows或XWindow中,系统会预先定义一些控件类。当利用某个控件类创建控件之后,所有属于这个控件类的控件均会具有相同的行为和显示。利用这些技术可以确保一致的人机操作界面,而对程序员来讲,可以像搭积木一样地组建图形用户界面。MiniGUI使用了控件类和控件的概念,并且可以方便地对已有控件进行重载,使得其有一些特殊效果。例如,需要建立一个只允许输入数字的编辑框时,就可以通过重载已有编辑框而实现,而不需要重新编写一个新的控件类。
在MiniGUI中,通常认为主窗口是一种比较特殊的窗口。因为主窗口代码的可重用性一般很低,如果按照通常的方式为每个主窗口注册一个窗口类,则会导致额外不必要的存储空间,所以并没有在主窗口提供窗口类支持。但主窗口中的所有子窗口,即控件,均支持窗口类(控件类)的概念。MiniGUI提供了常用的预定义控件类,包括按钮(单选钮、复选钮)、静态框、列表框、进度条、滑块和编辑框等。程序也可以定制自己的控件类,注册后再创建对应的实例。表6-3给出了MiniGUI预定义的控件类和对应类的名称。
表6-3 MiniGUI预定义的控件类和对应类的名称
在MiniGUI中,通过调用CreateWindow()函数可以建立某个控件类的一个实例。控件类既可以是表6-3中预定义的MiniGUI控件类,也可以是用户自定义的控件类。与CreateWindow()函数相关的几个函数的原型如下:
该函数建立一个子窗口,即控件。它指定了控件类(class_name)、控件标题(caption)、控件风格(style)、控件的标识符(id)以及窗口的初始位置和大小(x,y,w,h)。该函数同时指定了子窗口的父窗口(parent)。参数add_data用来向控件传递其特有数据的指针,该指针所指向的数据结构随控件类的不同而不同。
该函数的功能和CreateWindow()函数的功能一致,可以指定控件的扩展风格(dwExStyle)。
DestroyWindow()函数用来销毁用上述两个函数建立的控件或者子窗口。
在控件编程中所涉及到的内容除了控件的创建和销毁之外,一般还涉及到如下主题:
●控件具有自己的窗口风格定义,需要在创建控件时指定需要的风格。不同的风格将使得控件具有不同的表象和行为。
●获取或设置控件的状态和内容等。一般可通过向控件发送一些通用或者特有的消息来完成。另外,针对窗口的通用函数一般都适用于控件,如ShowWindow()、MoveWindow()、EnableWindow()和SetWindowFont()等。
●在控件内部发生某种事件时,会通过通知消息通知其父窗口。通知消息一般通过MSG_COMMAND消息发送,该消息的wParam参数由子窗口标识符和通知码组成。lParam参数含有发出通知消息的控件句柄。(www.xing528.com)
【例6-2】按钮的使用。
这是一个在MiniGUI中建立按钮的例子。
设计步骤
1)在Vim中创建一个新工程文件,命名为“example6_2.c”。
2)在“example6_2.c”中创建如下代码:
程序的运行结果如图6-5所示。
图6-5 按钮的使用
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。