Notepad++原始碼閱讀——視窗元素組織與布局

來源:互聯網
上載者:User

標籤:style   blog   http   color   width   2014   

1.1 前言

這兩天在看notepad++ 1.0版本的原始碼。看了許久終於把程式的視窗之間的關係搞清楚了現在把其組織的要點寫於此,希望對大家有所協助。

1.2 視窗元素之間的關係

Notepad++主要有以下視窗元素(見)。

其中Notepad_plus 是程式的主要視窗,其他:工具列、狀態列、主次編輯視窗、主次選項卡視窗以及對話方塊視窗均為主視窗的子視窗。

 
 


_mainDocTab 和 _subDocTab 為 類:DocTabView 其成員_pView 分別指向 _mainEditView和_subEditView即兩個編輯視窗。這樣方便了改變視窗大小是視窗的重新布局。見下節

1.3 視窗的布局

視窗的布局從Notepad_plus 的訊息處理常式開始:

case WM_SIZE:// 視窗改變大小是重新布局{    RECT rc;    getMainClientRect(rc);// exclude statusbar and toolbar area    _pMainWindow->reSizeTo(rc);    getStatusBarClientRect(rc);    _statusBar.reSizeTo(rc);    return TRUE;}

 

主視窗收到視窗大小被改變之後、對各個子視窗進行重新布局。

1. getMainClientRect(rc);// exclude statusbar and toolbar area

計算客戶區(除去工具列和狀態列的矩形視窗地區)。

2. _pMainWindow->reSizeTo(rc);

這裡的_pMainWindow (在沒有分裂編輯視窗時即只有一個編輯視窗時)是指向_mainDocTab的指標。將該函數調用展開如下:

virtual void DocTabView::reSizeTo(RECT & rc){TabBar::reSizeTo(rc);rc.left += marge;rc.top += marge;rc.right -= 5;rc.bottom -= 10;_pView->reSizeTo(rc);};

 

這裡的關鍵是函數TabBar::reSizeTo(rc);的調用。將其展開如下:

void TabBar::reSizeTo(RECT & rc2Ajust){// Important to do that!// Otherwise, the window(s) it contains will take all the resouce of CPU// We don‘t need to resiz the contained windows if they are even invisible anyway!display(rc2Ajust.right > 10);Window::reSizeTo(rc2Ajust);TabCtrl_AdjustRect(_hSelf, FALSE, &rc2Ajust);}

 

這裡 TabBar 將其視窗佔滿除工具列和狀態列的地區。然後調用TabCtrl_AdjustRect(_hSelf, FALSE, &rc2Ajust);返回選項卡的客戶去(出去標籤的矩形地區)

這幾層調用之後,我們再回到:

virtual void DocTabView::reSizeTo(RECT & rc){TabBar::reSizeTo(rc);rc.left += marge;rc.top += marge;rc.right -= 5;rc.bottom -= 10;_pView->reSizeTo(rc);};

 

此時rc為選項卡的客戶區,_pView為指向編輯視窗的指標,其調用reSizeTo函數將其視窗調整到合適的位置,

3. getStatusBarClientRect(rc);

_statusBar.reSizeTo(rc);

後兩句顧名思義為調整狀態列位置

以上就是Notepad++ 1.0版本的 視窗布局要點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.