最近在学习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)都表示区域左上角的位置。

Windows编程之Window介绍相关推荐

  1. windows编程之GDI绘图 -- 实验3-1

    windows编程之GDI绘图 – 实验3-1 文章目录 windows编程之GDI绘图 -- 实验3-1 @[toc] 1.实验名称 2.实验目的 3.实验的步骤和方法 4.代码实现 5.思考题 6 ...

  2. Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数

    一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI Create ...

  3. windows编程之TextOut与DrawText -- 文本输出实验

    文章目录 windows编程之TextOut与DrawText -- 文本输出实验 实验名称 实验目的 实验要求 实验源码 思考题 windows编程之TextOut与DrawText – 文本输出实 ...

  4. windows编程之TextOut与DrawText

    文章目录 windows编程之TextOut与DrawText TextOut 是什么函数 TextOut 函数原型 DrawText 是什么函数 DrawText 函数原型 TextOut与Draw ...

  5. 【转】Windows编程之hdc和hwnd的区别

    在windows编程中类型名前面加H的基本是句柄 常用句柄 : HBITMAP 保存位图信息的内存域的句柄 HBRUSH 画刷句柄 HCTR 子窗口控件句柄 HCURSOR 鼠标光标句柄 HDC 设备 ...

  6. Windows编程之MDI

    MDI 创建 1 CilentWindow 1.1 CLIENTCREATESTRUCT typedefstruct tagCLIENTCREATESTRUCT { HANDLE hWindowMen ...

  7. windows编程之GDI基础--设备内容(二)

    取得设备内容句柄: Windows提供了几种取得设备内容句柄的方法.如果在处理一个消息时取得了设备内容句柄,应该在退出窗口函数之前释放它(或者删除它).一旦释放了句柄,它就不再有效了. 在WM_PAI ...

  8. Windows编程之COM组件

    什么是COM接口? COM即Component Object Model,到底是用来干啥的呢?如果你了解Java或者C#,你应该会很了解interface.在C++中,最接近接口概念的应该是虚类了,所 ...

  9. windows编程之Windows Shell 编程

    这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 由ccc编译 序言: 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用wi ...

最新文章

  1. 图解NumPy:常用函数的内在机制
  2. 小程序中,iOS设备获取蓝牙设备的Mac地址
  3. Moose File System分布文件系统测试
  4. linux7 设置dns,RHEL7.0 系列-设置IP地址、网关和DNS
  5. golang获取结构体中的tag_26. Go 语言中结构体的 Tag 用法
  6. JavaScript 浏览器对象BOM
  7. 测试用例又双叒叕失败了,NLP帮你
  8. k8s挂载目录_gitlab-runner在Kubernetes环境下挂载宿主机目录的方法
  9. java oracle数据备份_Java后台备份oracle数据库脚本
  10. Angularjs-项目搭建
  11. NOIP2016提高A组 B题 【HDU3072】【JZOJ4686】通讯
  12. html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
  13. mysql backup 使用_MySQLBackup 使用说明
  14. 记录微信支付解密错误Tag mismatch
  15. 图片转pdf、长图转pdf
  16. 人物渲染篇(一) —— 基础卡通渲染 上
  17. 用代码控制网络断开与重连
  18. 基于JAVA幼儿健康管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  19. linux中的ps命令常用参数-个人
  20. 开工大吉,重温下架构设计六大原则

热门文章

  1. Python OpenCV 横向平铺图像制作长图
  2. vue之packages.json添加注释的正确写法
  3. 霍夫圈变换——Hough circle
  4. zzulioj 1218: 反转a+b
  5. ARM Linux QT虚拟键盘的系列问题
  6. java项目 github_我们分析了30,000个GitHub项目-以下是Java,JS和Ruby排名前100的图书馆...
  7. excess elements in scalar initializer
  8. 零基础学习MySQL
  9. 用Python更方便了解王者荣耀英雄属性对比
  10. YOLO 对象检测 OpenCV 源代码