在CWnd类中,既然m_hWnd 是一个公有变量,为什么还要设一个函数GetSafeHwnd()来返回这个变量啊?调用这个函数与直接操作m_hWnd句柄有什么区别吗?如果没区别的话,GetSafeHwnd()这个函数就显得多余了,函数调用可是占用系统开销的啊,频繁调用可能会影响系统性能啊。MFC为什么还增加这个方法呢?发现很多人也喜欢用这个方法呢。
解决方案 »
- 请问把MFC类作为容器类的变量类型有没有不好的地方?
- 对于同一个函数,GetProcAddress返回的值是不是等于模块基地址+RAV(通过PE文件中获得的)的地址值相同?
- 天勒,高手快来救命啊。QQ2009,如果在伪造的EDIT里显示“黑圆点”在大的加分
- 请问用ShellExecute打开的新窗口为什么不能最大化
- 还是CIPAddressCtrl类的问题,
- 关于memcpy()的问题...
- 请问如何才能实现将WINDOWS桌面完全覆盖掉?
- 谁用过x-win32?我不知道可以连接那个主机,给推荐几个好吗?
- dll死活不能用
- vc++Debugg程序运行完系统(Ixplorer)出错问题-第4次提问--拜托看清贴子内容,别给无用答案--以前答案没有解决问题
- 用tab control控件的m_tab.GetCurSel() 为何得到的页的序号不正确?
- error LNK2005: 问题
HWND GetSafeHwnd( ) const;Return ValueReturns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer.
在AFXWIN2.INL中定义如下_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }这样做只是为了安全检查,如果你的CWnd(子)对象没有挂载窗口时,使用m_hWnd调用成员函数可能会出错
可是
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }
中的判断好像也不好理解啊,return 语句能够执行的话,this指针肯定不为空啊,因为执行return语句的就是this指针指向的对象啊,没有这个对象,这条语句没有执行者啊。所以,这个return语句跟 return m_hWnd;没什么区别啊。
还有CWnd(子)对象如果没有挂载窗口时调用这个函数也不能保证获得一个安全的窗口句柄啊,因为这个时候,this指针指向了一个对象,肯定不为空啊,那return语句却返回m_hWnd的值,此时没有加载窗口,返回的m_hWnd的值就不是安全的句柄了。不是吗?
void A::Fun2()
{
Fun1(); //这里其实隐含了this指针,跟this->Fun1()没有区别的;
}难道this为NULL,不能通过它访问成员变量却能调用成员函数?
LZ可以试一下,例如:
A* p = NULL;
p->Fun()
只要Fun不是虚函数且没有访问类成员,是不会有问题的。