• duilib帮助


    1.窗口基类:见介绍

    顺便贴下出来,留底。

    .h

     1 class WindowImplBase : public CWindowWnd, public INotifyUI, public IMessageFilterUI, public IDialogBuilderCallback, public SkinChangedReceiver
     2 {
     3 public:
     4     WindowImplBase();
     5     virtual ~WindowImplBase();
     6 
     7     virtual void OnFinalMessage(HWND hWnd);
     8 
     9     virtual void Init();
    10 
    11     virtual CControlUI* CreateControl(LPCTSTR pstrClass);
    12 
    13     virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
    14 
    15     virtual LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    16 
    17     virtual LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    18 
    19     virtual LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    20 
    21     virtual LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    22 
    23     virtual LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    24 
    25     virtual LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    26 
    27     virtual LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    28 
    29     virtual LRESULT OnMouseWheel(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    30 
    31     virtual LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);    
    32 
    33     virtual LRESULT OnMoving(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);    
    34 
    35     virtual LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    36 
    37     virtual LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    38 
    39     virtual LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    40 
    41     virtual LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    42 
    43     virtual LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    44 
    45     virtual LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    46 
    47     virtual LRESULT OnNCLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    48 
    49     virtual LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    50 
    51     virtual LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    52 
    53     virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
    54 
    55     virtual LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    56 
    57 protected:
    58     virtual tString GetSkinFolder();
    59     virtual tString GetSkinFile() = 0;
    60 
    61     virtual LRESULT ResponseDefaultKeyEvent(WPARAM wParam, bool& bHandled);
    62 
    63 protected:
    64     CPaintManagerUI        paint_manager_;
    65 
    66 };

    .cpp

      1 WindowImplBase::WindowImplBase()
      2 {}
      3 
      4 WindowImplBase::~WindowImplBase()
      5 {}
      6 
      7 CControlUI* WindowImplBase::CreateControl(LPCTSTR pstrClass)
      8 {
      9     return NULL;
     10 }
     11 
     12 void WindowImplBase::OnFinalMessage(HWND /*hWnd*/)
     13 {
     14     paint_manager_.RemovePreMessageFilter(this);
     15     paint_manager_.RemoveNotifier(this);
     16     paint_manager_.ReapObjects(paint_manager_.GetRoot());
     17 }
     18 
     19 void WindowImplBase::Init()
     20 {}
     21 
     22 LRESULT WindowImplBase::OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
     23 {
     24     bHandled = FALSE;
     25     return 0;
     26 }
     27 
     28 LRESULT WindowImplBase::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
     29 {
     30     bHandled = FALSE;
     31     return 0;
     32 }
     33 
     34 #if defined(WIN32) && !defined(UNDER_CE)
     35 LRESULT WindowImplBase::OnNcActivate(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
     36 {
     37     if( ::IsIconic(*this) ) bHandled = FALSE;
     38     return (wParam == 0) ? TRUE : FALSE;
     39 }
     40 
     41 LRESULT WindowImplBase::OnNcCalcSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
     42 {
     43     return 0;
     44 }
     45 
     46 LRESULT WindowImplBase::OnNcPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
     47 {
     48     return 0;
     49 }
     50 
     51 LRESULT WindowImplBase::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
     52 {
     53     POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam);
     54     ::ScreenToClient(*this, &pt);
     55 
     56     RECT rcClient;
     57     ::GetClientRect(*this, &rcClient);
     58 
     59     //if( !::IsZoomed(*this) ) {
     60     //    RECT rcSizeBox = paint_manager_.GetSizeBox();
     61     //    if( pt.y < rcClient.top + rcSizeBox.top ) {
     62     //        if( pt.x < rcClient.left + rcSizeBox.left ) return HTTOPLEFT;
     63     //        if( pt.x > rcClient.right - rcSizeBox.right ) return HTTOPRIGHT;
     64     //        return HTTOP;
     65     //    }
     66     //    else if( pt.y > rcClient.bottom - rcSizeBox.bottom ) {
     67     //        if( pt.x < rcClient.left + rcSizeBox.left ) return HTBOTTOMLEFT;
     68     //        if( pt.x > rcClient.right - rcSizeBox.right ) return HTBOTTOMRIGHT;
     69     //        return HTBOTTOM;
     70     //    }
     71     //    if( pt.x < rcClient.left + rcSizeBox.left ) return HTLEFT;
     72     //    if( pt.x > rcClient.right - rcSizeBox.right ) return HTRIGHT;
     73     //}
     74 
     75     RECT rcCaption = paint_manager_.GetCaptionRect();
     76     if( pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right 
     77         && pt.y >= rcCaption.top && pt.y < rcCaption.bottom ) {
     78             CControlUI* pControl = static_cast<CControlUI*>(paint_manager_.FindControl(pt));
     79             if( pControl && _tcsicmp(pControl->GetClass(), _T("ButtonUI")) != 0 && 
     80                 _tcsicmp(pControl->GetClass(), _T("OptionUI")) != 0 )
     81                 return HTCAPTION;
     82     }
     83 
     84     return HTCLIENT;
     85 }
     86 
     87 LRESULT WindowImplBase::OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
     88 {
     89     MONITORINFO oMonitor = {};
     90     oMonitor.cbSize = sizeof(oMonitor);
     91     ::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor);
     92     CRect rcWork = oMonitor.rcWork;
     93     rcWork.Offset(-rcWork.left, -rcWork.top);
     94 
     95     LPMINMAXINFO lpMMI = (LPMINMAXINFO) lParam;
     96     lpMMI->ptMaxPosition.x    = rcWork.left;
     97     lpMMI->ptMaxPosition.y    = rcWork.top;
     98     lpMMI->ptMaxSize.x        = rcWork.right;
     99     lpMMI->ptMaxSize.y        = rcWork.bottom;
    100 
    101     bHandled = FALSE;
    102     return 0;
    103 }
    104 
    105 LRESULT WindowImplBase::OnMouseWheel(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    106 {
    107     bHandled = FALSE;
    108     return 0;
    109 }
    110 #endif
    111 
    112 LRESULT WindowImplBase::OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    113 {
    114     bHandled = FALSE;
    115     return 0;
    116 }
    117 
    118 LRESULT WindowImplBase::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    119 {
    120     bHandled = FALSE;
    121     return 0;
    122 }
    123 
    124 LRESULT WindowImplBase::OnNCLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    125 {
    126     bHandled = FALSE;
    127     return 0;
    128 }
    129 
    130 LRESULT WindowImplBase::OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    131 {
    132     bHandled = FALSE;
    133     return 0;
    134 }
    135 
    136 LRESULT WindowImplBase::OnLButtonUp(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    137 {
    138     bHandled = FALSE;
    139     return 0;
    140 }
    141 
    142 LRESULT WindowImplBase::OnKeyDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    143 {
    144     bHandled = FALSE;
    145     return 0;
    146 }
    147 
    148 LRESULT WindowImplBase::OnKillFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
    149 {
    150     bHandled = FALSE;
    151     return 0;
    152 }
    153 
    154 LRESULT WindowImplBase::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    155 {
    156     SIZE szRoundCorner = paint_manager_.GetRoundCorner();
    157 #if defined(WIN32) && !defined(UNDER_CE)
    158     if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) {
    159         CRect rcWnd;
    160         ::GetWindowRect(*this, &rcWnd);
    161         rcWnd.Offset(-rcWnd.left, -rcWnd.top);
    162         rcWnd.right++; rcWnd.bottom++;
    163         HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
    164         ::SetWindowRgn(*this, hRgn, TRUE);
    165         ::DeleteObject(hRgn);
    166     }
    167 #endif
    168     bHandled = FALSE;
    169     return 0;
    170 }
    171 
    172 LRESULT WindowImplBase::OnMoving(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    173 {
    174     bHandled = FALSE;
    175     return 0;
    176 }
    177 
    178 LRESULT WindowImplBase::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    179 {
    180     if (wParam == SC_CLOSE){
    181         bHandled = TRUE;
    182         return 0;
    183     }
    184 #if defined(WIN32) && !defined(UNDER_CE)
    185     BOOL bZoomed = ::IsZoomed(*this);
    186     LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
    187     if( ::IsZoomed(*this) != bZoomed ){
    188     }
    189 #else
    190     LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
    191 #endif
    192     return lRes;
    193 }
    194 
    195 tString WindowImplBase::GetSkinFolder()
    196 {
    197     return tString(CPaintManagerUI::GetInstancePath()) + _T("Skins\");
    198 }
    199 
    200 LRESULT WindowImplBase::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    201 {
    202     LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
    203     styleValue &= ~WS_CAPTION;
    204     ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
    205     RECT rcClient;
    206     ::GetClientRect(*this, &rcClient);
    207     ::SetWindowPos(*this, NULL, rcClient.left, rcClient.top, rcClient.right - rcClient.left, 
    208         rcClient.bottom - rcClient.top, SWP_FRAMECHANGED);
    209 
    210     paint_manager_.Init(m_hWnd);
    211     paint_manager_.AddPreMessageFilter(this);
    212 
    213     CDialogBuilder builder;
    214 
    215     paint_manager_.SetResourcePath(GetSkinFolder().c_str());
    216 
    217 #if USE(ZIP_SKIN)
    218 
    219 #if defined(WIN32) && !defined(UNDER_CE)
    220     static bool resource_unzipped = false;
    221     if (!resource_unzipped)
    222     {
    223         resource_unzipped = true;
    224         paint_manager_.SetResourceZip(GlobalVariable::kResourceSkinZipFileName);
    225         paint_manager_.UnzipResource();
    226         paint_manager_.SetResourceZip(GlobalVariable::kNullString);
    227     }
    228     tString tstrSkin = paint_manager_.GetResourcePath();
    229     tstrSkin += GetSkinFile();
    230 #else
    231     paint_manager_.SetResourceZip(GlobalVariable::kResourceSkinZipFileName);
    232     tString tstrSkin = GetSkinFile();
    233 #endif
    234 
    235 #else
    236     tString tstrSkin = paint_manager_.GetResourcePath();
    237     tstrSkin += GetSkinFile();
    238 #endif
    239     CControlUI* pRoot = builder.Create(tstrSkin.c_str(), (UINT)0, this, &paint_manager_);
    240     paint_manager_.AttachDialog(pRoot);
    241     paint_manager_.AddNotifier(this);
    242 #endif
    243 
    244     Init();
    245     return 0;
    246 }
    247 
    248 LRESULT WindowImplBase::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    249 {
    250     bHandled = FALSE;
    251     return 0;
    252 }
    253 
    254 LRESULT WindowImplBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    255 {
    256     LRESULT lRes = 0;
    257     BOOL bHandled = TRUE;
    258     switch (uMsg)
    259     {
    260     case WM_CREATE:            lRes = OnCreate(uMsg, wParam, lParam, bHandled); break;
    261     case WM_CLOSE:            lRes = OnClose(uMsg, wParam, lParam, bHandled); break;
    262     case WM_DESTROY:        lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break;
    263 #if defined(WIN32) && !defined(UNDER_CE)
    264     case WM_NCACTIVATE:        lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break;
    265     case WM_NCCALCSIZE:        lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break;
    266     case WM_NCPAINT:        lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break;
    267     case WM_NCHITTEST:        lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break;
    268     case WM_GETMINMAXINFO:    lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break;
    269     case WM_MOUSEWHEEL:        lRes = OnMouseWheel(uMsg, wParam, lParam, bHandled); break;
    270 #endif
    271     case WM_SIZE:            lRes = OnSize(uMsg, wParam, lParam, bHandled); break;
    272     case WM_MOVING:            lRes = OnMoving(uMsg, wParam, lParam, bHandled); break;
    273     case WM_SYSCOMMAND:        lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break;
    274     case WM_KEYDOWN:        lRes = OnKeyDown(uMsg, wParam, lParam, bHandled); break;
    275     case WM_KILLFOCUS:        lRes = OnKillFocus(uMsg, wParam, lParam, bHandled); break;
    276     case WM_SETFOCUS:        lRes = OnSetFocus(uMsg, wParam, lParam, bHandled); break;
    277     case WM_LBUTTONUP:        lRes = OnLButtonUp(uMsg, wParam, lParam, bHandled); break;
    278     case WM_LBUTTONDOWN:    lRes = OnLButtonDown(uMsg, wParam, lParam, bHandled); break;
    279     case WM_MOUSEMOVE:        lRes = OnMouseMove(uMsg, wParam, lParam, bHandled); break;
    280     case WM_NCLBUTTONDOWN:    lRes = OnNCLButtonDown(uMsg, wParam, lParam, bHandled); break;
    281     default:                bHandled = FALSE; break;
    282     }
    283     if (bHandled) return lRes;
    284 
    285     lRes = HandleCustomMessage(uMsg, wParam, lParam, bHandled);
    286     if (bHandled) return lRes;
    287 
    288     if (paint_manager_.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;
    289     return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
    290 }
    291 
    292 LRESULT WindowImplBase::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
    293 {
    294     if (uMsg == WM_KEYDOWN)
    295     {
    296         switch (wParam)
    297         {
    298         case VK_RETURN:
    299         case VK_ESCAPE:
    300             return ResponseDefaultKeyEvent(wParam, bHandled);
    301         default:
    302             break;
    303         }
    304     }
    305     return FALSE;
    306 }
    307 
    308 LRESULT WindowImplBase::ResponseDefaultKeyEvent(WPARAM wParam, bool& bHandled)
    309 {
    310     if (wParam == VK_RETURN)
    311     {
    312         return FALSE;
    313     }
    314     else if (wParam == VK_ESCAPE)
    315     {
    316         Close();
    317         return TRUE;
    318     }
    319 
    320     return FALSE;
    321 }

    代码出处:http://www.who1753.com/duilib-windowimplbase.html

    2.属性列表.xml

    有时间把它精简后再帖出来。。。原xml 900+ 行,吓死爹了

  • 相关阅读:
    插件制作入门
    Hank老师推荐的一些博客
    高级iOS工程师的博客
    查看一个文件是否支持64位 方法 ,[symbol(s) not found for architecture x86_64]相关
    ssh-keygen的使用方法及配置authorized_keys两台linux机器相互认证
    使用git在两台机器间同步代码
    scp远程拷贝命令
    后台启动程序并重定向输出信息脚本
    automake 工具的使用
    minigui启动过程
  • 原文地址:https://www.cnblogs.com/riversHahaha/p/4581097.html
Copyright © 2020-2023  润新知