Lambda 表达式递归用法实例

2018-06-17 23:35:23来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的。

 

Windows下查找子孙窗口实例:

HWND FindDescendantWindows(HWND hWndParent, LPCTSTR lpClassName, LPCTSTR lpWindowName)
{
    HWND hFind = nullptr;

    UINT nCompare = 0;
    nCompare += (lpClassName != nullptr) ? 1 : 0;
    nCompare += (lpWindowName != nullptr) ? 1 : 0;

    if (nCompare == 0)
        return nullptr;

    TCHAR szClass[MAX_CLASS_NAME];
    TCHAR szTitle[MAX_PATH];
    std::function< HWND(HWND hWndParent, LPCTSTR lpClassName, LPCTSTR lpWindowName)> _FindDescendantWindows;
    _FindDescendantWindows = [&](HWND hWndParent, LPCTSTR lpClassName, LPCTSTR lpWindowName)->HWND {

        HWND hChild = ::GetWindow(hWndParent, GW_CHILD);
        while (hChild != NULL)
        {
            UINT cmp = 0;
            ::GetClassName(hChild, szClass, MAX_CLASS_NAME);
            if (_tcsicmp(szClass, lpClassName) == 0) 
                cmp++;
            if (cmp == nCompare)
                return hChild;

            ::GetWindowText(hChild, szTitle, MAX_PATH);
            if (_tcsicmp(szTitle, lpWindowName) == 0)
                cmp++;
            if (cmp == nCompare)
                return hChild;

            HWND hFind = _FindDescendantWindows(hChild, lpClassName, lpWindowName);
            if (hFind != nullptr)
                return hFind;

            hChild = ::GetWindow(hChild, GW_HWNDNEXT);
        }
        return nullptr;
    };
    return _FindDescendantWindows(hWndParent, lpClassName, lpWindowName);
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:遗传算法--种群进化(经典算法连载二)

下一篇:CListCtrl