Duilib官方入門文件建立的視窗為什麼是圓角矩形

Duilib官方入門文件建立的視窗為什麼是圓角矩形

       由於專案原因,有幸接觸到Duilib,在使用了一段時間之後,不得不承認它是一個非常優秀的開源介面庫。同時在學習和使用的過程中也遇到了很多的問題,僅以此篇作為開端記錄下來,也算是為開源世界做一些貢獻。

         相信很多新手都是通過官方自帶的《Duilib 入門文件》入門的,其中建立視窗講述瞭如何去除標題欄或者是非客戶區。在HandleMessage新增了如下程式碼:

else if( uMsg == WM_NCACTIVATE ) {
if( !::IsIconic(m_hWnd) ) {
return (wParam == 0) ? TRUE : FALSE;
}
}
else if( uMsg == WM_NCCALCSIZE ) {
return 0;
}
else if( uMsg == WM_NCPAINT ) {
return 0;
}

此時視窗變成這樣:

       對,你沒有看錯,它的“頭”為什麼是圓的,看起來很不爽有木有。此時別慌,其實這個問題呢是視窗屬性設定造成的,大家是否還記得XP或者win7系統“標題欄”就是圓角的。而我們上面去除標題欄的方式僅僅是遮蔽系統繪製的訊息,但是並沒有去除這種視窗風格,現在真相大白了哈哈,設定視窗風格屬性就好了嘛,在視窗初始化前新增如下程式碼:

LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
styleValue &= ~WS_CAPTION;
::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);

上述程式碼去除了視窗的標題欄屬性WS_CAPTION,馬上編碼看一下效果吧:

這才是去“頭”之後真實的模樣嘛!

小結:這件事情告訴我們解決問題一定要考慮全面,不然就會 顧此失彼,浪費自己很多的時間,當然有時候走彎路也會有意想不到的收穫嘛!在此感謝Duilib的作者,他早就替我們這些小白考慮好了,如果你的視窗是繼承WindowImplBase建立的,則不會有這樣的問題。