WTL 9.0的变化 - atlctrls.h
atlctrls.h中是对控件的封装。
第1249行增加:
void GetMargins(UINT& nLeft, UINT& nRight) const
{
ATLASSERT(::IsWindow(m_hWnd));
DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L);
nLeft = LOWORD(dwRet);
nRight = HIWORD(dwRet);
}
没什么好说的,原来的函数是以返回值的方式获取:
DWORD GetMargins() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L);
}
第1858行,CImageList变成了模板类,增加了自动销毁模板开头:
// forward declarations
template <bool t_bManaged> class CImageListT;
typedef CImageListT<false> CImageList;
typedef CImageListT<true> CImageListManaged; template <bool t_bManaged>
class CImageListT
{
public:
// Data members
HIMAGELIST m_hImageList; // Constructor/destructor/operators
CImageListT(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList)
{ } ~CImageListT()
{
if(t_bManaged && (m_hImageList != NULL))
Destroy();
}
第3706行,CListViewCtrlT.FindItem 增加了一个重载:
int FindItem(LPCTSTR lpstrFind, bool bPartial = true, bool bWrap = false, int nStart = -1) const
{
ATLASSERT(::IsWindow(m_hWnd));
LVFINDINFO lvfi = { 0 };
lvfi.flags = LVFI_STRING | (bWrap ? LVFI_WRAP : 0) | (bPartial ? LVFI_PARTIAL : 0);
lvfi.psz = lpstrFind;
return (int)::SendMessage(m_hWnd, LVM_FINDITEM, nStart, (LPARAM)&lvfi);
}
查找ListView item时不用费劲地填结构体了。
第5819行,CToolBarCtrlT增加GetItemDropDownRect:
void GetItemDropDownRect(int nIndex, LPRECT lpRect) const
{
#ifndef TB_GETITEMDROPDOWNRECT
const int TB_GETITEMDROPDOWNRECT = WM_USER + 103;
#endif
ATLASSERT(::IsWindow(m_hWnd));
BOOL bRet = (BOOL)::SendMessage(m_hWnd, TB_GETITEMDROPDOWNRECT, nIndex, (LPARAM)lpRect);
bRet; // avoid level 4 warning
ATLASSERT(bRet != FALSE);
}
用来获取工具栏上下拉框的窗口矩形大小。(_WIN32_WINNT >= 0x0600)
第5934行,CToolBarCtrlT增加:
BOOL InsertSeparator(int nIndex, int cxWidth = 8)
{
return InsertButton(nIndex, 0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0);
} BOOL AddSeparator(int cxWidth = 8)
{
return AddButton(0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0);
}
用来添加工具栏上的分隔线。
第6397行,GetToolTips、SetToolTips中的tips由小写变成了大写Tips……。
第6656行,CTrackBarCtrlT.SetSelStart 和接下来的SetSelEnd、SetSelection增加了bRedraw参数:
void SetSelStart(int nMin, BOOL bRedraw = FALSE)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, TBM_SETSELSTART, bRedraw, (LPARAM)nMin);
}
第7291行,增加了RichEdit 5的宏定义:
#if !defined(_UNICODE) && (_RICHEDIT_VER >= 0x0500)
#undef MSFTEDIT_CLASS
#define MSFTEDIT_CLASS "RICHEDIT50W"
#endif
这影响到CRichEditCtrlT调用的是哪个版本的RichEdit控件。
static LPCTSTR GetLibraryName()
{
#if (_RICHEDIT_VER >= 0x0500)
return _T("MSFTEDIT.DLL");
#elif (_RICHEDIT_VER >= 0x0200)
return _T("RICHED20.DLL");
#else
return _T("RICHED32.DLL");
#endif
}
第7825行,增加CRichEditCtrlT.GetWordBreakProc 和CRichEditCtrlT.SetWordBreakProc :
EDITWORDBREAKPROC GetWordBreakProc() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (EDITWORDBREAKPROC)::SendMessage(m_hWnd, EM_GETWORDBREAKPROC, 0, 0L);
} void SetWordBreakProc(EDITWORDBREAKPROC ewbprc)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc);
}
第8160行,为RichEdit 8增加的代码:
#if (_RICHEDIT_VER >= 0x0800)
AutoCorrectProc GetAutoCorrectProc() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (AutoCorrectProc)::SendMessage(m_hWnd, EM_GETAUTOCORRECTPROC, 0, 0L);
} BOOL SetAutoCorrectProc(AutoCorrectProc pfn)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_SETAUTOCORRECTPROC, (WPARAM)pfn, 0L);
} BOOL CallAutoCorrectProc(WCHAR ch)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_CALLAUTOCORRECTPROC, (WPARAM)ch, 0L);
} DWORD GetEditStyleEx() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (DWORD)::SendMessage(m_hWnd, EM_GETEDITSTYLEEX, 0, 0L);
} DWORD SetEditStyleEx(DWORD dwStyleEx, DWORD dwMask)
{
ATLASSERT(::IsWindow(m_hWnd));
return (DWORD)::SendMessage(m_hWnd, EM_SETEDITSTYLEEX, dwStyleEx, dwMask);
} DWORD GetStoryType(int nStoryIndex) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (DWORD)::SendMessage(m_hWnd, EM_GETSTORYTYPE, nStoryIndex, 0L);
} DWORD SetStoryType(int nStoryIndex, DWORD dwStoryType)
{
ATLASSERT(::IsWindow(m_hWnd));
return (DWORD)::SendMessage(m_hWnd, EM_SETSTORYTYPE, nStoryIndex, dwStoryType);
} DWORD GetEllipsisMode() const
{
ATLASSERT(::IsWindow(m_hWnd)); DWORD dwMode = 0;
BOOL bRet = (BOOL)::SendMessage(m_hWnd, EM_GETELLIPSISMODE, 0, (LPARAM)&dwMode);
bRet; // avoid level 4 warning
ATLASSERT(bRet != FALSE); return dwMode;
} BOOL SetEllipsisMode(DWORD dwEllipsisMode)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_SETELLIPSISMODE, 0, dwEllipsisMode);
} BOOL GetEllipsisState() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_GETELLIPSISSTATE, 0, 0L);
} BOOL GetTouchOptions(int nTouchOptions) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_GETTOUCHOPTIONS, nTouchOptions, 0L);
} void SetTouchOptions(int nTouchOptions, BOOL bEnable)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, EM_SETTOUCHOPTIONS, nTouchOptions, bEnable);
} HRESULT InsertTable(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams)
{
ATLASSERT(::IsWindow(m_hWnd));
return (HRESULT)::SendMessage(m_hWnd, EM_INSERTTABLE, (WPARAM)pRowParams, (LPARAM)pCellParams);
} HRESULT GetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (HRESULT)::SendMessage(m_hWnd, EM_GETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams);
} HRESULT SetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams)
{
ATLASSERT(::IsWindow(m_hWnd));
return (HRESULT)::SendMessage(m_hWnd, EM_SETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams);
} HRESULT InsertImage(RICHEDIT_IMAGE_PARAMETERS* pParams)
{
ATLASSERT(::IsWindow(m_hWnd));
return (HRESULT)::SendMessage(m_hWnd, EM_INSERTIMAGE, 0, (LPARAM)pParams);
} BOOL SetUiaName(LPCTSTR lpstrName)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, EM_SETUIANAME, 0, (LPARAM)lpstrName);
}
#endif // (_RICHEDIT_VER >= 0x0800)
总体来说,atlctrls.h中最大的更改就属CRichEditCtrlT了。
更新:看完了其它文件,实在没有什么值得说的,其它文件里改动最多的atltheme.h,也不过是针对vista以上的界面增加两个接口,其它的修改都是小修改。
WTL 9.0的变化 - atlctrls.h的更多相关文章
- WTL 9.0的变化 - atlapp.h
忽然发现WTL更新到9.0.4140了,便对比了一下 8.1.12085. 先看看atlapp.h中有什么大的变动. 第61行: #if defined(_SYSINFOAPI_H_) &&a ...
- WTL 9.0的变化 - atlcrack.h
atlcrack.h中是一些对消息映射的简化,9.0版本中只增加了一个WM_MOUSEWHEEL的响应,而且要求windows vista. #if (_WIN32_WINNT >= 0x060 ...
- Swift2.3 --> Swift3.0 的变化
Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...
- CMMI 2.0术语变化
过程域 vs. 实践域 “过程域”(Process Areas,PAs)在CMMI 2.0中变成了“实践域(Practice Areas,PAs)”.这样的改变,强调了CMMI 2.0是最佳实践的集合 ...
- vue.js学习:1.0到2.0的变化(区别)
一.生命周期 1.1.0的生命周期: 周期 解释 init 组件刚刚被创建,但Data.method等属性还没被计算出来 created 组件创建已经完成,但DOM还没被生成出来 beforeComp ...
- 如何在VC6.0下用pthread.h这个头文件
如何在VC6.0下用pthread.h这个头文件 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://so ...
- D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): error: #5: cannot open source input file "core_cm3.h": No such file or directory
1. 错误提示信息: D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): erro ...
- Swift3.0语法变化
写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...
- Vue2.0 相对于Vue1.0的变化:生命周期
1.生命周期 根据提供的生命周期钩子说明Vue.js实例各个阶段的情况,Vue.js 2.0对不少钩子进行了修改,以下说明:(灰色字体代表是 2.0已经废弃或者被更名的钩子,黑色字体代表1.0 和2. ...
随机推荐
- c++的CreateFile导致内存不能为written错误
LPCWSTR szFileName; szFileName=argv[2]; //LPCWSTR szFileName=L"test.txt";//文件名字可以根据自己的需要修改 ...
- [LeetCode] 419. Battleships in a Board 平板上的战船
Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...
- Export failed for github.com/hashicorp/consul: Unable to export source: exit status 128
背景 go项目,使用glide install命令去下载安装依赖,依赖中有个github.com/hashicorp/consul 问题描述 一直无法下载安装依赖成功,报错如下: [ERROR] Ex ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(三)数字取整,数组求和
一.前言 简短的sleep函数,获取时间戳:https://www.mwcxs.top/page/746.html 数字格式化 1234567890 --> 1,234,567,890:argr ...
- Android系统HAL开发实例
1.前言 Android系统使用HAL这种设计模式,使得上层服务与底层硬件之间的耦合度降低,在文件: AOSP/hardware/libhardware/include/hardware/hardwa ...
- python的import和form...import的区别
import和form...import的区别 参考链接 骏马金龙 https://www.cnblogs.com/lzc978/p/10105194.html 普通区别 import 使用impor ...
- 局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底
1. 昨天晚上同事打电话给我说自己的服务器上面的redis无故被清空了,并且查看aof 日志有很多 wget和write指令 一想就是大事不好.局域网中病毒了.. 2. 今天早上到公司忙完一阵简单看了 ...
- 小程序开发笔记【五】---基于LBS附近动态查询
实现思路 : 获取用户当前位置经纬度坐标 查询动态时将经纬度坐标传给后台 后端通过sql语句计算经纬度坐标之间的距离 // 附近20公里发的动态 按时间排序 let sql = `SELECT * , ...
- K8S CoreDNS部署失败,问题分析
1. 查询k8s集群部署pod的基本情况 如下图,我们可知容器coredns和dnsutils都部署成功,但是由于域名解析的问题,导致coredns和dnsutils的容器不断重启(原因heath检查 ...
- 一道Common Lisp 宏的练习题
这是<ANSI Common Lisp>第10章“宏”的习题第6题: 定义一个宏,接受一变量列表以及一个代码主体,并确保变量在代码主体被求值后恢复 (revert)到原本的数值