2013-03-02 155 views
0

我需要找到控件的x和y座標,但我不確定從哪裏開始。我在互聯網上找到的唯一解決方案是使用MFC,我想避免使用它。那麼,有沒有辦法找到不使用MFC的控件的座標?在C++中找到控件的位置

使用FindWindow函數找到控制:

RECT cr; 
    HWND chWnd = FindWindow("SunAwtCanvas", NULL); 
    GetWindowRect(chWnd, &cr); 
    cw = cr.right; 
    ch = cr.bottom; 
    cx = cr.left; 
    cy = cr.top; 
    cout << chWnd << endl; 

chWnd爲0時,它應該有控制的hWnd。

+0

WinForms控件? – Rapptz 2013-03-02 19:02:04

+0

這是一個嵌入遊戲的控件。它不是您在GUI中找到的標準控件。我不知道如何描述它。 – Meredith 2013-03-02 19:05:33

回答

0

使用GetWindowRect在控制的HWND(每個控件都有自己的HWND):http://msdn.microsoft.com/en-gb/library/windows/desktop/ms633519(v=vs.85).aspx。這會給你的左,右,上,下,允許知道控制的範圍,也制定出其高度和寬度

+0

好吧,我知道如何使用GetWindowRect,所以這很好。現在我只需要找到控件的hWnd。搜索答案後,看起來您需要知道控件的ID以找到它的hWnd,並且我不知道如何找到ID。 – Meredith 2013-03-02 19:20:17

+0

使用findwindow,你可以通過類名或窗口名找到。使用spy ++來找出其中的一個或兩個是什麼。 http://msdn.microsoft.com/en-gb/library/windows/desktop/ms633499(v=vs.85).aspx – bizzehdee 2013-03-02 20:54:01

+0

OK,所以我用FindWindow函數與類名,但它返回0 @bizzehdee – Meredith 2013-03-02 21:32:00

0

您的代碼用於獲取HWND是壞的。

從MSDN引用:FindWindow

檢索的句柄的頂級窗口,它的類名和窗口 名符合特定字串。此功能不搜索子窗口 。此功能不執行區分大小寫的搜索。

改爲使用FindWindowEx

+0

你能告訴我如何解決它嗎? – Meredith 2013-03-02 22:00:15

+0

看到您的編輯並將有問題的行更改爲FindWindowEx(hWnd,NULL,「SunAwtCanvas」,NULL);. hWnd是目標窗口的hWnd。它仍然返回0,所以我做錯了什麼? – Meredith 2013-03-02 22:06:11

+0

什麼說GetLastError()? :) – Xearinox 2013-03-02 22:09:20