1. 程式人生 > >VS2013的MFC,獲取程式的控制代碼

VS2013的MFC,獲取程式的控制代碼

在VC6中,我可以右擊工具欄的空白處,勾選Controls以顯示控制元件(編輯框、按鈕、等),VS2013要怎麼做呢?
答:在VS2013中,你應該View->Toolbox以顯示這些控制元件,或者Ctrl+Alt+X快捷鍵調出來它。
spy++怎麼用?
答:先Tools->Spy++,然後“Search->Find Window”或“Alt+F3”或“點選望遠鏡的按鈕”即可,詳見下面的連結。

http://jingyan.baidu.com/article/3a2f7c2e76584a26aed61174.html

下面是獲取某客戶端的某子視窗的控制代碼的過程,不完善,就寫著玩,留作自用,啥時候完成了,我再更新上來。這些程式碼我也是在網上搜的。

    CString strCaption;
    CWnd* pWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
    if (nullptr == pWnd)
        return;
    while (pWnd)
    {
        if (pWnd->IsWindowVisible() && pWnd->GetWindowTextLengthW() && !pWnd->GetOwner())
        {
            pWnd->GetWindowTextW(strCaption);
            if (strCaption.Find(CString("某系統的父視窗的標題")) != -1)
                break;
        }
        pWnd = pWnd->GetWindow(GW_HWNDNEXT);
    }
    if (NULL == pWnd)
        return;
    //BOOL/*bool*/ CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
    //BOOL是int而bool是bool
    auto lambda_fun = [](HWND hwndChild, LPARAM lParam)
    {
        TCHAR szWndTitle[1024];
        int nLen = ::GetWindowTextW(hwndChild, szWndTitle, 1024);
        if (CString(szWndTitle).Find(CString("父視窗的某子視窗的標題")) != -1)
        {
            AfxMessageBox(szWndTitle);
            return FALSE;//0
        }
        return TRUE;//1
    };
    EnumChildWindows(pWnd->m_hWnd, lambda_fun, NULL);
    AfxMessageBox(CString("all end"));
完。