DuiLib學習筆記5——標題列不能正常隱藏問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   2014   問題   

我之前代碼都是照著官方那個Duilib入門文檔.doc來學習的。但是遇到一個問題,雖然他隱藏了windows的內建標題列,可以自己繪畫一個標題列了,但是在這個標題列下方,用力亂戳,就可能把系統內建的,最小化,最大化,關閉按鈕戳出來。如:

我問了群裡的朋友,都說可能是WM_NCHITTEST的問題。於是我去handle裡多加了一個if判斷

else if( uMsg == WM_NCHITTEST) {return 0;}

結果雖然解決了問題,但是我自己的按鈕都失效了。通過debug發現,只要滑鼠進入我們程式介面,就會觸發WM_NCHITTEST。所以return掉太暴力了。

後來在一個部落格裡發現了一個解決方案http://tunps.com/ws_caption-cause-duilib-program-title-bar-cannot-hide

LRESULT CMainDlg::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);styleValue &= ~WS_CAPTION;::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);//.....}

我試著去寫了個OnCreate無效。後來把代碼試著改了下,在建立表單後,就對表單進行set,生效了。

官方教程裡的建立代碼如下:

CFrameWindowWnd* pFrame = new CFrameWindowWnd();    if( pFrame == NULL ) return 0;    pFrame->Create(NULL, _T("測試"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);    pFrame->ShowWindow(true);

我改了一下改成這樣:

CFrameWindowWnd* pFrame = new CFrameWindowWnd();
if( pFrame == NULL ) return 0;
pFrame->Create(NULL, _T("測試"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
LONG styleValue = ::GetWindowLong(*pFrame, GWL_STYLE);
styleValue &= ~WS_CAPTION;
::SetWindowLong(*pFrame, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
pFrame->CenterWindow();
pFrame->ShowWindow(true);

運行後,果然一切正常了。在此代碼基礎上,我覺得既然是set,那麼原來create的時候就應該可以控制這兩個參數。跟上面create代碼一對比,我就做了一個嘗試,把這兩個屬性替換掉,改成如下:

CFrameWindowWnd* pFrame = new CFrameWindowWnd();
if( pFrame == NULL ) return 0;
pFrame->Create(NULL, _T("測試"), WS_CLIPSIBLINGS, WS_CLIPCHILDREN);
pFrame->CenterWindow();
pFrame->ShowWindow(true);

官方文檔建立時的參數是UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE把他們換成WS_CLIPSIBLINGS, WS_CLIPCHILDREN就可以了

運行後一切正常,很努力的戳也戳不出那些隱藏按鈕了。

由於整個沒有官方文檔,本人也不太可能去慢慢閱讀源碼,所以這樣的代碼試出來的,多少以後可能存在隱患。群裡很多朋友都是靠讀官方的demo,看其他朋友寫的demo來學習的,的確沒有其他快捷有效途徑,但是現在就只能先這樣了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.