zoukankan      html  css  js  c++  java
  • WTL学习笔记(4)控件加强

    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的加强版,可以更改布局

    image

    image

    ToolBar:

    image

    使用方法

    // create command bar window
    HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
    // attach menu
    m_CmdBar.AttachMenu(GetMenu());
    // load command bar images
    m_CmdBar.LoadImages(IDR_MAINFRAME);
    // remove old menu
    SetMenu(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 window
    HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
    // attach menu
    m_CmdBar.AttachMenu(GetMenu());
    // load command bar images
    m_CmdBar.LoadImages(IDR_MAINFRAME);
    // remove old menu
    SetMenu(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://blog.csdn.net/blz_wowar/article/details/2046886
    http://msdn2.microsoft.com/zh-cn/library/ms364048(VS.80).aspx
    http://www.codeproject.com/KB/wtl/wtl4mfc5.aspx
  • 相关阅读:
    DevExpress- GridControl数据导出到EXCEL
    DevExpress 如何获取Repository Item的值
    ae 栅格处理异常
    VS界面控件大小调整
    C++/cli中swtich处理命令行接收到的关键字
    Civil 3d设置横断面图样式
    反射学习
    System.Diagnostics.Process启动Civil 3D及AutoCAD
    Lisp小程序,大作用,不该放弃!
    设置曲面样式之流域
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2134176.html
Copyright © 2011-2022 走看看