使(能)控件,显示/隐藏控件

this->GetDlgItem(IDC_BUTTON_HELP).EnableWindow(FALSE); // 按钮使能
this->GetDlgItem(IDC_BUTTON_HELP).ShowWindow(FALSE);   // 按钮隐藏

更新控件与变量的关系

if(!DoDataExchange(true)) // 将控件上的内容更新到变量上return FALSE;
if(!DoDataExchange(false)) // 将变量的值更新到控件上return FALSE;

WTL对话框程序创建临时控制台

#include <fcntl.h > // for _O_TEXT _open_osfhandle
#include <iostream>
#include <io.h> // for _open_osfhandle
using namespace std;void ConsoleEcho(BOOL bEcho)
{if(!bEcho)return;// 带窗口的应用程序,创建一个临时的控制台,以供cout输出AllocConsole();HANDLE hin = ::GetStdHandle(STD_INPUT_HANDLE);HANDLE hout = ::GetStdHandle(STD_OUTPUT_HANDLE);int hcin = _open_osfhandle((intptr_t)hin,_O_TEXT);FILE* fpin = _fdopen(hcin,"r");*stdin = *fpin; int hcout = _open_osfhandle((intptr_t)hout,_O_TEXT);FILE* fpout = _fdopen(hcout,"wt");*stdout = *fpout;std::ios_base::sync_with_stdio();std::cout << "Test Console Echo" << endl << endl;
}int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{HRESULT hRes = ::CoInitialize(NULL);ATLASSERT(SUCCEEDED(hRes));// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used::DefWindowProc(NULL, 0, 0, 0L);AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);  // add flags to support other controlshRes = _Module.Init(NULL, hInstance);ATLASSERT(SUCCEEDED(hRes));g_hInstance = hInstance;// 控制台回显ConsoleEcho(TRUE);int nRet = Run(lpstrCmdLine, nCmdShow);// 程序退出时,清理一些数据ClearEnvironment();_Module.Term();::CoUninitialize();return nRet;
}

树操作

添加树控件

添加变量映射

BEGIN_DDX_MAP(CMainAppDlg)DDX_CONTROL(IDC_TREEXZM, m_TreeXzm)
END_DDX_MAP()

添加消息映射:树单击消息

BEGIN_MSG_MAP(CMainAppDlg)COMMAND_ID_HANDLER(IDOK, OnOK)         // OK按钮消息映射COMMAND_ID_HANDLER(IDCANCEL, OnCancel) // Cancle按钮消息映射NOTIFY_HANDLER_EX(IDC_TREEXZM, NM_CLICK, OnTreeXzmClickTree) // 树控件的单击消息
END_MSG_MAP()

变量的定义

protected:CXzmTreeViewCtrl    m_TreeXzm;

树类的扩展定义

#pragma onceclass CXzmTreeViewCtrl :public CWindowImpl<CXzmTreeViewCtrl, CTreeViewCtrl>
{
public:CXzmTreeViewCtrl(void){}~CXzmTreeViewCtrl(void){}
public://DECLARE_WND_CLASS(NULL)DECLARE_WND_SUPERCLASS(NULL, CTreeViewCtrl::GetWndClassName())BOOL PreTranslateMessage(MSG* pMsg){pMsg;return FALSE;}BEGIN_MSG_MAP(CXzmTreeViewCtrl)REFLECTED_NOTIFY_CODE_HANDLER_EX(TVN_ITEMEXPANDING, OnItemExpanding)DEFAULT_REFLECTION_HANDLER()END_MSG_MAP()LRESULT OnItemExpanding(NMHDR* phdr){NMTREEVIEW* pnmtv = (NMTREEVIEW*)phdr;if (pnmtv->action & TVE_COLLAPSE)return TRUE;elsereturn FALSE;}
};

树的初始化

void CMainAppDlg::InitXzmTree()
{HTREEITEM hRoot, hItem;TCHAR pc_name[64] = { 0 };TV_INSERTSTRUCT TCItem;//插入数据项数据结构TCItem.hParent = TVI_ROOT;//增加根项TCItem.hInsertAfter = TVI_LAST;//在最后项之后TCItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;//设屏蔽TCItem.item.pszText = _T("COM");TCItem.item.lParam = 0;//序号 TCItem.item.iImage = 0;//正常图标 TCItem.item.iSelectedImage = 1;//选中时图标 hItem = m_TreeXzm.InsertItem(&TCItem);//返回根项句柄 m_TreeXzm.Expand(hItem, TVE_EXPAND);//展开上一级树hRoot = hItem;HTREEITEM hItemx = NULL;/*HTREEITEM*/ hItemx = InsertXzmTree( m_TreeXzm, hItem, TCItem, _T("Node01"));if (hItemx != NULL){InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点01"));InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点02"));InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点03")); m_TreeXzm.Expand(hItemx, TVE_COLLAPSE);}/*HTREEITEM*/ hItemx = InsertXzmTree( m_TreeXzm, hItem, TCItem, _T("Node02"));if (hItemx != NULL){InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点01"));InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点02"));InsertXzmTree( m_TreeXzm, hItemx, TCItem, _T("子节点03")); m_TreeXzm.Expand(hItemx, TVE_COLLAPSE);}
}

结果如下图

树的单击消息处理

