Windows常见窗口样式和控件风格

王佰营 徐丽红

一、窗口样式

WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)
WS_CHILDWINDOW 子窗口(不能与WS_POPUP合用)
WS_MINIMIZE 创建窗口拥有最小化按钮
WS_MINIMIZEBOX 创建窗口拥有最小化按钮,须同时指定WS_SYSTEM样式
WS_VISIBLE 可见状态
WS_DISABLED 不可用状态
WS_CLIPSIBLINGS 使窗口排除子窗口之间的相对区域
WS_CLIPCHILDREN 当在父窗口内绘图时,排除子窗口区域
WS_MAXIMIZE 具有最大化按钮
WS_MAXIMIZEBOX 创建窗口拥有最大化按钮,须同时指定WS_SYSTEM样式
WS_CAPTION 有标题框和边框(和WS_TILED样式相同)
WS_BORDER 有单边框
WS_DLGFRAME 带对话框边框样式,不带标题框
WS_VSCROLL 有垂直滚动条
WS_HSCROLL 有水平滚动条
WS_SYSMENU 标题框上带有窗口菜单(须指定WS_CAPTION样式)
WS_THICKFRAME 有可调边框(与WS_SIZEBOX样式相同)
WS_TILED 与WS_OVERLAPPED风格相同
WS_TILEDWINDOW 与WWS_OVERLAPPEDWINDOW风格相同
WS_GROUP 组样式,每个组的第一个控件具有WS_TABSTOP样式
WS_TABSTOP 可接受TAB键
WS_OVERLAPPED 创建一个重叠式窗口,拥有标题栏和边框
WS_OVERLAPPEDWINDOW 即:WS_OVERLAPPED风格,WS_CAPTION风格,WS_SYSMENU风格
WS_THICKFRAME风格,WS_MINIMIZEBOX风格和WS_MAXIMIZEBOX
风格的组合

