C ++ Winapi HWND按名称获取元素

时间:2015-07-22 08:34:11

标签: c++ winapi properties hwnd

有没有办法可以通过它的属性“名称”获得HWND?我知道每个IDE都有自己的HWND元素属性,但这些属性应用于HWND。

我不是在Visual Studio中工作,这只是一个案例。我希望在没有VS库的情况下通过C ++中的Name获取HWND。

例如:

HWND button = GetHwndByName("button1"); //Example

属性“名称”是 button1 enter image description here

Property "name" is: button1

1 个答案:

答案 0 :(得分:0)

我将假设您要么尝试访问代码中的GUI控件或其他程序的GUI控件。

正如有些人所提到的,属性编辑器中的(name)属性只是用于该控件的变量名。您的屏幕截图显示了Visual Studio编辑.net程序。对于.net,(name)字段是表示控件的窗口类的类成员的名称。因此,如果(name)button1,则Visual Studio可能会生成类似

的代码
// pseudo-C++/C#-like
class Form1 : public System.Windows.Forms.Form {
private:
    System.Windows.Forms.Button *button1;
...
};

这里的想法是,您将把事件处理程序作为Form1类的一部分:

void Form1::onButton1Clicked(void)
{
    this->button1->SetText("You clicked me!");
}

因此,从Windows的角度来看,(name) 不是窗口的固有属性。

我不知道CA Plex的GUI编辑器是什么样的,但我认为,假设你说你使用的是C ++,那么

a)生成一个类似于我上面粘贴的类,在这种情况下,您只需将(name)直接用作成员,或

b)生成一个头文件,其中每个控件名称都是全局HWND变量

无论哪种方式,您都可以直接在代码中使用它们。也许有像

这样的东西
void doToAllButtons(void (*f)(HWND, LPARAM), LPARAM lParam)
{
    (*f)(button1, lParam);
    (*f)(button2, lParam);
    (*f)(button3, lParam);
}

并简单地编写一个适当的函数来通过这个函数进行调用。

如果你需要与另一个程序交互并想使用它的变量名,那么你就不走运了。您需要以其他方式找到您想要的窗口,例如使用FindWindow()