BOOL CMainAppDlg::IsYourChild(ATL::CString strParentName, CTreeViewCtrl &Tree,HTREEITEM &hSelItem)
{HTREEITEM hParentItem = Tree.GetParentItem(hSelItem);BSTR bstr = NULL;Tree.GetItemText(hParentItem,bstr);if(bstr == NULL)return FALSE;ATL::CString strParent(bstr);if(0 == strParentName.Compare(strParent)){return TRUE;}else{while (NULL != hParentItem){bstr = NULL;hParentItem = Tree.GetParentItem(hParentItem);Tree.GetItemText(hParentItem,bstr);strParent.Format(_T("%s"),bstr);if(0 == strParentName.Compare(strParent))return TRUE;}}return FALSE;
}LRESULT CMainAppDlg::OnTreeXzmClickTree(NMHDR* phdr)
{POINT pt;GetCursorPos(&pt);POINT MousePosition = pt;m_TreeXzm.ScreenToClient ( &MousePosition );TVHITTESTINFO HitInfo;HitInfo.pt = MousePosition;UINT uiMask = TVHT_ONITEMLABEL;//TVHT_ONITEM;// | TVHT_ONITEMRIGHT;HTREEITEM hItemHit = m_TreeXzm.HitTest(&HitInfo);if (hItemHit != NULL &&                      // ObviousuiMask & HitInfo.flags &&             // Make sure we are on the labelm_TreeXzm.GetParentItem(hItemHit) != NULL) // Also that we have NO Parent!!{BSTR bstr = NULL;m_TreeXzm.GetItemText(hItemHit,bstr);//if(bstr == NULL) return 0;ATL::CString str(bstr);if(IsYourChild( _T("Node01"),m_TreeXzm,hItemHit)){if(0 == str.Compare( _T("子节点01"))) {}else if(0 == str.Compare( _T("子节点02"))) {}else if(0 == str.Compare( _T("子节点03"))) {}}else if(IsYourChild( _T("Node01"),m_TreeXzm,hItemHit)){if(0 == str.Compare( _T("子节点01"))) {}else if(0 == str.Compare( _T("子节点02"))) {}else if(0 == str.Compare( _T("子节点03"))) {}}}
}

WTL -- 常用功能相关推荐

  1. SOUI总结之常用功能

    常用功能 XML特殊字符显示 空格 ( ) Tab ( ) 回车 ( ) 换行 ( ) & (&) < (<) > (>) ' (') " (&quo ...

  2. nginx介绍及常用功能

    什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...

  3. Photoshop抠图、污点处理等常用功能及快捷键

    Photoshop抠图.污点处理等常用功能及快捷键 局部图片获取 图片污点修护 各种乱七八糟的常用东西 常用快捷键 常用功能的查看与设置 局部图片获取 a.钢笔工具创建路径后改为选区 b.选区工具3连 ...

  4. SAP MM不常用功能之供应商Rebate

    SAP MM不常用功能之供应商Rebate 采购中的返利流程 返利协议是卖方和买方之间签订的合同,在供应特定价值的物料时给予一定百分比的折扣. 下面是SAP系统中实现该业务场景的具体步骤. Step ...

  5. SAP QM 不常用功能点之 Physical-Sample Record

    SAP QM 不常用功能点之 Physical-Sample Record A record that contains all master data and transaction data fo ...

  6. 大白菜软件常用功能介绍

    大白菜软件常用功能介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.刻录光盘介绍 1.选择你需要的刻录的光盘 2.点击刻录光盘 3.确认之后点击刻录 4.等待刻录完成 转载于 ...

  7. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  8. 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新

    达梦数据库常用功能及命令记录 -- 持续更新 达梦数据库常用功能及命令记录 达梦数据库语句的使用总体来说跟 oracle 很接近的, 这篇文章主要是把常用的情况和语句做了记录, 并且后续还会不断的持续 ...

  9. Word的常用功能设置(

    Word的常用功能设置(20181229) 一.Word中中文输入为宋体,英文输入为Times New Roman实现自动切换 二.打造常用的word模板 三.word中的行间距问题 一.Word中中 ...

最新文章

  1. 初学者 | 一文读懂命名实体识别
  2. android自定义线程池工具类,妈妈再也不用担心你不会使用线程池了(ThreadUtils)...
  3. eclipse制作uml_Eclipse生成一个UML
  4. 浙江大学人工智能研究所:AI+X驱动科学发现
  5. 微商分销代理商城源码-代理等级和升级条件
  6. Jdk自带bin目录命令
  7. mysql主从配置对解决并发有用_MySQL主从配置,读写分离
  8. 【Oracle】添加注释(COMMENT ON)
  9. 路由器AP、路由、桥接模式有什么区别
  10. darkest dark theme 插件对应eclipse各版本安装方法
  11. ue4 umg帧动画
  12. hdfs 路径 could not be cleaned up
  13. 《Scrum实战》第2次课【取得大家的支持】课后作业汇总
  14. Say Hello to Integers (Java)
  15. CSDN博客放阿里妈妈广告代码的方法
  16. 游戏机生产厂家不朽的神迹碎片系统详细攻略心得
  17. svn版本库的拆分及迁移子目录等
  18. 短信验证码常见漏洞总结
  19. 如何轻松代理您的Android设备
  20. CSS (3) | 盒子

热门文章

  1. getdatatable mysql_C# 自定义MySqlHelp类,包含了获取DataTable的方法,但是调用时总是提示“类型初始值设定项引发异常”...
  2. 软件测试bug文档模板,国家标准测试计划文档模板
  3. 通过原码、反码、补码彻底搞清左移、右移、无符号右移
  4. 海思3559AV100上运行自己训练的yolov3
  5. win10下安装OpenAI Gym
  6. QT中QWidget、QDialog及QMainWindow的区别
  7. 在win10在使用cmder代替Linux是怎样的体验
  8. 人工智能急需网络安全“背书”
  9. 使用artTemplate模板将json转换为html页面
  10. java内存管理(适合初学者)