当前位置:C++技术网 > 资讯 > TabStop属性与GetSafeHwnd()函数

TabStop属性与GetSafeHwnd()函数

更新时间:2015-11-01 14:35:20浏览次数:1+次

使用 TabStop 属性可以指定是否能在“窗体”视图中通过 Tab 键次序将焦点移到一个控件上。Boolean 型,可读写。
TabStop 属性使用以下设置:

可以使用控件的属性表、宏或 Visual Basic 来设置该属性。
在窗体上创建控件时,Microsoft Access 会自动为其指定在窗体中的 Tab 键次序。每个新创建的控件都将排在 Tab 键次序的最后一个位置上。如果希望按 Tab 在窗体的控件之间移动焦点时使某个控件不可用,可将该控件的 TabStop 属性设置为“否”。
在“窗体”视图中,隐藏或禁用的控件依然处于 Tab 键次序中,只是在按 Tab 时将跳过它们,即使它们的 TabStop 属性已设为“是”。
只要控件的 Enabled 属性设为“是”,就可以通过单击该控件或使用访问键来选择它,而不受 TabStop 属性设置的影响。例如,可以将一个命令按钮的 TabStop 属性设为“否”以防止用户通过按 Tab 来选择它,但是用户仍然可以通过单击来选择该命令按钮。

CWnd::GetSafeHwnd  
(这是CWnd的一个成员函数)
HWND GetSafeHwnd()const;
(这是个const 函数)
Return Value
Returns 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. 
调用它返回窗口的句柄,如果CWnd没有与任何窗口联系或者用于一直空的CWnd指针,它返回NULL)
当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->m_hwnd; //得到它的HWND
这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL,通过GetSafeHwnd()的实现代码就更清楚了:
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{
return this == NULL?NULL:m_hWnd;
}