枚舉子窗口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
將停止枚舉,否則將繼續到所有頂層窗口枚舉完為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM