DuiLib学习笔记5——标题栏不能正常隐藏问题
我之前代碼都是照著官方那個(gè)Duilib入門(mén)文檔.doc來(lái)學(xué)習(xí)的。但是遇到一個(gè)問(wèn)題,雖然他隱藏了windows的自帶標(biāo)題欄,可以自己繪畫(huà)一個(gè)標(biāo)題欄了,但是在這個(gè)標(biāo)題欄下方,用力亂戳,就可能把系統(tǒng)自帶的,最小化,最大化,關(guān)閉按鈕戳出來(lái)。如下圖:
我問(wèn)了群里的朋友,都說(shuō)可能是WM_NCHITTEST的問(wèn)題。于是我去handle里多加了一個(gè)if判斷
else if( uMsg == WM_NCHITTEST) {return 0; }結(jié)果雖然解決了問(wèn)題,但是我自己的按鈕都失效了。通過(guò)debug發(fā)現(xiàn),只要鼠標(biāo)進(jìn)入我們程序界面,就會(huì)觸發(fā)WM_NCHITTEST。所以return掉太暴力了。
后來(lái)在一個(gè)博客里發(fā)現(xiàn)了一個(gè)解決方案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);//..... }我試著去寫(xiě)了個(gè)OnCreate無(wú)效。后來(lái)把代碼試著改了下,在創(chuàng)建窗體后,就對(duì)窗體進(jìn)行set,生效了。
官方教程里的創(chuàng)建代碼如下:
CFrameWindowWnd* pFrame = new CFrameWindowWnd();if( pFrame == NULL ) return 0;pFrame->Create(NULL, _T("測(cè)試"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);pFrame->ShowWindow(true);我改了一下改成這樣:
CFrameWindowWnd* pFrame = new CFrameWindowWnd();
if( pFrame == NULL ) return 0;
pFrame->Create(NULL, _T("測(cè)試"), 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);
運(yùn)行后,果然一切正常了。在此代碼基礎(chǔ)上,我覺(jué)得既然是set,那么原來(lái)create的時(shí)候就應(yīng)該可以控制這兩個(gè)參數(shù)。跟上面create代碼一對(duì)比,我就做了一個(gè)嘗試,把這兩個(gè)屬性替換掉,改成如下:
CFrameWindowWnd* pFrame = new CFrameWindowWnd();
if( pFrame == NULL ) return 0;
pFrame->Create(NULL, _T("測(cè)試"), WS_CLIPSIBLINGS, WS_CLIPCHILDREN);
pFrame->CenterWindow();
pFrame->ShowWindow(true);
官方文檔創(chuàng)建時(shí)的參數(shù)是UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE把他們換成WS_CLIPSIBLINGS, WS_CLIPCHILDREN就可以了
運(yùn)行后一切正常,很努力的戳也戳不出那些隱藏按鈕了。
由于整個(gè)沒(méi)有官方文檔,本人也不太可能去慢慢閱讀源碼,所以這樣的代碼試出來(lái)的,多少以后可能存在隱患。群里很多朋友都是靠讀官方的demo,看其他朋友寫(xiě)的demo來(lái)學(xué)習(xí)的,的確沒(méi)有其他快捷有效途徑,但是現(xiàn)在就只能先這樣了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/duguxue/p/3818243.html
總結(jié)
以上是生活随笔為你收集整理的DuiLib学习笔记5——标题栏不能正常隐藏问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: UVa 10420 List of Co
- 下一篇: Android Activity初探