您的位置:首页 > 其它

Windows桌面应用程序(1-2-1-4th) 什么是窗口?

2017-12-26 13:10 253 查看
什么是窗口?

显然,Windows是Windows的核心。他们是如此重要,他们命名操作系统。但是,窗户是什么?当你想到一个窗口,你可能会想到这样的事情:



应用程序窗口的屏幕截图

这种类型的窗口被称为应用程序窗口或主窗口。它通常有一个标题栏框架,最小化最大化按钮,以及其他标准的UI元素。这个框架被称为窗口的非客户区,所谓的是因为操作系统管理窗口的那一部分。框架内的区域是客户区。这是您的程序管理窗口的一部分。

这是另一种类型的窗口:



控制窗口的屏幕截图

如果你不熟悉Windows编程,可能会让你感到意外的是,UI控件(如按钮和编辑框)本身就是一个窗口。UI控件和应用程序窗口之间的主要区别在于控件本身不存在。相反,控件相对于应用程序窗口定位。当你拖动应用程序窗口时,控件随着它移动,就像你期望的那样。另外,控件和应用程序窗口可以相互通信。(例如,应用程序窗口收到来自按钮的点击通知。)

因此,当你认为窗口时,不要简单地想应用程序窗口。相反,将一个窗口想象成一个编程构造:

占据屏幕的某个部分。

可能会在某个特定时刻显示或不显示。

知道如何绘制自己。

响应来自用户或操作系统的事件。

父窗口和所有者窗口

在UI控制的情况下,控制窗口被认为是应用程序窗口的子。应用程序窗口是控制窗口的父。父窗口提供用于定位子窗口的坐标系。拥有父窗口会影响窗口外观的各个方面;例如,一个子窗口被裁剪掉,这样子窗口的任何部分都不能出现在其父窗口的边界之外。

另一种关系是应用程序窗口和模式对话框窗口之间的关系。当应用程序显示模式对话框时,应用程序窗口是所有者窗口,对话框是拥有窗口。拥有的窗口总是出现在其拥有者窗口的前面。当所有者被最小化时,它被隐藏,并且与所有者同时被销毁。

下图显示了一个应用程序,它显示一个带有两个按钮的对话框:



使用对话框的应用程序的屏幕截图

应用程序窗口拥有对话窗口,对话窗口是两个按钮窗口的父窗口。下图显示了这些关系:



显示父母/孩子和所有者/拥有关系的插图

窗口把柄

Windows是对象——它们有代码和数据——但它们不是C++类。相反,程序通过使用称为句柄的值来引用窗口。手柄是不透明的类型。从本质上,讲,操作系统只是用来识别一个对象。您可以将Windows绘制为具有已经创建的所有窗口的大表格。它使用这个表来通过他们的手柄来查找窗口。(不管内部是如何工作的并不重要。)窗口句柄的数据类型是HWND,通常”aitch-wind”。窗口句柄由创建窗口的函数返回:CreateWindowCreateWindowEx

要在窗口上执行一个操作,通常会调用某个函数,它将HWND值作为参数。例如,要在屏幕上重新定位窗口,请调用MoveWindow函数:

BOOL MoveWindow(HWND hWnd,int X,int Y,int nWidth,int nHeight,BOOL bRepaint);


第一个参数是要移动的窗口的句柄。其他参数指定窗口的新位置以及是否应重新绘制窗口。

请记住,句柄不是指针。如果hwnd是一个包含句柄的变量,试图通过写* hwn
9713
d来解除引用句柄是一个错误。

屏幕和窗口坐标

坐标以与设备无关的像素来衡量。当我们讨论图形时,我们将更多地讨论设备无关像素的设备无关部分。

根据您的任务,您可以测量相对于屏幕的相对于窗口(包括框架)的坐标,或相对于窗口的客户区域的坐标。例如,您可以使用屏幕坐标在屏幕上放置一个窗口,但是您将使用客户端坐标在窗口内绘制。在每种情况下,原点(0,0)始终是该区域的左上角。



显示屏幕,窗口和客户端坐标的插图

下一个

WinMain:应用程序入口点

原文链接:What Is a Window?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: