当前位置:C++技术网 > 资讯 > 获取子窗口控件ID和使用子窗口控件ID的方法

获取子窗口控件ID和使用子窗口控件ID的方法

更新时间:2016-01-14 19:09:40浏览次数:1+次

    子窗口控件ID,就是我们通常说的控件ID。曾经错误的以为控件ID是MFC的概念。实际上,子窗口控件ID是win32里就有的概念。我想也有很多同学对此要么就不知道怎么回事,要么也和我一样错误的理解了。当然其他的就是知道怎么回事的了。
    在建立窗口的父子关系的时候,一个父窗口可以有很多个子窗口,而子窗口只有一个父窗口。所以,父窗口不需要ID。通过GetParent函数就可以得到子窗口的父窗口句柄。
    然而,要得到一个窗口的子窗口,则没有办法直接获取。我们得一个个的去找,用每一个子窗口的ID或者句柄和要查找的ID或者句柄比对,如果相同则表示找到了这个子窗口。当然,子窗口控件也是一个窗口,也遵守这个规则。
    那么子窗口控件的ID实际上可以理解为子窗口的ID。只不过,很多时候,子窗口都以控件形式出现在父窗口中,所以一般都用子窗口控件ID来称呼这个ID了。所以,子窗口控件ID也可以理解为子窗口的ID。
    子窗口控件ID从哪里来?又如何使用?
    CreateWindow函数的倒数第三个参数,用来指定准备创建的窗口的菜单句柄或者子窗口的ID值。那么子窗口控件ID就从这里开始。在一个窗口的所有子窗口中,子窗口控件ID是唯一的,用来区别于其他子窗口。
    既然子窗口控件ID只是作为子窗口的唯一标识,自然也是可以修改的,只要不与其他子窗口ID冲突即可。当父窗口需要和子窗口通信时,可以通过子窗口ID来找到子窗口,也可以通过子窗口句柄来找到子窗口。不过,有了子窗口ID只不过是用来获取子窗口句柄的桥梁罢了。因为窗口间的通信,以消息形式进行,那么就需要句柄。此时ID并没有卵用。
    如果你拥有子窗口控件ID,然后想和子窗口发消息,那么就可以通过下面的方法来获取子窗口的句柄:
HWND hChild = GetDlgItem(ID);
    然后使用SendMessage函数发送消息即可。那么这个就是ID的最常用的用途之一。
    有些时候,我们需要通过子窗口控件ID做一些处理,那么此时就需要得到子窗口控件的ID。当然,此时最好你拥有子窗口的句柄,然后可以通过子窗口句柄来得到子窗口控件ID。以下是通过窗口句柄得到子窗口控件ID的两种方法:
UINT id = GetWindowLong(hChild,GWL_ID);
UINT id = GetDlgCtrlID(hChild);

    GetWindowLong是在注册窗口类时系统为窗口维护的一份数据,这份数据中就含有窗口的ID。而GetDlgCtrlID原本用于对话框的控件ID的获取,不过这个函数却是可以通用的。因为控件说白了还是一个子窗口。

    这里就主要介绍获取子窗口控件ID和使用子窗口控件ID的方法,并详细解释了下子窗口控件ID的来源和用途。