【MFC】Windows样式

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;

执行结果
【MFC】Windows样式

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的大小。
【MFC】Windows样式

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);
	}
};

08. 附录

上一篇:MFC相关知识


下一篇:Vue -自定义指令&钩子函数