在 CTreeCtrl 中枚举系统中的所有窗口!(II)

MFC树控件CTreeCtrl中为每个item节点动态添加提示信息,并定时更新提示内容 头文件:MTreeCtrl.h #if !defined(AFX_MTREECTRL_H__87B2DD8F_F569_4294_9607_7676050EED34__INCLUDED_) #define AFX_MTREECTRL_H__87B2DD8F_F569_4294_9607_7676050EED34__INCLUDED_ #if _MSC_VER > 1000 #pra 阅读详情
这是实现文件 
 
// WinList.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "mfc.h" 
#include "WinList.h" 
#include "mfcApi.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CWinList dialog 
 
 
CWinList::CWinList(CWnd* pParent /*=NULL*/) 
        : CDialog(CWinList::IDD, pParent) 
{ 
        //{{AFX_DATA_INIT(CWinList) 
                // NOTE: the ClassWizard will add member initialization here 
        //}}AFX_DATA_INIT 
} 
 
 
void CWinList::DoDataExchange(CDataExchange* pDX) 
{ 
        CDialog::DoDataExchange(pDX); 
        //{{AFX_DATA_MAP(CWinList) 
        DDX_Control(pDX, IDTREE, m_Tree); 
        //}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CWinList, CDialog) 
        //{{AFX_MSG_MAP(CWinList) 
        ON_BN_CLICKED(IDREFRESH, OnRefresh) 
        ON_NOTIFY(TVN_SELCHANGED, IDTREE, OnSelchangedTree) 
        //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CWinList message handlers 
 
static CDWordArray WinArray; 
static unsigned long Level; 
static int Ignore[10]; 
static HWND hPrevWnd; 
 
BOOL CALLBACK CWinList::EnumChildProc(HWND hwnd,LPARAM lParam) 
{ 
        Ignore[Level]++; 
        if (Ignore[Level+1]) Ignore[Level+1]--; 
        else 
        {       WinArray.Add((unsigned long)((Level<<16)|(unsigned long)hwnd)); 
                Level++;Ignore[Level+1]=0; 
                EnumChildWindows(hwnd,EnumChildProc,(long)0); 
                Level--; 
        } 
         
        return TRUE; 
} 
 
BOOL CALLBACK CWinList::EnumWindowsProc(HWND hwnd, LPARAM lParam) 
{ 
        WinArray.Add((unsigned long)hwnd); 
        Level=1;Ignore[Level+1]=0; 
        EnumChildWindows(hwnd,EnumChildProc,(long)0); 
        return TRUE; 
} 
 
void CWinList::BuiltTree(HWND hWnd) 
{       char Temp[90]; 
        char Text[50]; 
        char Name[20]; 
 
        TreeItem.hParent=RootArray[RootPt]; 
 
        ::GetWindowText(hWnd,Text,50); 
        ::GetClassName(hWnd,Name,20); 
        sprintf(Temp,"[%04x]:{%s}:%s",hWnd,Name,Text); 
        TreeItem.item.pszText=Temp; 
        TreeItem.item.lParam=(unsigned long)hWnd; 
        HTREEITEM TempItem=m_Tree.InsertItem(&TreeItem); 
        RootArray[RootPt+1]=TempItem; 
} 
 
void CWinList::DrawFlash(HWND hWnd) 
{ 
   HDC  hDC; 
   RECT rc; 
   HPEN hPen; 
 
   ::GetWindowRect(hWnd, &rc); 
   hDC=::GetWindowDC(hWnd); 
   ::SetROP2(hDC,R2_NOT); 
   hPen=::CreatePen(PS_INSIDEFRAME,5*GetSystemMetrics(SM_CXBORDER),RGB(255,0,0)); 
   ::SelectObject(hDC,hPen); 
   ::SelectObject(hDC,GetStockObject(NULL_BRUSH)); 
   ::Rectangle(hDC,0,0,rc.right-rc.left,rc.bottom-rc.top); 
   ::ReleaseDC(hWnd,hDC); 
   ::DeleteObject(hPen); 
} 
 
void CWinList::Refresh() 
{       RootArray[0]=TVI_ROOT; 
        RootPt=0; 
 
        TreeItem.hInsertAfter=TVI_LAST; 
        TreeItem.item.mask=TVIF_TEXT|TVIF_PARAM; 
        WinArray.RemoveAll(); 
        m_Tree.SetFont(&TreeFont); 
        m_Tree.DeleteAllItems(); 
        Level=0; 
        for(int j=0;j<10;j++) Ignore[j]=0; 
        EnumWindows(EnumWindowsProc,(long)0); 
         
        for(int i=0;i<WinArray.GetSize();i++) 
        {       RootPt=(int)((WinArray[i]&0xFFFF0000)>>16); 
                BuiltTree((HWND)(WinArray[i]&0x0000FFFF)); 
        } 
} 
 
BOOL CWinList::OnInitDialog()  
{ 
        CDialog::OnInitDialog(); 
         
        // TODO: Add extra initialization here 
        m_hSelected=NULL; 
        hPrevWnd=NULL; 
        Refresh();       
        return TRUE;  // return TRUE unless you set the focus to a control 
                      // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CWinList::OnRefresh()  
{ 
        // TODO: Add your control notification handler code here 
        Refresh();       
} 
 
void CWinList::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
        NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
        // TODO: Add your control notification handler code here 
 
        HWND hWnd=(HWND)pNMTreeView->itemNew.lParam; 
        m_hSelected=hWnd; 
        if (hPrevWnd) DrawFlash(hPrevWnd); 
        hPrevWnd=hWnd; 
        DrawFlash(hWnd); 
 
        *pResult = 0; 
} 
 
BOOL CWinList::DestroyWindow()  
{ 
        // TODO: Add your specialized code here and/or call the base class 
        if (hPrevWnd) DrawFlash(hPrevWnd); 
        return CDialog::DestroyWindow(); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
//      DLL Export Interface 
 
extern "C" 
HWND FAR PASCAL EXPORT SearchWindow() 
{        
        CWinList WinList; 
        if (WinList.DoModal()==IDOK) 
                return WinList.m_hSelected; 
        else 
                return (HWND)NULL; 
} 
 
 
-- 
┌————┐ 
│ 贝  贝 │  
└————┘  
              
告别参差不齐:RecyclerView 多布局间距统一适配指南 本文详细介绍了Android中RecyclerView在不同布局模式下统一设置间距的方法。首先说明了基础配置步骤,包括添加依赖和布局设置。然后针对网格布局和瀑布流布局,提供了GridSpacingItemDecoration装饰器的实现代码及使用方式;对于线性布局,给出了SpacesItemDecoration的实现方案。文章通过示例代码展示了如何为不同布局模式配置统一间距,确保界面美观一致。 阅读详情

相关推荐

VisionMaster4.2.0与C#控件开发实战:从入门到精通的完整指南

本文详细介绍了VisionMaster4.2.0与C#控件开发的实战指南,从基础环境搭建到核心控件使用,再到高级功能实现。通过VmFrontendControl、VmGlobalToolControl等核心控件的深入解析,帮助开发者快速掌握机器视觉应用开发技巧,提升开发效率。特别适合需要集成VisionMaster4.2.0 SDK进行视觉系统开发的C#程序员。

weixin_42665725的博客 383

c-free打开错误:control "file tree"has no parent window

第一步: 按win+r 第二步:出现上述对话框后在里面输入regedit,打开注册表。 第三步:找到c-free,右键删除。 第四步:删除cfree,重新安装即可。

qq_42401369的博客 1万+

跨域问题 - 其他 method 都没有跨域问题,只有delete有跨域的问题

跨域的配置等一切正常,GETPOSTPUTOPTIONS都可以正常访问, 唯独有一个DELETE有跨域的问题, 经过排查发现这个DELETE请求有body, 经过一系列排查, 发现头部有一个不太正常的值是为了避免浏览器的影响, 直接在 postman 中新建一个请求, 竟然也有跨域的问题, 后来把的值改成了请求就可以正常调用了.

galoiszhou的博客 528

在 CTreeCtrl 中枚举系统中的所有窗口!(I)

发信人: cvisual (贝贝), 信区: VisualC 标  题: 在 CTreeCtrl 中枚举系统中的所有窗口!(I) 发信站: BBS 水木清华站 (Tue May 19 14:35:11 1998)  本文将给出一个源程序 在一个对话框中的TreeCtrl中用树的形式枚举窗口  这是头文件  // WinList.h : header file //  ///////////////

蝈蝈俊.net 1590

经典密码体制(上)

头歌

shannidawang的博客 3086

Ansys HFSS 中的同轴电缆仿真

准确模拟它们的行为对于确保 RF 系统的最佳性能至关重要。在本博客中,我们将介绍在 HFSS 中设置同轴电缆仿真并绘制插入损耗、回波损耗和电场分布的过程。将波端口分配给同轴线的两端以激励模型,并定义了从 1 GHz 到 20 GHz 的频率扫描以评估其宽带性能。铜分配给内部导体,铝分配给外部导体。介电区域使用 PTFE 定义,其相对介电常数为 2.1,损耗角正切为 0.00022。仿真完成后,结果用于绘制整个频率范围内的回波损耗和插入损耗。此外,电介质内的电场分布也被绘制和动画化。

jkh920184196的博客 1911

在 CTreeCtrl 中枚举系统中的所有窗口!(II) (转)

在 CTreeCtrl 中枚举系统中的所有窗口!(II) (转)[@more@]发信人:cvisual(贝贝),信区:VisualC标题:在CTreeCtrl中枚举系统中的所有窗口!(II)发信站:BBS...

csd3176的博客 114

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4944

MFC学习记录-CTreeCtrl的使用

转载自:实现CTreeCtrl父子节点的联动选择 -给工程添加MFC类,继承CTreeCtrl,实现父节点与子节点的选中联动后, 类名为:CTreeCheckCtrl -给自己的CTreeCtrl添加类变量后,在类声明中生成CTreeCtrl m_My_Tree; 修改为 CTreeCheckCtrl m_My_Tree; 就可以实现父子联动了 插入节点记录 void CTreeTestDlg...

m0_37837218的博客 647

Workbuddy+DeepSeek V4傻瓜流配置全指南:API接入、模型切换与Agent实战

AI编程助手的核心价值不在于模型本身,而在于如何稳定、安全、低门槛地调用其能力。Agent作为智能体范式,依赖可靠的运行时环境与标准化API通信;DeepSeek V4系列凭借高吞吐、低延迟和强工具调用支持,成为当前生产级Agent的理想引擎。Workbuddy则通过本地配置管理、环境变量注入与UTF-8无BOM容错等工程设计,将复杂部署简化为可复现、可版本化、可团队协同的实践流程。本文聚焦API接入路径下的真实卡点——从Key获取验证、models.json字段语义到沙箱权限控制,覆盖开发者在Window

weixin_33702545的博客 2399

2026年佰维存储数字IC笔试试卷带答案

建立时间是有效时钟沿到来前,输入数据必须稳定保持的最短时间。保持时间是有效时钟沿到来后,输入数据必须继续稳定保持的最短时间。

Open 104

在VC++中改变树状控件子项Item字体和颜色

在VC++中改变树状控件子项Item字体和颜色Setting color and font attribute of  the item for CTreeCtrl in VC++.翻译Zafir Anjum 的文章Setting color and font attribute for individual items原文http://www.codeguru.com/Cpp/control

小Pine的专栏 3781

微信小程序 - 获取当前日期时间(函数封装)

效果图 前言 摘自微信小程序demo程序中utils.js方法。 普通newDate()出来的日期时间,并不是我们想要的格式,所以要进行格式整理。 解决方案 打开utils.js文件(随意),复制以下代码: /** *获取当前时间 *@description自定义日期分钟秒数 *@param{Object}date-newData()对象 *@returnString */ functionformatTime(date){ //年月日

🏆 前端领域优质创作者 2844

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

解决 无法获取“”控件的窗口句柄。不支持无窗口的 ActiveX 控件

在win7 下面调用ActiveX出现如题错误。xp下测试正常。 编译环境: VS2008 编程语言:CSharp 系统版本:Windows7 OCX控件:无窗口的OCX控件 根据微软官方的说法,导致这个错误是由于Windows的保护机制,在编译后的exe的PE头部,有一个DEP(Data Execution Prevention)的功能。需要将这个功能关闭,就能正常运行...

weixin_30662011的博客 1205

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

CTreeCtrl树控件:如何给MFC中的CTreeCtrl树控件添加复选框及选中状态

1、效果如下: 2、首先需要重写树控件类 CCheckTreeCtrl.h #pragma once typedef enum TREE_STATE { STATE_NONE, STATE_UNCHECKED, STATE_CHECKED, STATE_INTERMEDIATE, STATE_DISABLED }; //当树中某项的选中状态被改变时,会触发NM_CHECKSTATECHANGED消息,数据类型为TREEINFO //ON_NOTIFY(NM_CHECKSTATECHANG

欧特GO 3413

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mfc ctreectrl遍历所有节点

遍历节点,并取得节点文本: 其中  m_vecTreeNode是CDlgTree成员变量(vector  m_vecTreeNode),将所有节点文本保存。 由于使用多字符集,所以可以strTemp = cstr.GetBuffer(0);//是正确的如果使用Unicode,参考http://blog.youkuaiyun.com/xuepiaofei1/article/details/47093375传

XuePiaoFei1的专栏 1万+
上一篇: 在 CTreeCtrl 中枚举系统中的所有窗口!(I)
下一篇: 比尔盖茨给青少年的11条准则
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值