本文是在学习Windows Feature时的笔记:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx
Windows Features
>桌面窗口
GetDesktopWindow:获取桌面窗口句柄
SystemParameter(wAction=SPI_SETDESKWALLPAPER):设置桌面壁纸
>窗体结构
>客户区和非客户区
客户区:应用程序中可以直接输出的区域
非客户区:应用程序中的特殊区域(保护标题栏、菜单栏、系统按钮等)
>窗口创建消息:在这些消息中处理程序初始化的任务
WM_NCCREATE:创建非客户区消息
WM_CREATE:创建客户区消息
WM_PARENTNOTIFY:创建子窗口后系统发送给父窗口
>
窗口类型
1.OverlappedWindows:
是一种顶层窗口
有标题栏、边框、客户区(WS_OVERLAPPED),可选:窗口菜单、最小化和最大化按钮、滚动条(WS_OVERLAPPEDWINDOW)
通常作为程序的主窗口
2.Pop-UpWindows:弹出窗口
是一种特殊的Overlapped窗口
经常用来弹出对话框、消息窗口和临时窗口
使用WS_POPUP样式创建窗口
3.Child Windows:子窗口
WS_CHILD样式
局限于父窗口的显示区,必须为其指定一个父窗口
通常用来切分父窗口
子窗口显示默认是在父窗口的左上角,如果比父窗口大,则进行裁剪
父窗口的消息影响其子窗口:
Destroyed:子窗口先销毁
Hidden:子窗口先隐藏
Moved:随着父窗口移动,移动后得自绘
Show:父窗口先显示
裁剪:WS_CLIPCHILDREN样式使父窗口不能在子窗口之上绘制
和父窗口关系:
SetParent:指定一个父窗口,参数为NULL时,显示在桌面上,可以自由拖动
GetParent:获得父窗口的句柄
IsChild:判断一个窗口是不是另一个窗口的子窗口
EnumChildWindow:枚举子窗口
子窗口和父窗口的类型可以不一样
消息:
子窗口的消息直接发送给子窗口,如被禁止,则发送到父窗口
EnableWindow:禁止或启用一个子窗口
层叠窗口:WS_EX_LAYERED
消息窗口:
不可见、没有z自序,不能被枚举,不能收到广播消息
使用HWND_MESSAGE句柄
使用FindWindowEx并传入HWND_MEAAGE查找窗口
窗口关系
>前台窗口与后台窗口
和用户交互的窗口叫做前台窗口,创建的线程叫做前台线程
其他线程创建的窗口叫做后台窗口,其他线程叫做后台线程
前台窗口线程的优先级(9)高于其他线程的(7)
设置前台窗口:点击、Alt+Tab、Alt+Esc
获取前台窗口句柄:GetForegroundWindow()
设置前台窗口:SetForegroundWindow(),设置的进程需要满足特定的条件
>Owned窗口
窗口在其拥有者窗口之上(Z order)
拥有者窗口销毁时被拥有者窗口也自动销毁
拥有者窗口最小化时被拥有者窗口隐藏
只有Overlapped和popup窗口可以称为拥有者窗口,子窗口不能称为拥有者窗口
通过GetWindow及参数GW_OWNER获取窗口的拥有者窗口
>Z-Order
顶层窗口在所有其它非顶层窗口之上
BringWindowToTop、SetWindowPos、DeferWindowPos设置窗口在Z序的位置
窗口状态
>Aactive Windows:当前用户正在使用的窗口
SetActiveWindows:切换激活窗口(本进程内?)
SetWindowsPos、DeferWindowPos、SetWindowPlacement
GetActiveWindow
WM_ACTIVATEAPP:发送激活窗口切换时系统发送给两个窗口
>Disable Windows:
Disable窗口不能收到鼠标和键盘消息
EnableWindow:禁止或启用一个窗口
IsWindowEnabled:判断一个窗口是否可用
子窗口被disable的时候,父窗口可以接收子窗口的鼠标消息
>可见性
如果一个窗口被隐藏等同于失效
IsWindowVisible:判断一个窗口是否可见
>CloseWindow:最小化窗口
SetWindowPlacement与ShowWindows功能类似,还可以改变最小化、最大化和恢复时默认的位置
WM_QUERYOPEN:最大化或恢复窗口时,系统给窗口发送这个命令
WM_GETMINMAXINOF:后去窗口的默认大小信息
Windows大小和位置
>WM_GETMINMAXINFO:获取窗口大小拖动时最大尺寸和最小尺寸
WS_THICKFREAME:容许一个窗口大小被拖动
>WM_SYSCOMMAND:用户点击窗口菜单时由系统发送
SC_CLOSE:关闭窗口,发送WM_CLOSE消息到窗口
SC_MAXIMIZE:最大化窗口
SC_MINIMIZE:最小化窗口
SC_MOVE:移动窗口
SC_RESTORE:恢复最大化或最小化之前的大小
SC_SIZE:改变窗口大小
>改变大小或位置:
SetWindowPlacement:设置窗口最大化、最小化,恢复的大小和位置,以及显示状态
MoveWindow和SetWindowPos:设置窗口位置
XXXDeferWindowPos:同时设置窗口的大小、位置,Z序和显示状态
GetWindowRect:获取窗口矩形信息,都是相对于桌面的位置
ScreenToClient和MapWindowPoints:进行坐标转化
GetClientRect:获取客户区的矩形,相对与自身的
TileWindows和
Ca
scadeWindows: 将左右最大化窗口还原
WM_WINDOWPOSCHANGING:窗口大小和位置改变之后会收到此消息
WM_NCCALSIZE:窗口创建时和大小改变时会收到此消息
>AnimateWindow:特殊显示或隐藏窗口
窗口销毁
>DestroyWindow:销毁窗口
给自己和所有子窗口发送WM_DESTROY消息
>WM_CLOSE:在销毁窗口前,提供给用户一个确认的机会
>WM_DESTROY:给应用程序一次清理资源的机会
>PostQuitMessage:应用程序清理完资源时调用,退出主消息循环
>UpdateWindow:发送WM_PAINT消息