00. 目录
文章目录
01. 概述
Windows样式是控制窗口外观,边框,最小化或最大化状态或其他调整大小等功能的特征。
02. Windows常用样式
常见样式
WS_BORDER
创建一个带边框的窗口.
WS_CAPTION
创建一个具有标题的窗口bar(暗示WS_BORDER样式).不能与WS_DLGFRAME样式一起使用.
WS_CHILD
创建子窗口.不能与WS_POPUP样式一起使用.
WS_CHILDWINDOW
与WS_CHILD风格相同.
WS_CLIPCHILDREN
在父窗口中绘制时,排除子窗口占用的区域.在创建父窗口时使用.
WS_CLIPSIBLINGS
相对于彼此剪辑子窗口;也就是说,当特定子窗口接收到绘制消息时,WS_CLIPSIBLINGS样式会剪切要更新的子窗口区域之外的所有其他重叠子窗口. (如果未给出WS_CLIPSIBLINGS且子窗口重叠,则在子窗口的客户区域内绘制时,可以在相邻子窗口的客户区域内绘制.)仅用于WS_CHILD样式.
WS_DISABLED
创建一个最初禁用的窗口.
WS_DLGFRAME
创建一个带双边框的窗口但没有标题.
WS_GROUP
指定一组控件的第一个控件,用户可以使用箭头键从一个控件移动到另一个控件.在第一个控件之后使用WS_GROUP样式定义的所有控件都属于同一个组.具有WS_GROUP样式的下一个控件将启动下一个组(即,一个组在下一个组开始的地方结束).
WS_HSCROLL
创建一个水平的窗口滚动条.
WS_ICONIC
创建一个最初最小化的窗口.与WS_MINIMIZE样式相同.
WS_MAXIMIZE
创建一个最大尺寸的窗口.
WS_MAXIMIZEBOX
创建一个具有最大化按钮的窗口.
WS_MINIMIZE
创建一个最初最小化的窗口.仅用于WS_OVERLAPPED样式.
WS_MINIMIZEBOX
创建一个具有最小化按钮的窗口.
WS_OVERLAPPED
创建重叠窗口.重叠窗口通常有标题和边框.
WS_OVERLAPPED窗口
使用WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU,WS_THICKFRAME,WS_MINIMIZEBOX和WS_MAXIMIZEBOX样式创建重叠窗口.
WS_POPUP
创建一个弹出窗口.不能与WS_CHILD样式一起使用.
WS_POPUPWINDOW
创建一个包含WS_BORDER,WS_POPUP和WS_SYSMENU样式的弹出窗口. WS_CAPTION样式必须与WS_POPUPWINDOW样式组合才能使Control菜单可见.
WS_SIZEBOX
创建一个具有大小调整边框的窗口.与WS_THICKFRAME样式相同.
WS_SYSMENU
创建一个窗口,其标题栏中有一个控制菜单框.仅用于带标题栏的窗口.
WS_TABSTOP
指定用户可以使用TAB键移动的任意数量的控件之一. TAB键将用户移动到WS_TABSTOP样式指定的下一个控件.
WS_THICKFRAME
创建一个带有粗框的窗口,可用于调整窗口大小.
WS_TILED
创建重叠窗口.重叠窗口具有标题栏和边框.与WS_OVERLAPPED样式相同.
WS_TILEDWINDOW
使用WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU,WS_THICKFRAME,WS_MINIMIZEBOX和WS_MAXIMIZEBOX样式创建重叠窗口.与WS_OVERLAPPEDWINDOW样式相同.
WS_VISIBLE
创建一个最初可见的窗口.
WS_VSCROLL
创建一个具有垂直滚动条的窗口.
温馨提示
更多Windows样式请参考MSDN相关文档
03. Windows样式示例
程序示例一:
#include "afxwin.h"
class MyFrame:public CFrameWnd
{
public:
MyFrame()
{
//WS_VISIBLE 创建一个最初可见的窗口
//WS_OVERLAPPED 创建重叠窗口.重叠窗口通常有标题和边框
Create(NULL, TEXT("MFC TEST"), WS_VISIBLE | WS_OVERLAPPED);
}
};
class Test:public CWinApp
{
BOOL InitInstance()
{
MyFrame *frame = new MyFrame();
m_pMainWnd = frame;
frame->ShowWindow(SW_NORMAL);
frame->UpdateWindow();
return TRUE;
}
};
Test test;
执行结果
04. Windows位置
查找显示在监视器,计算机使用类似于笛卡儿的坐标系,但原点位于屏幕的左上角.使用此坐标系,任何点都可以通过它与水平和垂直轴屏幕左上角的距离来定位.
Win32库提供了一个名为POINT的结构,定义如下 :
typedef struct tagPOINT {
LONG x;
LONG y;
} POINT;
CPoint();
CPoint(int X, int Y);
- 'x’成员变量是从屏幕左边框开始的距离点.
- 'y’变量表示从屏幕顶部边框到该点的距离.
- 除了Win32的POINT结构外,Microsoft基础类(MFC)库还提供了CPoint类.
- 这提供了相同的功能作为POINT结构.作为C ++类,它添加了定位点所需的更多功能.它提供了两个构造函数.
05. Windows大小
当一个点用于在屏幕上定位一个对象时,每个窗口都有一个大小.大小提供了与对象相关的两个度量.
- 对象的宽度.
- 对象的高度.
Win32库使用SIZE结构定义如下 :
typedef struct tagSIZE {
int cx;
int cy;
} SIZE;
除了Win32的SIZE结构外,MFC还提供了CSize类.此类具有与SIZE相同的功能,但添加了C ++类的功能.它提供了五个构造函数,允许您以您选择的任何方式创建一个大小变量.
CSize();
CSize(int initCX, int initCY);
CSize(SIZE initSize);
CSize(POINT initPt);
CSize(DWORD dwSize);
06. Windows尺寸
当窗口显示时,可以通过其屏幕上显示器边框的位置来识别屏幕。窗口也可以通过其宽度和高度来识别。这些特性由**Create()**方法的rect参数指定或控制。此参数是可以通过Win32 RECT结构创建的矩形。
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
除了Win32的RECT结构之外,MFC还提供了具有以下构造函数的CRect类:
CRect();
CRect(int l, int t, int r, int b);
CRect(const RECT& srcRect);
CRect(LPCRECT lpSrcRect);
CRect(POINT point, SIZE size);
CRect(POINT topLeft, POINT bottomRight);
程序示例
class MyFrame:public CFrameWnd
{
public:
MyFrame()
{
Create(NULL, TEXT("MFC TEST"), WS_SYSMENU, CRect(90, 90, 480, 480));
}
};
将在前两个参数中的CRect构造函数中指定的屏幕左上角创建以下窗口。最后两个参数是Window的大小。
07. Windows父窗口
在现实世界中,许多应用程序都是由不同的Windows组成的.当应用程序使用各种Windows时,大多数对象都依赖于特定的对象.它可能是您创建的第一个窗口或您指定的另一个窗口.这样的窗口被称为父窗口.所有其他窗口都直接或间接依赖它.
- 如果您创建的窗口依赖于另一个窗口,则可以指定它有父级.
- 这是通过CFrameWnd :: Create()方法的pParentWnd参数完成的.
- 如果Window没有父项,则传递带有NULL值的参数.
让我们看一个只有一个Window的例子,并且没有可用的父窗口,所以我们将传递带有NULL值的参数,如下面的代码所示 :
程序示例
class MyFrame:public CFrameWnd
{
public:
MyFrame()
{
//父窗口为NULL
Create(NULL, TEXT("MFC TEST"), WS_SYSMENU, CRect(90, 90, 480, 480), NULL);
}
};