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)都表示区域左上角的位置。
Windows编程之Window介绍相关推荐
- windows编程之GDI绘图 -- 实验3-1
windows编程之GDI绘图 – 实验3-1 文章目录 windows编程之GDI绘图 -- 实验3-1 @[toc] 1.实验名称 2.实验目的 3.实验的步骤和方法 4.代码实现 5.思考题 6 ...
- Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数
一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI Create ...
- windows编程之TextOut与DrawText -- 文本输出实验
文章目录 windows编程之TextOut与DrawText -- 文本输出实验 实验名称 实验目的 实验要求 实验源码 思考题 windows编程之TextOut与DrawText – 文本输出实 ...
- windows编程之TextOut与DrawText
文章目录 windows编程之TextOut与DrawText TextOut 是什么函数 TextOut 函数原型 DrawText 是什么函数 DrawText 函数原型 TextOut与Draw ...
- 【转】Windows编程之hdc和hwnd的区别
在windows编程中类型名前面加H的基本是句柄 常用句柄 : HBITMAP 保存位图信息的内存域的句柄 HBRUSH 画刷句柄 HCTR 子窗口控件句柄 HCURSOR 鼠标光标句柄 HDC 设备 ...
- Windows编程之MDI
MDI 创建 1 CilentWindow 1.1 CLIENTCREATESTRUCT typedefstruct tagCLIENTCREATESTRUCT { HANDLE hWindowMen ...
- windows编程之GDI基础--设备内容(二)
取得设备内容句柄: Windows提供了几种取得设备内容句柄的方法.如果在处理一个消息时取得了设备内容句柄,应该在退出窗口函数之前释放它(或者删除它).一旦释放了句柄,它就不再有效了. 在WM_PAI ...
- Windows编程之COM组件
什么是COM接口? COM即Component Object Model,到底是用来干啥的呢?如果你了解Java或者C#,你应该会很了解interface.在C++中,最接近接口概念的应该是虚类了,所 ...
- windows编程之Windows Shell 编程
这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 由ccc编译 序言: 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用wi ...
最新文章
- 图解NumPy:常用函数的内在机制
- 小程序中,iOS设备获取蓝牙设备的Mac地址
- Moose File System分布文件系统测试
- linux7 设置dns,RHEL7.0 系列-设置IP地址、网关和DNS
- golang获取结构体中的tag_26. Go 语言中结构体的 Tag 用法
- JavaScript 浏览器对象BOM
- 测试用例又双叒叕失败了,NLP帮你
- k8s挂载目录_gitlab-runner在Kubernetes环境下挂载宿主机目录的方法
- java oracle数据备份_Java后台备份oracle数据库脚本
- Angularjs-项目搭建
- NOIP2016提高A组 B题 【HDU3072】【JZOJ4686】通讯
- html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
- mysql backup 使用_MySQLBackup 使用说明
- 记录微信支付解密错误Tag mismatch
- 图片转pdf、长图转pdf
- 人物渲染篇(一) —— 基础卡通渲染 上
- 用代码控制网络断开与重连
- 基于JAVA幼儿健康管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- linux中的ps命令常用参数-个人
- 开工大吉,重温下架构设计六大原则
热门文章
- Python OpenCV 横向平铺图像制作长图
- vue之packages.json添加注释的正确写法
- 霍夫圈变换——Hough circle
- zzulioj 1218: 反转a+b
- ARM Linux QT虚拟键盘的系列问题
- java项目 github_我们分析了30,000个GitHub项目-以下是Java,JS和Ruby排名前100的图书馆...
- excess elements in scalar initializer
- 零基础学习MySQL
- 用Python更方便了解王者荣耀英雄属性对比
- YOLO 对象检测 OpenCV 源代码