博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WTL学习笔记(4)控件加强
阅读量:7042 次
发布时间:2019-06-28

本文共 3119 字,大约阅读时间需要 10 分钟。

 

1.CHyperLink

扩展了Static Text控件

URL超链接

2.CCheckListViewCtrlImpl

一个以checkbox为元素的ListView控件

3.CWaitCursor && CCustomWaitCursor

构造函数中载入等待的图标,析构函数中还原,省去了手动还原的步骤,CCustomWaitCursor继承CWaitCursor,允许采用自定义的图标

4.CSortListViewCtrl

提供SortItems方法对列进行排序

5.关于OwnerDraw和CustomDraw

OwnerDraw将会重绘控件整体UI呈现,CustomDraw只不过更改控件其中的一个属性而已.

好比WPF重写Render方法就是OwnerDraw,更改一个属性则是CustomDraw

6.CBitmapButton

在一个位图中加载多个按钮资源状态,比normal,pushed,hover,disable

CImageList iml;    iml.CreateFromImage ( IDB_ALYSON_IMGLIST, 81, 1, CLR_NONE, IMAGE_BITMAP,                           LR_CREATEDIBSECTION );    m_wndBmpBtn.SubclassWindow ( GetDlgItem(IDC_ALYSON_BMPBTN) );    m_wndBmpBtn.SetToolTipText ( _T("Alyson") );    m_wndBmpBtn.SetImageList ( iml );        m_wndBmpBtn.SetImages ( 0, 1, 2, 3 );

7.ReBar

ReBar:可以说的ToolBar的加强版,可以更改布局

ToolBar:

使用方法

// create command bar windowHWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);// attach menum_CmdBar.AttachMenu(GetMenu());// load command bar imagesm_CmdBar.LoadImages(IDR_MAINFRAME);// remove old menuSetMenu(NULL);HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);AddSimpleReBarBand(hWndCmdBar);AddSimpleReBarBand(hWndToolBar, NULL, TRUE);CreateSimpleStatusBar();m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);UIAddToolBar(hWndToolBar);UISetCheck(ID_VIEW_TOOLBAR, 1);UISetCheck(ID_VIEW_STATUS_BAR, 1);

(1)使用ReBar之前必须先调用CreateSimpleReBar方法,然后再调用AddSimpleReBarBand方法

HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);AddSimpleReBarBand(hWndToolBar, NULL, TRUE);

(2)对Menu添加ReBar功能,先将Menu添加到CCommandBarCtrl里面,然后调用AddSimpleReBarBand方法

// create command bar windowHWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);// attach menum_CmdBar.AttachMenu(GetMenu());// load command bar imagesm_CmdBar.LoadImages(IDR_MAINFRAME);// remove old menuSetMenu(NULL);

8.GDI双缓冲机制

WTL提供了CDoubleBufferImpl双缓冲实现,及默认的CDoubleBufferWindowImpl,原理是利用CMemoryDC创建了一个bitmap,继承CDoubleBufferImpl的类只需要重写DoPaint方法即可

CMemoryDC的实现

class CMemoryDC : public CDC{public:// Data members    HDC m_hDCOriginal;    RECT m_rcPaint;    CBitmap m_bmp;    HBITMAP m_hBmpOld;// Constructor/destructor    CMemoryDC(HDC hDC, RECT& rcPaint) : m_hDCOriginal(hDC), m_hBmpOld(NULL)    {        m_rcPaint = rcPaint;        CreateCompatibleDC(m_hDCOriginal);        ATLASSERT(m_hDC != NULL);        m_bmp.CreateCompatibleBitmap(m_hDCOriginal, m_rcPaint.right - m_rcPaint.left, m_rcPaint.bottom - m_rcPaint.top);        ATLASSERT(m_bmp.m_hBitmap != NULL);        m_hBmpOld = SelectBitmap(m_bmp);        SetViewportOrg(-m_rcPaint.left, -m_rcPaint.top);    }    ~CMemoryDC()    {        ::BitBlt(m_hDCOriginal, m_rcPaint.left, m_rcPaint.top, m_rcPaint.right - m_rcPaint.left, m_rcPaint.bottom - m_rcPaint.top, m_hDC, m_rcPaint.left, m_rcPaint.top, SRCCOPY);        SelectBitmap(m_hBmpOld);    }};
参考:

转载地址:http://fptal.baihongyu.com/

你可能感兴趣的文章
C语言dll文件的说明以及生成、使用方法
查看>>
.NET零基础入门05:委托与事件
查看>>
【阿里云MVP公益共创项目】服务数万爱心教师支教,推动中国渔业生态保护
查看>>
Linux命令复习和练习_03
查看>>
使用 github pages, 快速部署你的静态网页
查看>>
react 之 state 对象
查看>>
Java中的锁原理、锁优化、CAS、AQS
查看>>
“智能厨电+渠道精耕”,华帝迈出“关键一步”
查看>>
Scrapy爬虫(2)爬取新浪旅游图片
查看>>
Nginx反向代理以及负载均衡配置
查看>>
巨头抢滩视频云 金山云稳坐头把交椅
查看>>
索尼富士康领投,AR显示技术厂商Digilens获得2200万美元融资
查看>>
Qt5 GUI 开发的应用易受远程代码执行漏洞的影响
查看>>
搞懂Java动态代理
查看>>
NTKO使用说明
查看>>
django实现目录上传(最简单的方法)
查看>>
用update和replace在sql中替换某一个字段的部分内容
查看>>
Web框架原理
查看>>
dTree JS 基本用法
查看>>
docker images 保存导入导出、容器导入导出
查看>>