从创建子窗口的过程来看,Createwindow函数为创建各类窗口提供了统一的函数,并且子窗口的类型唯一由第一个参数确定;从窗口的界面风格来看,这些子窗口都拥有窗口的许多性质。
设计含有子窗口的程序都从调用函数 CreateWindow开始,它一共有 11个参数,指定待创建的子窗口的类型、标题、风格等非常重要的性质。
CreateWindow函数的原型定义如下:
HWND CreateWindow(LPCTSTR lpClassName, // 指定子窗口的类名
LPCTSTR lPWindowName, // 指定窗口名称
DWORD dwSty1e, // 指定窗口风格
int x, // 指定窗口左上角顶点的水平坐标
int y, // 指定窗口左上角顶点的垂直坐标
int nWidth, // 指定窗口宽度
int nHeight, // 指定窗口高度
HWND hWndParent, //父窗口句柄,允许为NULL
HMENU hMenu, //窗口的菜单句柄或者是子窗口自己的标识符
HANDLE hInstance, //应用程序句柄,可以为NULL
LPVOID lpParam //指向lParam数值的指针);
当子窗口创建成功后,返回子窗口的句柄,否则返回NULL。在11个参数中 lpClassName、dwStyle和hMenu是三个最重要的参数。下面分别讲述它们的意义。 lpClassName指定子窗口的类名,它们的取值可以是如表所示的值。
子窗口类型
类名
描述
按钮 Button 创建按键按钮、单选按钮和三态按钮。
静态文本框 Static 显示用户不可直接编辑的文本,一般为标题。
滚动条 ScrollBar 滚动视图。
列表框 ListBox 显示具有多个子项的列表框。
编辑框 Edit 允许用户直接编辑文本。
组合框 ComboBox 与列表框类似,但多一个编辑区域。
多文档客户窗口 MDICLIENT 创建多文档应用程序的客户窗口。
dwStyle指定子窗口的风格。这里只讲述一般窗口的风格,表所列的子窗口的风格在后面内容中分别讲述。一般窗口的风格取值如表所示。
取值
效果
WS_BORDER 创建一个带有窄边框的了窗口。
WS_CAPTION 创建一个带有标题栏的子窗口,包含了WS_BORDER。
WS_CHILD 创建子窗口,必须指定,并且不能与WS_POPUP同时使用。
WS_CHILDWINDOW 同WS_CHILD。
WS_CLIPCHILDREN 适用于父窗口,不会被子窗口覆盖。
WS_DISABLED 创建一个禁活的窗口,不接收用户的输入信息。
WS_DLGFRAME 创建一个对话框风格的窗口,并且不能与WS_CAPTION同用。
WS_GROUP 允许用户通过Tab键在子窗口之间切换。
WS_HSCROLL 创建带水平滚动条的了窗口。
WS_ICONIC 创建最小化的子窗口。
WS_MAXIMIZE 创建最大化的子窗口。
WS_MAXIMIZEBOX
创建具有最大按钮的子窗口。
WS_MINIMIZE 同WS_ICONIC。
WS_MINIMIZEBOX 创建最小按钮的子窗口。
WS_SIZEBOX 创建可缩放边框的子窗口。
WS_SYSMENU 使子窗口有系统菜单。
WS_TABSTOP 指定用户第一次接下Tab键时输入焦点所属的子窗口。
WS_THICKFRAME 同WS_SIZEBOX。
WS_VISIBLE 创建初始化可视的窗口。
WS_VSCROLL 使窗口具有垂直滚动条。
参数hMenu指定菜单句柄或者子窗口的标识符。例如,已建立的菜单资源标识符为IDM_MENU, 窗口需要加载该菜单,则 hMenu参数可为 IDM_NENU子窗口的标识符可以是字符或者数字,但同一个应用程序中不同子窗口的 标识符必须相异,并且前面加上(hMENU)来满足参数类型兼容的要求。
应用程序运行后,首先创建主窗口,并发送WM_CREATE消息,由于在该消息的处理代码中含有创建子窗口的代码,于是就创建了子窗口。当子窗口的WS_VISIBLE风格指定后,子窗口就显示出来。
同前所讲的消息处理机制类似,子窗口的消息也主要依靠参数lParam和wParam来完成。
应用程序创建子窗口后,在主窗口的消息处理函数中一般使用SendMessase向子窗口发送消息。当用户对子窗口进行某种操作后,将向父窗口发送WM_COMMAND类型的通知消息。其中,lParam包含子窗口的句柄;wParam参数的高位字节为通知代码,低位子代表子窗口的标识符。
下面将分别讲述各种子窗口的特有风格以及消息循环,并结合实例介绍子窗口的应用。
一、Button子窗口
Button(按钮)是Windows子窗口的最常用的元素之一。例如安装程序中选择Next或者Back按钮。
1. 按钮类型
依据操作的类型可以把按钮分为按键按钮、单选按钮、复选按钮,另外还有存放单选按钮和复选按钮的按钮组合框(GroupBox)。
按键按钮一般执行某项功能,例如弹出新的窗口。在创建子窗口的函数中,如果需要创建按键按钮,则dwStyle参数指定为BS_PUSHBUTTON。
当某些选择相互排斥时,需要用到单选按钮,例如字体或者颜色。单选按钮的左端为一个圆圈,选中单选按钮,则显示实心,相反为空心圆。在同一个按钮组合框里的众多单选按钮中,用户只能选择一个。如果需要单选按钮,则dwStyle 参数必须指定为BS_RADIOBUTTON。
当某些选择可以相互并存时,需要用到复选按钮。复选按钮的风格与单选按钮类似,左端为圆圈或者小空心正方形。在同一个按钮组合框里的复选按钮可以同时被选中几个。如果需要创建,则dwStyle参数设置为BS_CHECKBOX。
在复选按钮中还有一类特殊的按钮,即三态按钮。顾名思义,三态按钮允许有三种状态:选中(Selected)、本选中(Unselected)、显灰(Grayed)。三态按钮在需要把单选按钮和复选按钮放在同一个组合框里时才有应用的价值,若要创建三态按钮,则把dwStyle参数设置为BS_3STATE。
按钮的风格取值如表所示。
按钮风格
描述
BS_AUTOCHECKBOX 创建一个自动选中的复选按钮,只有复选按钮在复选框里改设置值才起作用。
BS_AUTORADIOBUTTON 创建一个自动选中的单选按钮。
BS_AUTO3STATE 创建自动的三态按钮。
BS_CHECKBOX 创建一个复选按钮。
BS_DEFPUSHBUTTON 创建默认选中的按键按钮,当用户按下Enter键时,则表示选择该按键按钮。
BS_GROUPBOX 创建按钮组合框,当创建一组单选按钮或者复选按钮时,首先需要创建该按钮组合框。
BS_LEFTTEXT 创建单选按钮或复选按钮时,指定按钮名称的文本出现在左边。
BS_OWNERDRAW 创建自画按钮,必须先创建图形资源。
BS_PUSHBUTTON 创建按键按钮。
BS_RADIOBUTTON 创建单选按钮。
BS_3STATE 创建三态按钮
按钮有自己特殊的消息类型。当用户选择了按钮时,它将向父窗口发送WM_COMMAND消息,这些通知消息包含在wParam的高位字节中。按钮的通知代码如表所示。
通知代码
描述
BN_CLICKED 表示用户单击丁该按钮
BN_DOUBLECLICKED 表示用户双击了该按钮
BN_HILITE 表示按钮显亮
BN_UNHlLlTE 取消按钮显亮
BN_PAINT 绘制按钮
BN_DISABLE 表示按钮禁活
BN_PUSHED 用户选中该按钮并按下了Enter键
BN_SETFOCUS 输入焦点转移到该按钮
2.Button子窗口的创建和使用示例
#include <windows.h>
Struct //定义按钮的风格和显示文本
{
long style ;
char *text ;
}
button[] = //定义9类按钮
{
BS_PUSHBUTTON, "按键按钮",
BS_DEFPUSHBUTTON, "默认按键按钮",
BS_CHECKBOX, "检查按钮",
BS_AUTOCHECKBOX, "自动检查按钮",
BS_GROUPBOX, "复选框",
BS_3STATE, "检查按钮",
BS_AUTO3STATE, "三状态自动检查按钮",
BS_AUTORADIOBUTTON, "自动圆按钮",
BS_RADIOBUTTON, "圆按钮",
};
//取得按钮的数目
#define NUM (sizeof button/sizeof button[0])
//定义应用程序的名字
static char szAppName[] = "BtnLook" ;
//预先声明消息处理、窗口类申请和初始化函数
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
//函数:WinMain
//作用:主应用函数
int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
MSG msg ;
//申请窗口类
MyRegisterClass(hInstance);
//应用程序的初始化
if(!InitInstance(hInstance,iCmdShow))
{
return FALSE;
}
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
//函数:MyRegisterClass
//作用:注册窗口类
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof (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 ;
return RegisterClassEx (&wndclass) ;
}
//函数:InitInstance
//作用:初始化应用程序
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
HWND hwnd ;
hwnd = CreateWindow(szAppName, "按钮设计",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
if(!hwnd)return FALSE;
ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;
return TRUE;
}
//函数:WndProc
//作用:消息处理函数
LRESULT CALLBACK WndProc (HWND hwnd,UINT iMsg, WPARAM wParam,LPARAM lParam)
{//窗口上显示提示信息
没有合适的资源?快使用搜索试试~ 我知道了~
Delphi 应用 API 全代码创建 Combo 控件
共3个文件
txt:1个
exe:1个
dpr:1个
4星 · 超过85%的资源 需积分: 9 13 下载量 161 浏览量
2011-08-29
12:03:04
上传
评论
收藏 50KB RAR 举报
温馨提示
Delphi 应用 API 全代码创建 Combo 控件程序( 控件 Combobox), 完全 Windows API 源代码实现多页对话窗口,修改组合编辑窗口,内容能即时加入 Edit 内,编辑 Edit 窗口显示当前行列的。
资源推荐
资源详情
资源评论
收起资源包目录
Combobox_win.rar (3个子文件)
Combobox_win
Combobox.exe 41KB
创建子窗口--吉林大学edu.cn.txt 101KB
Combobox.dpr 10KB
共 3 条
- 1
资源评论
- ye4293332342018-11-19不错的视频 有用
- tangyunning2013-03-29不错啊,新手学习还是很好的!
- machcat2011-10-29Createwindow函数为创建各类窗口提供了统一的函数,设计含有子窗口的程序都从调用函数 CreateWindow开始
- 阿呆2011-11-03不错,新手学习还是很好的!
zensui2008
- 粉丝: 11
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功