很多人谈论了指针跟句柄的区别,但是我觉得太杂了!什么说法都有,真的很希望谁能更清晰的发表一下看法,我想所有初学者都会非常感激的!
我是一初学者,正在被windows编程所吸引,但同时也遇到很多让人苦恼的问题,句柄跟指针的区别我想网上的谈论算够多了,但是什么意见都有,有时候看了这个高人的说法觉得有道理,并认为是那样,但是不久以后看了另一个人的提法,觉得他说的也是,所以我现在真的是搞不清了,希望哪位出来帮帮忙!
------------------------------------
以下转载vc知识库
[问题提出]
如果想对对话框的控件进行控制,那么首先要获得此控件的句柄(指针),然后对其操作.
[解决方法]
MFC提供了获取子窗口,指定控件和指定窗口句柄的函数:CWnd::GetDlgItem.
[实现程序]
假设你已有了名为My的对话框工程,并且有了一个ID=IDC_EDIT1的Edit控件:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
m_Edit->SetWindowText("练习");
return TRUE;
}
-----------------------------------
第二:
以下是另一种说法:
许多开始学习VC的朋友,最多听说的两个词莫过于指针于句柄了。
但是,确经常搞不清他们之间的区别。
首先,句柄是一个窗口的标志,也就是所有从CWND类继承下来的,多有句柄这个成员。
他能做的,也就是唯一代表一个桌面上的窗口罢了。而指针是一个地址,如果它指向了一个内存中的对象,那么就可以对它进行任意操作了,当然,并不局限于自己的应用程序,你如果能够获得别的应用程序的某个对象的指针,也可以进行操作。然而,如果要获得指针,首先,必须找到那个窗口的句柄,然后用函数FromHandle就可以得到他的指针了。好了,现在,你可以对窗口任意操作了
-------------------------------
第三:
以下另一种说法:
看看C++ 教材中是如何给句柄下定义的:“在Win32里,句柄是指向一个无值型对象(void *)的指针,是一个4
字节长的数据”。虽然我对它的本质是什么还是很迷惑,但我知道句柄并不是一个真正意义上的指针。从结构上看,
句柄的确是一个指针,尽管它没有指向用于存储某个对象的内存位置(很多书都这么说,这正是我的迷惑所在),而
实际上句柄指向的是一个包含了对该对象进行的引用的位置。在编程时,只要抓住了对象的句柄就可以对该对象进行
操作了
---------------------------------
我想问一下,通过对象的指针和通过对象的句柄来 操作对象到底有什么区别?
为什么有的说法是要先获取句柄以后在获取指针?