获得子窗口句柄!(50分)

  • 主题发起人 主题发起人 m911
  • 开始时间 开始时间
M

m911

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个窗体,不是标准控件,但是可以得到子窗口矩形(长宽),如何获得子窗口的句柄?
 
试试这个API函数:<br>GetWindow(MainForm.Handle,GW_CHILD)
 
这个好像得不到子窗口的句柄 &nbsp; 因为子窗口不只一个啊 &nbsp;有很多 &nbsp;我只想找到符合条件的那个(长宽)
 
这个得到的是当前活动子窗口的句柄<br>那你把主窗口作为一个容器,去遍历它下面的所有子窗口(为TForm类的),再去判断长宽是否与你指定的相符. 相信遍历容器内的组件就不用我再说了吧
 
function &nbsp; EnumChildWindowsProc(H: &nbsp; HWnd; &nbsp; TF: &nbsp; TForm1): &nbsp; Boolean; &nbsp; stdcall; <br>var <br>&nbsp; &nbsp; Buffer: &nbsp; array[0..255] &nbsp; of &nbsp; Char; <br>begin <br>&nbsp; &nbsp; //这里的 &nbsp; H &nbsp; 就是所有子窗体的句柄 <br>&nbsp; &nbsp; Result &nbsp; := &nbsp; True; <br>&nbsp; &nbsp; Form1.ListBox1.Items.Add(IntToStr(H)); <br>end; <br><br><br>procedure &nbsp; TForm1.FormShow(Sender: &nbsp; TObject); <br>begin <br>&nbsp; &nbsp; //这里的 &nbsp; FHandle1 &nbsp; 就是那个子窗体的父窗体的句柄 <br>&nbsp; &nbsp; //下面的函数就是枚举该"父窗体"的所有子窗口的句柄<br>&nbsp; &nbsp; EnumChildWindows(FHandle1, &nbsp; @EnumChildWindowsProc, &nbsp; Longint(Self)); <br>end; <br><br>//获得所有子窗体的句柄后就你可以用 &nbsp; GetWindowRect &nbsp; 函数获得该窗口的坐标、大小等信息,然后通过比较来确定哪个句柄才是你想要的子窗体的.
 
给你发过去了
 
接受答案了.
 
后退
顶部