鼠标光标总是由于制表符顺序而获得错误的hwnd-MFC应用程序

问题描述 投票:0回答:1

我试图通过使用鼠标光标获取在MFC应用程序中开发的窗口句柄并将其打印出来。

这是我用来获取窗口句柄的代码。

#include<windows.h>
#include<iostream>
using namespace std;

int main() {

        POINT pt;
        Sleep(5000);
        GetCursorPos(&pt);
        SetCursorPos(pt.x,pt.y);
        Sleep(100);

        HWND hPointWnd = WindowFromPoint(pt);
        SendMessage(hPointWnd, WM_LBUTTONDOWN, MK_LBUTTON,MAKELONG(pt.x,pt.y));
        SendMessage(hPointWnd, WM_LBUTTONUP, 0, MAKELONG(pt.x,pt.y));

        char class_name[100];
        char title[100];
        GetClassNameA(hPointWnd,class_name, sizeof(class_name));
        GetWindowTextA(hPointWnd,title,sizeof(title));
        cout <<"Window name : "<<title<<endl;
        cout <<"Class name  : "<<class_name<<endl;
        cout <<"hwnd        : " <<hPointWnd<<endl<<endl;

        system("PAUSE");
        return 0;

}

我将鼠标光标放在分组框内的按钮上,然后结果总是显示分组框的句柄而不是按钮。我发现选项卡顺序是导致我无法获取按钮句柄的原因

还有其他方法或其他Windows功能可用于解决制表符顺序问题吗?

任何帮助将不胜感激。非常感谢!

c++ mfc groupbox hwnd mouse-cursor
1个回答
0
投票

[首先,您需要调用WindowFromPoint以获得最大程度嵌套的窗口句柄,然后可以通过调用GetParent来获取其父窗口,之后可以使用RealChildWindowFromPoint为父窗口提供句柄并指向父母的窗口客户坐标。

© www.soinside.com 2019 - 2024. All rights reserved.