调用当前焦点所在控件的GetRuntimeClass(),或IsKindOf方法。如:CAge a(21);
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT( strcmp( prt->m_lpszClassName, "CAge" ) == 0 );// Example for CObject::IsKindOf.
CAge a(21); // Must use IMPLEMENT_DYNAMIC, IMPLEMENT _DYNCREATE, or
// IMPLEMENT_SERIAL
ASSERT( a.IsKindOf( RUNTIME_CLASS( CAge ) ) );
ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT( strcmp( prt->m_lpszClassName, "CAge" ) == 0 );// Example for CObject::IsKindOf.
CAge a(21); // Must use IMPLEMENT_DYNAMIC, IMPLEMENT _DYNCREATE, or
// IMPLEMENT_SERIAL
ASSERT( a.IsKindOf( RUNTIME_CLASS( CAge ) ) );
ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );
GetClassName(hWnd, temp, sizeof(temp));
if(!strcmp(temp,_T("Edit")))// Edit输入框
...
GetClassName(hWnd, temp, sizeof(temp));
if(!strcmp(temp,_T("Edit")))// Edit输入框
return text;
你知道,对于Windows控件来说,只要得到它的HANDLE,就可以控制它了,CBUTTON[其它管理类也是]正是有这样一个成员m_hwnd,子类化时:
一种是DDX:DDX_####(pDX,ID_BUTTON,m_btn);
一种是这样:m_btn.SubClassDlgItem(ID_BUTTON,this);
他们都会调用:m_btn.SubClassWindow(ID_BUTTON的句柄);这个函数会把控件句柄给它的m_hwnd。所以我说,CButton只不过对于Button的管理方便,[我用CEdit对Edit的管理为例:m_edit.setpasschar.是它专用的而Cwnd没有],但用其它也可,你用CEdit也可以管理,但有些函数会出错的[SetWindowstext行]。
IsKindof只是对于C++来说的操作,如:Iskindof(Run...(CButton))
只有C++类对象是CButton这个BOOL表达式才是真。而GetFocus()得到的是一个CWnd *,可以分两种情况解释,一是真正的CWND对象指针,那ISKINDOF(CBUTTON)=0,二是指到CBUTTON对象的指针,那是1。而Getfocus返回的是前者情况,所以。。但::GetClassName是API,这是通用于VB,VC,DELPHI.....是针对Win32元素的。好了,我没时间了,这里要关了,明天再聊。