VC控件----如何根据句柄判断其类型

简介: hWnd=GetWindow(hDlg,GW_CHILD); if(hWnd == NULL || !::IsWindow(hWnd)) return FALSE; nIdFirst=GetDlgCtrlID(hWnd); do { GetClassName(hWnd...
hWnd=GetWindow(hDlg,GW_CHILD);
if(hWnd == NULL || !::IsWindow(hWnd))
return FALSE;
nIdFirst=GetDlgCtrlID(hWnd);

do
{
GetClassName(hWnd,szBuf,256);

//Edit子类化

if( _tcsicmp(szBuf,_T( "Edit ")) == 0)
{
//验证是否已经被永久映射
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{

CEditEx *pEdit=new CEditEx();
if(pEdit == NULL)
return FALSE;
pSkin-> m_edtList.AddTail(pEdit);

//子类化此窗口
pEdit-> SubclassWindow(hWnd);
}

}

//button子类化

if(_tcsicmp(szBuf,_T( "Button ")) == 0)
{
dwStyle = GetWindowLong(hWnd,GWL_STYLE);
if((dwStyle & SS_TYPEMASK) == BS_DEFPUSHBUTTON)
dwStyle = BS_PUSHBUTTON;
if((dwStyle & SS_TYPEMASK) == BS_AUTOCHECKBOX)
dwStyle = BS_CHECKBOX;

TCHAR szBuf[256];
GetWindowText(hWnd,szBuf,256);

//PushButton子类化

if( (dwStyle & SS_TYPEMASK) == BS_PUSHBUTTON)
{
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CXPButton *pBtn=new CXPButton();
if(pBtn == NULL)
return FALSE;
pSkin-> m_btnList.AddTail(pBtn);
pBtn-> SubclassWindow(hWnd);
}
}

//Checkbox子类化

else if( (dwStyle & SS_TYPEMASK) == BS_CHECKBOX )
{
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CExCheckBox *pChk=new CExCheckBox();
if(pChk == NULL)
return FALSE;
pSkin-> m_chkList.AddTail(pChk);
pChk-> SubclassWindow(hWnd);
}
}
else if( ( dwStyle & SS_TYPEMASK) == BS_GROUPBOX)
{
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CExGroupBox *pGrp=new CExGroupBox();
if(pGrp == NULL)
return FALSE;
pSkin-> m_grpList.AddTail(pGrp);
pGrp-> SubclassWindow(hWnd);
}

}
}

//static子类化

if( (_tcsicmp(szBuf,_T( "Static ")) == 0)
&& (GetWindowLong(hWnd,GWL_STYLE) & SS_ETCHEDHORZ) == SS_ETCHEDHORZ)
{
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CLineStatic * pLine=new CLineStatic();
if(pLine == NULL)
return FALSE;
pSkin-> m_lineList.AddTail(pLine);
pLine-> SubclassWindow(hWnd);
}
}

//ComboBox子类化

if( _tcsicmp(szBuf,_T( "ComboBox ")) == 0)
{
if(CWnd::FromHandlePermanent(hWnd) == NULL)
{
CFlatComboBox *pCmb=new CFlatComboBox();
if(pCmb == NULL)
return FALSE;
pSkin-> m_cmbList.AddTail(pCmb);
pCmb-> SubclassWindow(hWnd);
}

}

//etc

hWnd=GetWindow(hWnd,GW_HWNDNEXT);
if(!::IsWindow(hWnd) || hWnd==NULL)
break;

}while(nIdFirst != GetDlgCtrlID(hWnd));
目录
相关文章
|
5月前
|
JSON 小程序 JavaScript
小程序根据返回值的int类型渲染不同的状态
小程序根据返回值的int类型渲染不同的状态
68 0
vb如何判断MsgBox返回值
vb如何判断MsgBox返回值
|
9月前
|
C# C++
vb窗体实例化与set语句的用法
vb窗体实例化与set语句的用法
用宏定义成员函数,VC6的类视图显示错误
用宏定义成员函数,VC6的类视图显示错误
|
C++ 索引
VC通过函数索引调用DLL范例
VC通过函数索引调用DLL范例
48 0
【QT】解决QT两个类之间传递变量失败,或者extern变量引用无效。
【QT】解决QT两个类之间传递变量失败,或者extern变量引用无效。
|
容器
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
240 0
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(一)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
204 0
【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )(二)
|
C++
VS 显示方法引用的设置方法
VS 中Codelens的设置面板没有相关的设置项?那如何调整出方法的引用呢?
1949 0
VS 显示方法引用的设置方法
vc里面怎样实现对话框之间传递变量的值
Dialog1的类名是CDialog1, 头文件是dialog1.h。里有成员变量CString str1, str2;Dialog2的类名是CDialog2, 头文件是dialog2.h。里有成员变量CString str11, str22;要想将Dialog1里的变量传递给Dialog2里的变量...
788 0