Windows编程之Window介绍

最近在学习windows编程,本来想写个总结。可发现仅仅 3 天没碰代码,记忆就淡了。话说这个记忆力可能提前奔三了。所以依旧用复习的老办法,再看一遍官方文档,翻译,并且记录。

先来介绍下什么是window(窗口)

当我们谈到window时,所想到的可能是这样的。

这种窗口称为应用窗口或者主窗口。通常有一个带标题栏的边框,最大化最小化按钮,以及其他UI元素。这个边框称为Window的no-client区域。这是操作系统管理Window的地方。边框里面的区域称为client区域,这是我们的代码所管理的地方。

Windows编程中新鲜的是,UI controls类似于button,edit box,都被称为window。UI 控件和主窗口的区别是UI控件不能独立存在,他们在主窗口之内,以相对位置的形式存在。例如,拖拽主窗口,使得其变大或变小,UI控件也跟着改变,以使得窗口中的内容布局与未拖拽之前相同。主窗口与其内控件也可以通信交流。例如主窗口接收控件的点击事件。

当提到Window时,我们需要按照程序编码的逻辑来考虑:

  • 将控件放在合适的位置上
  • 该控件是否可见
  • 知道其如何绘制
  • 响应用户或者是操作系统发出事件

Parent Window和Owner Window

UI控件是主窗口的child window,主窗口为UI控件的parent window,父窗口提供坐标系统来安置子窗口,并能让他们显示。

另一种关系是主窗口和对话框窗口,当主窗口展示一个对话框窗口时,主窗口为Owner Window,对话框窗口为Owned Window,Owned Window总是显示在Owner Window之前。当主窗口最小化后,Owned Window也随之消失,主窗口destroy后,Owned Window也随着主窗口被destroy。

以上是Owner Window和Owned Window的示例。Dialog box是Owned Window,主窗口是其Owner Window。Dialog 又是其中两个按钮的父窗口。

Window Handles(起码学了5天了,依旧不知道如何翻译,忧伤~)

Windows是对象,既有代码又有数据,但他们不是C++类。程序通过使用一个叫handle的来引用window。handle实质上就是一个数字,或者称为编号更准确一点,操作系统用这样的编号来标识一个对象。可以理解为,操作系统中有一个表,其中包含了所有已经创建了的窗口,每个窗口都有一个标识用以操作系统检索他。这个标识就是handle。window handle的数据类型为HWND。

window handle的值由CreateWindow()和CreateWindowEx()这两个方法返回。

如果想在一个窗口上执行一个操作,通常需要调用一些函数,而这些函数大多都有一个HWND类型的参数。也就是说,当你想要操作一个窗口时,往往需要向操作函数提供其handle。例如,想要改变窗口在屏幕上的位置,需要调用MoveWindow函数。

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

第一个参数就是要移动的窗口的handle。其他的参数定义了窗口的新位置,还有是否要重绘窗口。

需要注意的是,handle不是指针,如果hwnd是一个包含handle的变量,用*hwnd来解除其与handle的关联是错误的。

屏幕和窗口坐标

坐标是以与设备无关的像素来测量的。根据任务的不同,你可以测量相对于屏幕的坐标,相对于一个窗口甚至是窗口边框、窗口client区域的坐标。例如,你可以使用屏幕坐标来安置一个窗口在屏幕上的位置,但你需要用client坐标来填充窗口内部。

在任何情况下,(0,0)都表示区域左上角的位置。

猜你喜欢

转载自blog.csdn.net/majalis_C/article/details/88921745