• 枚举子窗口EnumChildWindows()的应用


    1、
    EnumChildWindows()函数的作用枚举子窗口(按顺序调用回调函数,并将子窗口的句柄传递给了回调函数)。函数原型:

    BOOL WINAPI EnumChildWindows(
    HWND hWndParent, //父窗口句柄
    WNDENUMPROC lpEnumFunc, //回调函数
    LPARAM lParam //自定义参数
    );
    回调函数的返回值将会影响到这个API函数的行为:如果回调函数返回true,则枚举继续直到枚举完成;如果返回false,则将会中止枚举
    。函数原型如下:

    BOOL CALLBACK EnumChildProc(HWND hwndChild,//子窗口句柄
    LPARAM lParam //参数
    )。

    应用举例1:一个父窗口,当窗口改变大小时它的子窗口也要跟着改变,可以利用EnumChildWindows()。代码如下

    #define ID_FIRSTCHILD  100 
    #define ID_SECONDCHILD 101 
    #define ID_THIRDCHILD  102 
     
    LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
    { 
        RECT rcClient; 
        int i; 
        switch(uMsg) 
        { 
            case WM_CREATE: 
                for (i = 0; i < 3; i++) 
                { 
                    CreateWindowEx(0, 
                                   "ChildWClass", 
                                   (LPCTSTR) NULL, 
                                   WS_CHILD | WS_BORDER, 
                                   0,0,0,0, 
                                   hwnd, 
                                   (HMENU) (int) (ID_FIRSTCHILD + i), 
                                   hinst, 
                                   NULL); 
                }
     
                return 0; 
     
            case WM_SIZE:   
                GetClientRect(hwnd, &rcClient); 
                EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient); 
                return 0; . 
        } 
        return DefWindowProc(hwnd, uMsg, wParam, lParam); 
    } 
     
    BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
    { 
        LPRECT rcParent; 
        int i, idChild; 
        idChild = GetWindowLong(hwndChild, GWL_ID); 
     
        if (idChild == ID_FIRSTCHILD) 
            i = 0; 
        else if (idChild == ID_SECONDCHILD) 
            i = 1; 
        else 
            i = 2;  
     
        rcParent = (LPRECT) lParam; 
        MoveWindow(hwndChild, 
                   (rcParent->right / 3) * i, 
                   0, 
                   rcParent->right / 3, 
                   rcParent->bottom, 
                   TRUE); 
     
        ShowWindow(hwndChild, SW_SHOW); 
     
        return TRUE;
    }

    MoveWindow()函数不仅能够移动窗口的位置,而且能够改变窗口的大小。

    应用举例2:一个父窗口,当窗口移动时它的子窗口也要跟着移动位置,也可以利用EnumChildWindows()。

    2、
    EnumWindows()函数枚举屏幕上所有的顶层窗口,并将窗口句柄传递给自定义的回调函数。与EnumChildWindows类似,回调函数返回FALSE
    将停止枚举,否则将继续到所有顶层窗口枚举完为止。

  • 相关阅读:
    软件杯_视频全量目标分析和建模_初步分析
    《一线架构师实践指南》第三部分阅读笔记
    eclipse配置Struts2至Tomcat8.5
    《一线架构师实践指南》阅读笔记02
    Java中对list集合使用HashSet去重不成功
    学习02
    《一线架构师实践指南》阅读笔记01
    通过DOS命令将txt文件导入mysql数据库
    zookeeper集群环境搭建详细图文教程
    SSO之CAS单点登录详细搭建教程
  • 原文地址:https://www.cnblogs.com/milanleon/p/5623833.html
Copyright © 2020-2023  润新知