WTL -- 常用功能
使(能)控件,显示/隐藏控件
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 -- 常用功能相关推荐
- SOUI总结之常用功能
常用功能 XML特殊字符显示 空格 ( ) Tab ( ) 回车 ( ) 换行 ( ) & (&) < (<) > (>) ' (') " (&quo ...
- nginx介绍及常用功能
什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...
- Photoshop抠图、污点处理等常用功能及快捷键
Photoshop抠图.污点处理等常用功能及快捷键 局部图片获取 图片污点修护 各种乱七八糟的常用东西 常用快捷键 常用功能的查看与设置 局部图片获取 a.钢笔工具创建路径后改为选区 b.选区工具3连 ...
- SAP MM不常用功能之供应商Rebate
SAP MM不常用功能之供应商Rebate 采购中的返利流程 返利协议是卖方和买方之间签订的合同,在供应特定价值的物料时给予一定百分比的折扣. 下面是SAP系统中实现该业务场景的具体步骤. Step ...
- SAP QM 不常用功能点之 Physical-Sample Record
SAP QM 不常用功能点之 Physical-Sample Record A record that contains all master data and transaction data fo ...
- 大白菜软件常用功能介绍
大白菜软件常用功能介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.刻录光盘介绍 1.选择你需要的刻录的光盘 2.点击刻录光盘 3.确认之后点击刻录 4.等待刻录完成 转载于 ...
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新
达梦数据库常用功能及命令记录 -- 持续更新 达梦数据库常用功能及命令记录 达梦数据库语句的使用总体来说跟 oracle 很接近的, 这篇文章主要是把常用的情况和语句做了记录, 并且后续还会不断的持续 ...
- Word的常用功能设置(
Word的常用功能设置(20181229) 一.Word中中文输入为宋体,英文输入为Times New Roman实现自动切换 二.打造常用的word模板 三.word中的行间距问题 一.Word中中 ...
最新文章
- 初学者 | 一文读懂命名实体识别
- android自定义线程池工具类,妈妈再也不用担心你不会使用线程池了(ThreadUtils)...
- eclipse制作uml_Eclipse生成一个UML
- 浙江大学人工智能研究所:AI+X驱动科学发现
- 微商分销代理商城源码-代理等级和升级条件
- Jdk自带bin目录命令
- mysql主从配置对解决并发有用_MySQL主从配置,读写分离
- 【Oracle】添加注释(COMMENT ON)
- 路由器AP、路由、桥接模式有什么区别
- darkest dark theme 插件对应eclipse各版本安装方法
- ue4 umg帧动画
- hdfs 路径 could not be cleaned up
- 《Scrum实战》第2次课【取得大家的支持】课后作业汇总
- Say Hello to Integers (Java)
- CSDN博客放阿里妈妈广告代码的方法
- 游戏机生产厂家不朽的神迹碎片系统详细攻略心得
- svn版本库的拆分及迁移子目录等
- 短信验证码常见漏洞总结
- 如何轻松代理您的Android设备
- CSS (3) | 盒子
热门文章
- getdatatable mysql_C# 自定义MySqlHelp类,包含了获取DataTable的方法,但是调用时总是提示“类型初始值设定项引发异常”...
- 软件测试bug文档模板,国家标准测试计划文档模板
- 通过原码、反码、补码彻底搞清左移、右移、无符号右移
- 海思3559AV100上运行自己训练的yolov3
- win10下安装OpenAI Gym
- QT中QWidget、QDialog及QMainWindow的区别
- 在win10在使用cmder代替Linux是怎样的体验
- 人工智能急需网络安全“背书”
- 使用artTemplate模板将json转换为html页面
- java内存管理(适合初学者)