由于项目原因,有幸接触到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创建的,则不会有这样的问题。