`
testcs_dn
  • 浏览: 113809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
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));
分享到:
评论

相关推荐

    如何在VC中改变控件的背景色

    在VC中改变控件的背景色是开发者在使用Microsoft Visual C++进行界面开发时常遇到的需求,特别是在基于MFC(Microsoft Foundation Classes)的应用程序开发中。在本篇文章中,我们将详细了解如何在VC中改变控件的...

    vb-EnumChildWindows所有窗口及子窗口句柄免费版

    vb-EnumChildWindows所有窗口及子窗口句柄是一款vb枚举窗口枚举出所有父窗口和其对应的子窗口句柄信息获取查看工具,每个子窗口控件都具有一个在其兄弟中唯一的窗口句柄和ID值。对于句柄和ID这两者,知道其中的一个...

    VC中获取窗口句柄的各种方法

    在Microsoft Visual C++ (VC) 开发环境中,窗口句柄(HWND)是Windows API中用于标识应用程序窗口的一个重要标识符。窗口句柄是系统分配的一个唯一整数值,它允许程序与特定窗口进行交互。本篇文章将详细介绍在VC中...

    vc用代码动态添加控件

    这两个函数接受控件类型、父窗口句柄、控件ID、位置、大小、样式等相关参数。 4. **设置控件属性**: 一旦控件创建成功,你可以使用`SetWindowLong`或`SetWindowPos`等函数调整其属性,如字体、颜色、位置和大小等。...

    VC知识库文章 - 树控件的应用 -- 求子树节点的集.rar_vc 树控件

    在Windows编程中,Visual C++(简称VC)为我们提供了丰富的用户界面组件,其中包括树形控件(Tree Control),它常用于展示层次结构的数据。本文将深入探讨如何在VC环境中利用树控件,并专注于一个特定的问题:如何...

    VC遍历窗口及窗口子控件

    该程序可遍历当前打开的所有窗口,以及每个窗口的子控件,显示出窗口名字,子控件名字及类型,使用VC++开发

    VC常用控件简介

    【VC常用控件简介】 在Microsoft Visual C++ (VC++)编程环境中,常用控件是构建用户界面的关键元素,它们提供用户交互的界面元素。本文主要介绍传统控件的使用方式,特别是控件通知消息的处理,以及静态控件的创建...

    VC 调用VB控件的例子.rar

    6. **界面集成**:将VB控件添加到VC的窗口或对话框中,通常需要使用`CreateWindowEx`函数或MFC的`CWnd::CreateControl`方法,指定控件类名和父窗口句柄。 7. **资源管理**:在程序运行过程中,正确管理VB控件的生命...

    VC启动并遍历主窗体的所有控件

    printf("控件句柄: %p, 类名: %s, ID: %d\n", hwnd, className, id); // 继续枚举 return TRUE; } ``` - 调用`EnumChildWindows()`遍历: ```cpp EnumChildWindows(hWndMain, EnumChildProc, 0); ``` 5. ...

    VC--常用的系统函数

    - `CWnd::GetDlgItem`:获取指定控件的句柄。 - `CWnd::GetWindowText`:获取窗口标题文本。 - `C::atoi`:字符串转整数。 - `itoa`:整数转字符串。 - `CWnd::SetWindowText`:设置窗口标题文本。 - `CWnd::...

    VC控件大小随窗体改变

    在OnSize()函数内,通过循环遍历所有控件,使用GetDlgItem()获取控件句柄,然后调用GetWindowRect()得到控件的原始矩形,再用ScreenToClient()将其转换为相对于对话框的坐标。接下来,计算比例并使用MoveWindow()...

    VC6.0--socket编程服务器通信

    Socket编程是计算机网络编程中的重要组成部分,特别是在Windows环境下,Visual C++ 6.0(简称VC6.0)因其简洁的界面和强大的编程能力,常被用于开发基于Socket的网络应用。本篇将深入探讨如何在VC6.0中进行Socket...

    VC通用控件背景透明的方法

    当控件需要绘制其背景时,会发送这些消息,我们可以捕获并处理这些消息来实现透明效果。 1. **WM_CTLCOLORSTATIC**:这是静态文本控件(Static)发送的一个消息,通知父窗口准备绘制控件的背景。我们可以通过重载`...

    vc Tree控件使用源码

    在VC++编程环境中,"vc Tree控件"指的是MFC(Microsoft Foundation Classes)库中的CTreeCtrl类,它是Windows API中的TreeView控件的封装。这个控件常用于创建树状结构,显示层次化的数据,例如文件系统目录或应用...

    VC动态改变对话框大小,其中控件也跟着改变

    在VC++编程环境中,动态改变对话框(DLG)的大小是一项常见的需求,特别是在设计用户界面时,为了提供更好的用户体验,我们需要让对话框及其控件能够根据窗口的变化自适应布局。本篇文章将深入探讨如何实现这一功能,...

    vc改变控件颜色

    2. **获取控件句柄**:在代码中,我们需要获取控件的句柄,以便对它进行操作。句柄可以通过ON_WM_CREATE()消息处理函数或者其他适当的消息响应函数来获取。 3. **设置颜色**:改变控件颜色主要通过调用Windows API...

    vc6.0 对话框 控件 改变字体颜色

    在函数内,你需要创建一个画刷对象(CBrush),设置其颜色为你想要的字体颜色,然后使用CDC::SetBkColor()函数设置背景颜色,最后返回画刷的句柄。 ```cpp HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT...

    在VC中使用picture控件显示图片

    4. **在对话框或视图中使用自定义控件**:在对话框资源中,添加一个CStatic控件,并将其Class属性设置为你刚才创建的类名(例如,CMyStatic)。在代码中,你可以通过LoadBitmap()函数加载图片资源,并调用SetImage()...

    捕捉屏幕图像,支持全屏指定区窗口捕捉VC源码-系统控制

    为了支持指定窗口的捕获,程序需要获取目标窗口的句柄并创建其窗口DC,然后将窗口的内容复制到内存DC,最后保存为图像文件。此外,全屏捕获相对简单,只需获取桌面DC并复制其内容即可。 总之,这个项目提供了一套...

Global site tag (gtag.js) - Google Analytics