/* 窗口扩展样式参考列表:
WS_EX_DLGMODALFRAME - 带双层边框
WS_EX_NOPARENTNOTIFY - 创建/销毁时不通知父窗口
WS_EX_TOPMOST - 窗口置顶(停留在所有非最高层窗口的上面)
WS_EX_ACCEPTFILES - 可接受文件拖放
WS_EX_TRANSPARENT - =&H20 透明样式,在同属窗口已重画时该窗口才可重画
WS_EX_MDICHILD - MDI子窗口样式
WS_EX_TOOLWINDOW - 工具条窗口样式
WS_EX_WINDOWEDGE - 带凸起边缘的边框
WS_EX_CLIENTEDGE - 带阴影的边缘
WS_EX_CONTEXTHELP - 有上下文帮助样式,标题栏包含一个问号标志
WS_EX_RIGHT - 右对齐
WS_EX_RTLREADING - 窗口文本从右到左显示
WS_EX_LEFTSCROLLBAR - 垂直滚动条在窗口左边界
WS_EX_CONTROLPARENT - 允许用户使用TAB键在窗口的子窗口间搜索
WS_EX_STATICEDGE - 当窗口为不可用状态时创建一个三维边缘
WS_EX_APPWINDOW - 当窗口可见时将一个顶层窗口放置在任务栏上
WS_EX_OVERLAPPEDWINDOW - 带凸起边缘的边框,边缘有阴影
WS_EX_PALETTEWINDOW - 带立体边框,有工具条窗口样式,窗口在顶层
WS_EX_LAYERED =&H80000 分层或透明窗口,该样式可使用混合特效
WS_EX_NOINHERITLAYOUT - 子控件不继承窗体或控件的布局
WS_EX_LAYOUTRTL - 窗体或控件将具有从右向左的布局(因而会被镜像)
WS_EX_COMPOSITED - 用双缓冲从下到上绘制窗口的所有子孙(WinXP以上)
WS_EX_NOACTIVATE - 处于顶层但不激活

二、按钮风格

BS_AUTOCHECKBOX 同复选按钮类似,点击一下选中,再次点击取消。
BS_AUTORADIOBUTTON同单选按钮类似,点击后选中标志将从同组的其他单选按钮处移到当前选项。
BS_CHECKBOX 复选按钮
BS_DEFPUSHBUTTON 默认普通按钮,具有较黑的边框。
BS_GROUPBOX 分组框
BS_LEFTTEXT 同单选按钮或复选按钮配合使用,标题将显示在左侧。
BS_OWNERDRAW 可创建一个拥有者自绘按钮。
BS_PUSHBUTTON 普通下压按钮
BS_RADIOBUTTON 圆形单选按钮
BS_3STATE 三态复选按钮,三种状态即:选中,未选中,未定
BS_AUTOCHECKBOX 检查框,按钮的状态会自动改变
BS_AUTORADIOBUTTON圆形选择按钮,按钮的状态会自动改变
BS_AUTO3STATE 允许按钮有三种状态即:选中,未选中,未定
BS_CHECKBOX 检查框
BS_LEFTTEXT 左对齐文字

三、旋转按钮控件

UDS_HORZ 指定一个水平旋转按钮.若不指定该风格则创建一个垂直的旋转按钮.
UDS_WRAP 当旋转按钮增大到超过最大值时,自动重置为最小值,当减小至低于最小值时,自动重置为最大值.
UDS_ARROWKEYS 当用户按下向下或向上箭头键时,旋转按钮值递增或递减.
UDS_SETBUDDYINT 旋转按钮将自动更新伙伴控件中显示的数值,如果伙伴控件能接受输入,则可在伙伴控件中输入新的旋转按钮值.
UDS_NOTHOUSANDS 伙伴控件中显示的数值每隔三位没有千位分隔符.
UDS_AUTOBUDDY 自动使旋转按钮拥有一个伙伴控件.
UDS_ALIGNRIGHT 旋转按钮在伙伴控件的右侧.
UDS_ALIGNLEFT 旋转按钮在伙伴控件的左侧.

四、轨道条控件

TBS_HORZ 指定一个水平轨道条.该风格是默认的.
TBS_VERT 指定一个垂直轨道条.
TBS_AUTOTICKS 在范围设定后,自动为轨道条加上刻度.
TBS_NOTICKS 轨道条无刻度.
TBS_BOTTOM 在水平轨道条的底部显示刻度,可与TBS_TOP一起使用.
TBS_TOP 在水平轨道条的顶部显示刻度,可与TBS_BOTTOM一起使用.
TBS_RIGHT 在垂直轨道条的右侧显示刻度,可与TBS_LEFT一起使用.
TBS_LEFT 在垂直轨道条的左侧显示刻度,可与TBS_RIGHT一起使用.
TBS_BOTH 在轨道条的上下部或左右两侧都显示刻度.
TBS_ENABLESELRANGE 在轨道条中显示一个选择范围.

五、文本编辑框风格

ES_AUTOHSCROLL 当在行尾添加一个字符后自动向右滚动10个字符。
ES_AUTOVSCROLL 当输入回车后自动上滚一行。
ES_CENTER 字符居中显示。
ES_LEFT 字符左对齐。
ES_LOWERCASE 统一转化为小写字母。
ES_MULTILINE 允许多行显示。
ES_NOHIDESEL 当编辑失去焦点时隐藏对字符的选定,重新获得焦点后以反色显示选中内容。
ES_OEMCONVERT 将ANSI字符转化为OEM字符。
ES_PASSWORD 以星号显示字符,多用于回显密码。
ES_RIGHT 字符右对齐
ES_UPPERCASE 统一转化为大写字母。
ES_READONLY 设置字符为只读。
ES_WANTRETURN 接受回车键输入。

六、列表框风格

LBS_STANDARD 创建一个具有边界和垂直滚动条、当选择发生变化或条目被双击时能够通知父窗口的标准列表框。所有条目按字母排序。
LBS_SORT 按字母排序。
LBS_NOSEL 条目可视但不可选。
LBS_NOTIFY 当用户选择或双击一个串时,发出消息通知父窗口。
LBS_DISABLENOSCROLL 在条目不多时依然显示并不起作用的滚动条。
LBS_MULTIPLESEL 允许条目多选。
LBS_EXTENDEDSEL 可用SHIFT和鼠标或指定键组合来选择多个条目。
LBS_MULTICOLUMN 允许多列显示。
LBS_OWNERDRAWVARIABLE 创建一个拥有者画列表框,条目高度可以不同。
LBS_OWNERDRAWFIXED 创建一个具有相同条目高度的拥有者画列表框。
LBS_USETABSTOPS 允许使用TAB制表符。
LBS_NOREDRAW 当条目被增删后不自动更新列表显示。
LBS_HASSTRINGS 记忆了添加到列表中的字串。
LBS_WANTKEYBOARDINPUT 当有键按下时向父窗口发送WM_VKEYTOITEM或WM_CHARTOITEM消息。
LBS_NOINTEGRALHEIGHT 按程序设定尺寸创建列表框。

七、组合框风格

CBS_AUTOHSCROLL 当在行尾输入字符时自动将编辑框中的文字向右滚动。
CBS_DROPDOWN 同CBS_SIMPLE风格类似,只是只有在用户点击下拉图标时才会显示出下拉列表。
CBS_DROPDOWNLIST 同CBS_DROPDOWN类似,只是显示当前选项的编辑框为一静态框所代替。
CBS_HASSTRINGS 创建一个包含了由字串组成的项目的拥有者画组合框。
CBS_OEMCONVERT 将组合框中的ANSI字串转化为OEM字符。
CBS_OWNERDRAWFIXED 由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度相同。
CBS_OWNERDRAWVARIABLE 由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度可以不同。
CBS_SIMPLE 下拉列表始终显示。
CBS_SORT 自动对下拉列表中的项目进行排序。
CBS_DISABLENOSCROLL 当下拉列表显示内容过少时显示垂直滚动条。
CBS_NOINTEGRALHEIGHT在创建控件时以指定的大小来精确设定组合框尺寸。

八、树形视图控件

TVS_HASLINES 在父项与子项间连线以清楚地显示结构.
TVS_LINESATROOT 只在根部画线.
TVS_HASBUTTONS 显示带有"+"或"-"的小方框来表示某项能否被展开或已展开.
TVS_EDITLABELS 用户可以编辑表项的标题.
TVS_SHOWSELALWAYS 即使控件失去输入焦点,仍显示出项的选择状态.
TVS_DISABLEDRAGDROP 不支持拖动操作.

九、列表视图控件

LVS_ALIGNLEFT 当显示格式是大图标或小图标时,标题放在图标的左边.缺省情况下标题放在图标的下面.
LVS_ALIGNTOP 当显示格式是大图标或小图标时,标题放在图标的上边.
LVS_AUTOARRANGE 当显示格式是大图标或小图标时,自动排列控件中的表项.
LVS_EDITLABELS 用户可以修改标题.
LVS_ICON 指定大图标显示格式.
LVS_LIST 指定列表显示格式.
LVS_NOCOLUMNHEADER 在报告格式中不显示列的表头.
LVS_NOLABELWRAP 当显示格式是大图标时,使标题单行显示.缺省时是多行显示.
LVS_NOSCROLL 列表视图无滚动条.
LVS_NOSORTHEADER 报告列表视图的表头不能作为排序按钮使用.
LVS_OWNERDRAWFIXED 由控件的拥有者负责绘制表项.
LVS_REPORT 指定报告 显示格式.
LVS_SHAREIMAGELISTS 使列表视图共享图像序列.
LVS_SHOWSELALWAYS 即使控件失去输入焦点,仍显示出项的选择状态.
LVS_SINGLESEL 指定一个单选择列表视图.缺省时可以多项选择.
LVS_SMALLICON 指定小图标显示格式.
LVS_SORTASCENDING 按升序排列表项.
LVS_SORTDESCENDING 按降序排列表项.

十、静态文本框风格

SS_CENTER 字符居中显示。
SS_LEFT 字符左对齐。
SS_LEFTNOWORADWRAP 字符左对齐,可处理TAB制表符,不支持自动换行,超过末尾字符被裁剪。
SS_BLACKRECT 用窗口边框色填充的矩形。
SS_BLSCKFRAME 矩形边框,与窗口边框同色。
SS_GRAYRECT 用屏幕背景色填充的矩行。
SS_GRAYFRAME 矩形边框,使用屏幕背景色。
SS_WHITERECT 用窗口背景色填充的矩行。
SS_RIGHT 字符右对齐
SS_WHITEFRAME 矩形边框,使用窗口背景色。

/* 控件样式参考列表:
DS_ABSALIGN - 对话框的坐标为屏幕坐标(缺省为客户区坐标)
DS_SYSMODAL - 系统模式(仅支持16位程序),不能与DS_CONTROL同用
DS_LOCALEDIT - 在对话框内部为编辑框分配内存(仅支持16位程序)
DS_SETFONT - 可定制对话框字体
DS_MODALFRAME - 框架样式(不能与WS_CAPTION同用)
DS_NOIDLEMSG - 无空闲消息
DS_SETFOREGROUND - 使对话框在最前面显示
DS_3DLOOK - 四周有3维边框
DS_FIXEDSYS - 使用系统固定字体
DS_NOFAILCREATE - 忽略创建过程中的错误
DS_CONTROL - 控件模式,可作为其他对话框的子窗口
DS_CENTER - 在屏幕居中
DS_CENTERMOUSE - 在鼠标位置居中
DS_CONTEXTHELP - 有上下文帮助按钮

近日来工作中需要类似于QQ聊天窗口那样,窗口最小化缩到任务栏,点任务栏上的按钮可以复原窗口,由于窗口是子窗口,所以我们重载了窗口的CreateParams方法如下:

procedure TsubForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params); 
with Params do begin
ExStyle := ExStyle or WS_EX_APPWINDOW;
WndParent := GetDesktopWindow();
end;
end;

这样窗口就可以在任务栏上显示了。

但是又碰到一个问题,就是由于窗口样式被我设置成了bs_None,为无边框窗口,所以我点任务栏上的窗口按钮的时候,窗口无法复原和收缩回任务栏。

后来仔细看了一下窗口样式,想想,我们的目的无非是能够响应普通窗口一样的消息,于是,我将窗口设置成bs_Sizeable,然后就能够实现QQ聊天窗口的那 个效果,于是,俺就想在bs_Sizeable的样式下减去窗口的边框样式,这样来测试,于是俺先减去了一个WS_Caption标题样式,此时窗口可以实现QQ聊天窗口的那种样式了,但是多了一个边框,又仔细查看了一下Windows的窗口样式,发现一个样式WS_THICKFRAME,该样式是用来拖动窗口大小的时候的一个窗口边框,于是俺在多减去该样式

最后效果实现在窗口的Create事件中加上一个样式设置的就可

SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and (not WS_CAPTION) and (not WS_THICKFRAME));

CS_DBLCLKS
创建窗口调用RegisterClassEx函数时,WNDCLASSEX结构体的style中加入CS_DBLCLKS类风格。否则,windows不会向窗口发送双击事件。

参考:
http://zhidao.baidu.com/question/216852223.html
函数正常对话框编辑器与某个自定义控件的自定义控件的窗口类必须包括 CS_DBLCLKS 样式。   如果自定义控件不具有 CS_DBLCLKS 样式,双精度型-单击该控件在对话框编辑器中不会导致该自定义控件的函数显示其样式对话框。但是,控件的样式对话框是从编辑菜单上的样式命令仍可访问的。   在对话框编辑器子类每个控制它创建并处理 WM_LBUTTONDBLCLK 消息。在此邮件的响应中自定义控件要求以显示其样式对话框。   如果自定义控件的窗口类不具有 CS_DBLCLKS 样式,Windows 不会将任何 WM_LBUTTONDBLCLK 消息发送到该控件。如此一来,对话框编辑器不调用自定义控件的样式对话框框中函数并不会显示对话框。 
 serenesunny

CS_HREDRAW ,CS_VREDRAW  
http://zhidao.baidu.com/question/32047449.html
 wangruigaoshou
CS_HREDRAW当窗口水平方向的宽度变化时重绘整个窗口.CS_VREDRAW 当窗口垂直方向的宽度变化时重绘整个窗口.

CS_SAVEBITS
http://topic.csdn.net/u/20090728/22/90265d07-f30a-431a-b02a-cec93ea87883.html
将屏幕图像中被该(窗口)类窗口遮挡的部分保存为一个位图。当窗口移走时,系统用保存的位图来还原屏幕图像,包括被遮挡住的其他窗口。因此,如果位图占用的内存没被释放且其他屏幕操作未宣布存储图像无效,系统不发送WM_PAINT消息至那些被遮挡的窗口。
  此窗口风格对那些短暂显示并在其他屏幕活动发生前移除的小窗口(如菜单或对话框)很有用。这一风格增加了显示窗口所需的时间,因为系统必须先分配内存来存储位图。

CS_PARENTDC窗口类风格会设置子窗口的剪切矩形到父窗口上,这样子窗口就可以在父窗口上绘图了。

CS_OWNDC 窗口独有DC由窗口私有的,

CS_CLASSDC  窗口类DC由窗口类创建的所有窗口共同拥有。

CS_DROPSHADOW 这个风格可以让窗口产生阴影效果。阴影效果就是窗口边缘处的渐变阴影。要想有阴影效果,我们要先使用SPI_SETDROPSHADOW标志来启动阴影或者关闭阴影。

SystemParametersInfo(SPI_SETDROPSHADOW,0, (PVOID)TRUE, 0); // - 开启阴影效果 SystemParametersInfo(SPI_SETDROPSHADOW,0, (PVOID)FALSE, 0);// - 关闭阴影效果

这种效果主要用来凸显增强窗口的层次关系,在最上层的产生厚重的阴影,而不仅仅是窗口标题栏颜色变深。要想窗口有这种阴影效果,创建窗口的窗口类含有这个窗口类风格。窗口不能是子窗口。

其实,windows对于窗口类是分为三类的,包括系统窗口类/应用全局窗口类和应用局部窗口类。下面分别作出介绍

1.系统窗口类
    下表是可供所有进程使用的公用系统窗口类:

Button        按钮控件类
ComboBox  组合框控件类
Edit           编辑框控件类
ListBox      列表框控件类
MDIClient   MDI窗口类
ScrollBar   滚动条控件类
Static       静态控件类

系统窗口类是由系统创建和维护的,在任何一个线程请求了公用系统窗口类时,也就是用系统窗口类名来创建窗口时,这个时候,系统就创建了这个窗口类。然后再复制一份到请求的进程内存中。其他进程的线程再用这个窗口类创建,则直接复制给他就行了。

2.应用全局窗口类和应用局部窗口类
    全局窗口类,可以由exe的线程来创建,也可以由dll模块来创建。这个对于应用程序局部窗口类来说也是一样的。区别就在于创建这个窗口类时给窗口类指定的标志不一样罢了。这个标志就是CS_GLOBALCLASS。CS是Class Style(类风格)的缩写。GLOBALCLASS就是Global Class的大写,表示全局类的意思。合起来就表示全局类的类风格。只要将这个窗口类的风格标志加入到自己创建的窗口类中,就可以了。

windows常见窗口样式和控件风格以及类样式相关推荐

  1. Windows常见窗口样式和控件风格

    Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...

  2. C++ Windows窗口程序:子窗口控件之按钮类button

    Windows窗口程序设计中,按钮.文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的.其中按钮类button有多种类型和风格,常见的单选钮.复选钮.分组框也在此类中,见下表: 子窗口控 ...

  3. Windows Phone开发(16):样式和控件模板

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  4. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  5. wpf教程-metro扁平化样式UI控件库推荐:MahApps.Metro

    wpf虽然做出来的ui效果已经很好了,但是还是会有很多客户要求在完善.不如在win8出来后,很多用户就喜欢metro的样式. 今天给大家推荐metro扁平化样式UI控件库:MahApps.Metro ...

  6. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, ...

  7. 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider...

    重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 原文:重新想象 Windows 8 S ...

  8. qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形

    引言 创建一个基于QDialog的项目,自动生成ui文件,此时再添加新文件,创建一个基于QWidget的ui类,此类具有自定义标题栏,让该自定义类显示在窗口Dialog上,一开始具有红色的边框线,且四 ...

  9. 背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing

    背水一战 Windows 10 (34) - 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing 原文:背水一战 Windows 10 (34) ...

最新文章

  1. GitLab安装文档
  2. 第四节、逆矩阵与转置矩阵
  3. eclipse svn异常:RA layer request failed 的解决方案
  4. Metadata GC Threshold导致的full gc分析
  5. AIDL注意细节 简单Demo
  6. java 正则 懒惰_正则表达式懒惰模式
  7. 力扣- -231. 2的幂
  8. VS找不到MFC90d.dll错误
  9. 病毒传播数学建模matlab分析,数学建模MATLAB之分析法(一)
  10. 山东大学2022软件测试技术复习纲要
  11. Hbase+JAVAWeb实现超市仓库管理系统
  12. VUE移动端案例整合
  13. 单月销量破万台,FITURE治好了健身镜的“水土不服”?
  14. Rstudio图片保存方式
  15. python | 数组下表省略号的含义:array[...,:]==array[:,:,0]
  16. 安装VMware虚拟机后,网络适配器找不到VMnet8和VMnet1解决方法。
  17. Arduino使用水位传感器
  18. 远程控制软件向日葵等
  19. 请更换备份电池 pos机_UPS电池维护与保养
  20. 15V转5V稳压芯片选型表

热门文章

  1. 属性动画实现旋转入场效果
  2. Android 面试题集小程序
  3. 项目经理如何管理不同类型员工的扯皮攻略 1
  4. 防火墙基础--包过滤
  5. java中double数据保留有效位数
  6. angular 未登录状态拦截路由跳转
  7. macbook 重装系统服务器数据出错,苹果ARM版Mac重装系统出错?这有一份官方解决方案...
  8. 【netty篇】- 第0章netty网络编程必备知识[持续更新中]~
  9. DirectX11--HLSL语法入门
  10. 关于如何在终端设置有颜色的字体