MFC:在父窗口中打开了一个子窗口,然后在子窗口中访问非父窗口的其他窗口的控件。怎么实现。

2024-12-19 17:54:38
推荐回答(3个)
回答1:

你的意思就是获取子窗口句柄

1.先要获取主窗口的句柄
获取方法参考:

1.通过进程名称寻找进程 获得进程ID->枚举所有窗口->选出进程ID的主窗口句柄

2.通过窗口名称FindWindow出主窗口句柄

2.::GetDlgItem(这个函数可以获取子窗口的句柄)
例程:

HWND 主窗口句柄=::FindWindow(......);

HWND 子窗口句柄=::GetDlgItem(主窗口句柄,1231);//1231是子窗口在主窗口中的ID

//可以利用GetDlgItem(子窗口句柄,111);这样以此类推,一直到你所要的窗口为止

char 文本[MAX_PATH]={0};

::GetWindowText(子窗口句柄,文本,MAX_PATH);

MessageBox(.........);

Q:怎么获得子窗口在主窗口中的ID?
A:可以通过一些辅助软件获得,比如SPY++、精易助手 ,等等。

传递类的指针即可

回答2:

要访问别的窗口需要获取到窗口的对象.
如果是父窗口创建的窗口,那么可以在父窗口创建这个子窗口的时候,在构造方法中传入这个要操作的窗口对象,然后通过这个窗口对象对这个窗口进行操作
C窗口没打开你去哪访问他的控件...

回答3:

父窗口类:CMainDlg;
子窗口:CReadInfo;
父窗口上有控件IDC_IP;

HWND pwnd=GetParent();//企图获得父窗口句柄
HWND pwnnd= ::GetDlgItem(pwnd, IDC_IP);//企图通过父窗口句柄获取IDC_IP控件句柄
::GetWindowText(pwnnd,IpAddr,16);//企图把控件里的IP地址赋值给IpAddr
MessageBox(IpAddr);//企图以弹出的形式弹出我获取到的IP地址