C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】
(一)Windows窗口(MDICLIENT)样式介绍
/* Windows窗口样式 */
WS_BORDER //带有边框的窗口
WS_CAPTION //带有标题栏的窗口
WS_CHILD //子窗口
WS_CLIPCHILDREN //当在父窗口内绘图时, 排除子窗口区域
WS_CLIPSIBLINGS //使窗口排除子窗口之间的相对区域
WS_DISABLED //窗口呈不可用状态
WS_DLGFRAME //带对话框边框样式,不带标题框
WS_GROUP //组样式
WS_ICONIC //初始化时呈最小化状态
WS_MAXIMIZE //初始时最大化窗口
WS_MAXIMIZEBOX //具有最大化按钮
WS_MINIMIZE //初始时最小化窗口
WS_MINIMIZEBOX //具有最小化按钮
WS_OVERLAPPED //具有一个标题栏和边框
WS_OVERLAPPEDWINDOW //这些样式的组合 WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX
WS_POPUP //弹出风格, 不能用于子窗口
WS_POPUPWINDOW //这些样式的组合 WS_BORDER, WS_POPUP, WS_SYSMENU
WS_SIZEBOX //可调节边框大小
WS_SYSMENU //标题框上带有窗口菜单(须指定WS_CAPTION样式)
WS_TABSTOP //可接受TAB键
WS_VISIBLE //初始时是可见的
(二)STATIC(静态文本)样式介绍
/* STATIC(静态控件)控件样式 */
SS_BITMAP //显示位图,控件自动适应位图尺寸
SS_CENTER //文本居中
SS_CENTERIMAGE //显示位图,位图自动裁剪至控件大小
SS_LEFT //文本左对齐
SS_RIGHT //文本右对齐
(三)EDIT(文本框)样式介绍
/* EDIT(文本框)控件样式 */
ES_AUTOHSCROLL //水平滚动条
ES_AUTOVSCROLL //垂直滚动条
ES_CENTER //居中
ES_LEFT //左对齐
ES_LOWERCASE //将所有字符强制转换为小写
ES_MULTILINE //多行显示
ES_NOHIDESEL //表示文本框未被选中时,也能获得输入焦点,通常用在首个文本框
ES_NUMBER //只允许输入数字
ES_PASSWORD //密码专用文本框,掩码通常为“*”
ES_READONLY //只读,不可编辑
ES_RIGHT //右对齐
ES_UPPERCASE //将所有字符强制转换为大写
ES_WANTRETURN //在多行编辑时,允许用户通过ENTER键插入回车符
WS_TABSTOP //允许用户通过Tap键选中文本框
(四)BUTTON(按钮)样式介绍
BS_ (全拼BUTTONSTYLE_),表示按钮样式,包括按钮、单选框与复选框。对比按钮样式和单选框与复选框样式,可以发现其样式前缀都是BS_,说明按钮、单选框与复选框都定义在“BUTTON”这个预定义结构体中。
(1)按钮样式
/* BUTTON(按钮)控件样式 */
BS_BOTTOM //按钮中的内容底部对齐
BS_CENTER //按钮中的内容水平居中
BS_DEFPUSHBUTTON //按钮,如果位于对话框中,可以通过ENTER键选中按钮
BS_LEFT //按钮中的内容左对齐
BS_NOTIFY //允许按钮向父窗口发送BN_KILLFOCUS和BN_SETFOCUS
BS_OWNERDRAW //创建自绘按钮
BS_PUSHBUTTON //按钮,单击后给父窗口发送WM_COMMAND消息
BS_RIGHT //按钮中的内容右对齐
BS_TOP //按钮中的内容顶部对齐
BS_VCENTER //按钮中的内容垂直居中
WS_TABSTOP //允许用户通过Tap键选中按钮
(2)单选框样式
/* BUTTON(单选框)控件样式 */
BS_AUTORADIOBUTTON //单选按钮,当选中时,清除同一组中其它单选按钮
BS_LEFT //单选按钮中的内容左对齐
BS_RADIOBUTTON //单选按钮,不可“选中”
BS_RIGHT //单选按钮中的内容右对齐
BS_RIGHTBUTTON //将单选按钮放置到右侧
WS_TABSTOP //允许用户通过Tap键选中单选按钮
(3)复选框样式
/* BUTTON(复选框)控件样式 */
BS_3STATE //3状态复选框,不可“选中”
BS_AUTO3STATE //3状态复选框,有“选中”、“选中但不可用”与“清除”
BS_AUTOCHECKBOX //复选框,有“选中”与“清除”2种状态
BS_CHECKBOX //复选框,不可“选中”
BS_LEFT //复选框中的内容左对齐
BS_PUSHLIKE //使复选框动作与按钮动作相似
BS_RIGHT //复选框中的内容右对齐
BS_RIGHTBUTTON //将复选框放置到右侧
WS_TABSTOP //允许用户通过Tap键选中复选框
(五)LISTBOX(列表框)样式介绍
/* LISTBOX(列表)控件样式 */
LBS_DISABLENOSCROLL //列表框中数据项未超出时,也显示垂直滚动条
LBS_EXTENDEDSEL //使用“SHIFT+单击”选择多个数据项
LBS_HASSTRINGS //列表框的数据项包含字符串,属于默认样式
LBS_MULTICOLUMN //多列列表框,通过LB_SETCOLUMNWIDTH设置列宽
LBS_MULTIPLESEL //通过单击或双击来选中或者取消选中数据项
LBS_NOINTEGRALHEIGHT //在创建列表框时,设置列表框的大小
LBS_NOREDRAW //列表框数据项发生改变时无法自动更新,但可以呼叫WS_SETREDRAW来更新
LBS_NOSEL //只能查看列表框数据项,无法选中
LBS_NOTIFY //当单击或双击列表框中的数据项时,通知父窗口
LBS_OWNERDRAWFIXED //用户设置列表框中的内容,数据项具有相同高度,可以通过WM_MEASUREITEM增加数据项,通过WM_DRAWITEM更新数据项
LBS_OWNERDRAWVARIABLE //与LBS_OWNERDRAWFIXED样式基本相对,但是其数据项高度是可变的
LBS_SORT //根据字母顺序给数据项排序
LBS_STANDARD //根据字母顺序给数据项排序,列表框具有边框,用户单击或双击时,父窗口接收输入消息
LBS_USETABSTOPS //允许用户通过Tap键来选择列表框中的数据项
LBS_TABSTOP //允许用户通过Tap键选中列表框
(六)COMBOBOX(组合框)样式介绍
/* COMBOBOX(组合框)控件样式 */
CBS_AUTOHSCROLL //显示水平滚动条
CBS_DISABLENOSCROLL //组合框中数据项未超出时,也显示垂直滚动条
CBS_DROPDOWN //只显示组合框,点击下拉按钮后显示组合列表框
CBS_DROPDOWNLIST //显示组合框中选中的数据项
CBS_HASSTRINGS //组合框的数据项包含字符串,属于默认样式
CBS_LOWERCASE //将所有字符强制转换为小写
CBS_NOINTEGERALHEIGHT //在创建组合框时,设置组合框的大小
CBS_OEMCONVERT //
CBS_SORT //根据字母顺序给数据项排序
CBS_UPPERCASE //将所有字符强制转换为大写
WS_TABSTOP //允许用户通过Tap键选中组合框
(七)Windows窗口与常用控件样式实例应用
#include <windows.h> #define IDC_BS_USERNAMES 1000
#define IDC_BS_USERTELE 1001
#define IDC_SS_USERNAME 1002
#define IDC_ES_USERNAME 1003
#define IDC_SS_PASSWORD 1004
#define IDC_ES_PASSWORD 1005
#define IDC_BS_LOGIN 1006 /*button结构声明与赋值*/
struct
{
/* data */
TCHAR * szStruct ; //控件所属的预定义结构体
TCHAR * szCaption ; //控件名称
int iStyle ; //控件样式
int IDC ; //控件ID
}
controls [] =
{
TEXT ("BUTTON"), TEXT ("USERNAME"), WS_GROUP | BS_AUTORADIOBUTTON, IDC_BS_USERNAMES,
TEXT ("BUTTON"), TEXT ("USERTELE"), BS_AUTORADIOBUTTON, IDC_BS_USERTELE,
TEXT ("STATIC"), TEXT ("USERNAME:"), BS_LEFT, IDC_SS_USERNAME,
TEXT ("EDIT"), TEXT (""), WS_BORDER | ES_LEFT | ES_AUTOHSCROLL, IDC_ES_USERNAME,
TEXT ("STATIC"), TEXT ("PASSWORD:"), SS_LEFT, IDC_SS_PASSWORD,
TEXT ("EDIT"), TEXT (""), WS_BORDER | ES_LEFT | ES_AUTOHSCROLL | ES_PASSWORD, IDC_ES_PASSWORD,
TEXT ("BUTTON"), TEXT ("LOGIN"), BS_DEFPUSHBUTTON, IDC_BS_LOGIN
}; #define NUM (sizeof controls / sizeof controls[0]) LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ) ;
int CreateControls ( HWND, HWND *, LPARAM ) ; int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT ( "Dome" ) ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.hInstance = hInstance ;
wndclass.cbClsExtra = ;
wndclass.cbWndExtra = ;
wndclass.hbrBackground = ( HBRUSH ) ( COLOR_BTNFACE + ) ;
wndclass.hIcon = LoadIcon ( NULL, IDI_APPLICATION ) ;
wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW ) ;
wndclass.lpszClassName = szAppName ;
wndclass.lpszMenuName = NULL ; if ( !RegisterClass ( &wndclass ) )
{
MessageBox ( NULL, TEXT ("无法注册窗口类!"), TEXT ("错误"), MB_OK | MB_ICONERROR ) ;
} hwnd = CreateWindow ( szAppName, TEXT ("LOGINFRAME"),
WS_TABSTOP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT,
, ,
NULL, NULL, hInstance, NULL ) ; ShowWindow ( hwnd, iCmdShow ) ;
UpdateWindow (hwnd) ; while ( GetMessage ( &msg, NULL, , ) )
{
TranslateMessage ( &msg ) ;
DispatchMessage ( &msg ) ;
} return msg.wParam ;
} LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
static HWND hControls [ NUM ] ;
static RECT rect ;
static int cxChar, cyChar ;
PAINTSTRUCT ps ;
HDC hdc ;
int i ; switch ( message )
{
case WM_CREATE:
CreateControls ( hwnd, hControls, lParam ) ; cxChar = LOWORD (GetDialogBaseUnits ()); //获得窗口中内定字体字元宽度(低字组)
cyChar = HIWORD (GetDialogBaseUnits ()); //获得窗口中内定字体字元高度(高字组)
return ;
case WM_SIZE:
GetClientRect ( hwnd, &rect ) ; MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ;
MoveWindow ( hControls[ controls[].IDC ], , , , cyChar * / , TRUE ) ; return ; case WM_DESTROY:
PostQuitMessage () ;
return ;
} return DefWindowProc ( hwnd, message, wParam, lParam ) ;
} int CreateControls ( HWND hwnd, HWND * hControls, LPARAM lParam )
{
int i ;
HINSTANCE hInst = ( ( LPCREATESTRUCT ) lParam ) -> hInstance ; for ( i=; i<NUM; i++ )
hControls [ controls[i].IDC ] = CreateWindow (
controls[i].szStruct,
controls[i].szCaption,
controls[i].iStyle | WS_CHILD | WS_VISIBLE,
, , , ,
hwnd, (HMENU) controls[i].IDC, hInst, NULL) ;
return ;
}
运行结果:
代码说明:
(1)结构体controls[ ]说明
/*结构体controls声明与赋值*/
struct
{
/* data */
TCHAR * szStruct ; //控件所属的预定义结构体
TCHAR * szCaption ; //控件名称
int iStyle ; //控件样式
int IDC ; //控件ID
}
controls [] =
{
TEXT ("BUTTON"), TEXT ("USERNAME"), WS_GROUP | BS_AUTORADIOBUTTON, IDC_BS_USERNAMES,
TEXT ("BUTTON"), TEXT ("USERTELE"), BS_AUTORADIOBUTTON, IDC_BS_USERTELE,
TEXT ("STATIC"), TEXT ("USERNAME:"), BS_LEFT, IDC_SS_USERNAME,
TEXT ("EDIT"), TEXT (""), WS_BORDER | ES_LEFT, IDC_ES_USERNAME,
TEXT ("STATIC"), TEXT ("PASSWORD:"), SS_LEFT, IDC_SS_PASSWORD,
TEXT ("EDIT"), TEXT (""), WS_BORDER | ES_LEFT | ES_PASSWORD, IDC_ES_PASSWORD,
TEXT ("BUTTON"), TEXT ("LOGIN"), BS_DEFPUSHBUTTON, IDC_BS_LOGIN
};
<1>在创建多个单选按钮时,同时,这些单选按钮有且只能选择1个,那么就需要在第1个单选按钮的样式中添加WS_GROUP样式,表示从这个单选按钮开始直到遇到下1个WS_GROUP样式,这些单选按钮都属于同一组,在选取其中一个单选按钮时,其它选中的单选按钮会自动清除;
<2>在创建的EDIT文本框的样式中添加ES_PASSWORD样式,表示该文本框是密码输入框,默认掩码为“*”;
<3>在主函数WinMain之前,声明结构体controls[ ]并赋值,利用for循环实现控件创建,能够有效减少重复代码,缩减代码行数;
<4>如果需要增加控件数目,则可以直接在结构体controls[ ]声明与赋值时添加,而不需要修改CreateControls函数;
(2)MoveWindow函数说明
BOOL MoveWindow( //窗口或控件尺寸调整函数
HWND hWnd, //要调整尺寸的控件句柄
int X, //控件左上角(X,Y)坐标的X值
int Y, //控件左上角(X,Y)坐标的Y值
int nWidth, //控件宽度
int nHeight, //控件高度
BOOL bRepaint //是否按照以上尺寸重绘控件,TRUE表示重绘
);
在设置控件位置与尺寸时,可以根据已经设计好的尺寸直接填写,也可以根据利用相对位置进行计算得到;
提示:在进行窗口设计时,也可以通过在资源文档中DIALOG对话方块来实现控件的创建,具体实现见明天的实例介绍。
C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】的更多相关文章
- Windows Phone开发(10):常用控件(上)
原文:Windows Phone开发(10):常用控件(上) Windows Phone的控件有几个来源,和传统的桌面应用程序开发或Web开发一样,有默认提供的控件和第三方开者发布的控件.一般而言,如 ...
- Windows Phone开发(11):常用控件(下)
原文:Windows Phone开发(11):常用控件(下) WP控件大部分都可以从Silverlight中继承过来,这里我也只能拿一部分作演示,对于其它控件如何使用,可以参考SDK相关说明以及Sil ...
- WPF 程序如何跨窗口/跨进程设置控件焦点
原文:WPF 程序如何跨窗口/跨进程设置控件焦点 WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点.但如果 WPF 窗口中嵌入了其他框架的 U ...
- Qt——常用控件样式
下面是我设计.调整.修改的Qt控件样式,仅供参考. Github地址:https://github.com/ikongziming/QtDemo/tree/master/StyleSheetDemo ...
- WPF 几种常用控件样式的总结
这里把wpf中几种常用样式总结一下,后期可以直接拷贝使用,呵呵 一.Button <ResourceDictionary xmlns="http://schemas.microsoft ...
- WPF常用控件样式( 内含一简单插件式开发示例)
最近离职,离职前面的一份外派然后又外包的工作,总觉得不妥,之后外派的办个入职手续都一再失约,干脆推了.恰逢清明时节,暴雨纷纷,于是打算先休息休息调整下状态,工作的事情还是谨慎点的好,免得影响心情.话说 ...
- easyui常用控件样式收藏
CSS类定义: div easyui-window window窗口样式 属性如下: 1) modal:是否生成模态窗口.tru ...
- WPF常用控件样式集锦
1.不规则形状按钮(通过更改path实现) <Style x:Key="ButtonStyleForPath" TargetType="{x:Type Button ...
- WPF黑色背景下常用控件样式
平时工作用 自己整理的 代码等找到合适的上传空间在进行同步
随机推荐
- ABAP git客户端
Jerry习惯把自己写的小程序放到自己的github上:https://github.com/i042416 对于写的ABAP程序,需要先把SAPGUI里的代码手动拷贝到本地,然后用git客户端pus ...
- MVC学习三:Razor视图引擎
1.Razor视图引擎,主要是把View的HTML代码编译到View视图类对象中
- python 实现远程上传文件夹
python2 upload.py "ip" "root" "password" "22" "Only Pro ...
- MVC个层次之间的联系
MVC顾名思义分为三层: M:Model层 Model层中 包含 DAO层和Javabean层: V:view 意为视图层也叫表示层,也可以直接理解为是JSP,用于前端显示: C: ‘控制层’ ...
- SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
转载请标明出处: https://www.fangzhipeng.com/springboot/2017/07/11/springboot1 本文出自方志朋的博客 简介 spring boot 它的设 ...
- TIDB2 —— 三篇文章了解 TiDB 技术内幕 - 说存储
原文地址:https://pingcap.com/blog-cn/tidb-internal-1/ 引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层, ...
- Struts2 第一讲 -- Struts2开发前奏
我们在学习Struts之前,先来复习一下Servlet,众所周知Servlet是JavaWeb的三大组件.我们发送一个请求,这个请求交给Servlet处理,Servlet将处理的结果返还给浏览器.每个 ...
- 设置Oracle数据库开机自启动
1.oracle 用户下 修改$ORACLE_HOME/bin/dbstart vim /home/oracle/database/product/12c/db_1/bin/dbstart 将OR ...
- (eclipse)统一文件编码和代码风格
前言 1>每个人的代码风格不一样,以至于代码各式各样,有习惯=号左右加空格的,有习惯不加的,此举有时还会影响svn提交代码 2>注释代码不一样,并且注释风格也不一样 统一文件编码和代码风格 ...
- WebGL学习笔记(3)
根据上篇笔记,在对3D对象可进行普通的控制后,以及学习了http://hiwebgl.com的教程第10章内容:世界模型的载入以及控制镜头移动,经过多次调试矩阵代码,已经可以实现在世界中旋转镜头/控制 ...