一、关于窗口句柄
首先讲一下MFC中句柄的概念,句柄是一种资源标识,他是一个整数,由操作系统分配,用户(程序员)没法指定。举个例子来说,当你创建了一个对话框,那么系统就会为这个对话框分配一定的资源,并且为这个资源分配一个整数来标识这块资源,那么这个整数就是句柄。 什么是资源,资源当然就是内存,堆栈。对话框的所有资源封装在一个类中,形成自己的数据结构,这个数据结构占用系统的一块内存。
其次,句柄用HANDLE表示, 定义方式,HANDLE hWnd; 其实句柄的实现方式就是指针, 句柄是一种指针的指针,系统中应该会有一张资源标识符表, 资源标识符表中放的应该就是指向资源的指针,通过句柄可以找到这个存放资源指针的地方。
最后,窗口句柄的使用。常用的是通过窗口句柄投递一个消息给窗口,使得窗口可以响应一个消息。比如:
::SendMessage(GetDlgItem( ID )->m_hWnd,WM_ONEMSG,(WPARAM) RXBuff, (LPARAM) type);
二、关于窗口ID
窗口ID是窗口标识的一种别名,有程序员自己定义,比如:IDD_MONITOR_DIALOG。
三、关于窗口指针
我认为窗口指针是指向对话框资源的指针,窗口的资源封装在一个类中,窗口指针就是指向这个类的指针,通过这个指针可以访问类中所有的资源(各种成员函数,成员数据)。获取窗口指针的方法:GetDlgItem( ID ), 返回类型是CWnd *,使用的时候需要强制类型转换为自己的类类型指针。比如:窗口类名为CTestDlg, 窗口ID为IDD_MONITOR_DIALOG。那么, CTestDlg *p = (CTestDlg*)GetDlgItem( IDD_MONITOR_DIALOG );通过指针p就可以访问类中的各种资源了。
控件其实也是一种窗口,所以以上的概念也适合控件。