Windows窗口机制

本文是在学习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和 CascadeWindows: 将左右最大化窗口还原    
      WM_WINDOWPOSCHANGING:窗口大小和位置改变之后会收到此消息
    WM_NCCALSIZE:窗口创建时和大小改变时会收到此消息


>AnimateWindow:特殊显示或隐藏窗口

窗口销毁
>DestroyWindow:销毁窗口
   给自己和所有子窗口发送WM_DESTROY消息
>WM_CLOSE:在销毁窗口前,提供给用户一个确认的机会
>WM_DESTROY:给应用程序一次清理资源的机会
>PostQuitMessage:应用程序清理完资源时调用,退出主消息循环

>UpdateWindow:发送WM_PAINT消息







  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值