2013-03-02 153 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