DuiLib学习笔记5——标题栏不能正常隐藏问题
我之前代码都是照着官方那个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来学习的,的确没有其他快捷有效途径,但是现在就只能先这样了。
转载于:https://www.cnblogs.com/duguxue/p/3818243.html
DuiLib学习笔记5——标题栏不能正常隐藏问题相关推荐
- Duilib学习笔记《05》— 消息响应处理
在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的 ...
- Duilib学习笔记《04》— 窗体显示
在前面已经了解了duilib控件以及界面布局相关内容,接下来就要考虑该如何将xml中描述的布局通过界面展现出来.实际上在 Duilib学习笔记<01> 中我们已经简单提到过基本的流程及元素 ...
- Duilib学习笔记《03》— 控件使用
在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...
- duilib学习笔记
前段时间对皮肤引擎比较感兴趣,于是在VS第一人称快的无法直视的dot大神推荐下,看了一个小巧又好用的皮肤引擎:duilib. 1. duilib简介 duilib是一个开源的DirectUI界面库,简 ...
- Mr.J-- jQuery学习笔记(十四)--动画显示隐藏
eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...
- Vue.js学习笔记(三):隐藏a标签鼠标悬浮状态下浏览器左下角出现的链接地址
前言 当a标签悬浮时浏览器左下角会出现链接地址,为了隐藏链接地址,除了使用用点击事件代替以外,我们还可以一次性解决页面所有a标签悬浮出现链接的问题. mounted() {this.deleteMsg ...
- 四、pink老师的学习笔记——元素的显示与隐藏
1. 元素的显示与隐藏 目的 让一个元素在页面中消失或者显示出来 场景 类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现! 1.1 display 显示(重点) display ...
- 立创eda专业版学习笔记(3)(隐藏部分飞线)
又到了喜闻乐见的隐藏gnd飞线环节,我发现这个专业版的操作和标志版不一样,我想试一试这个标题的搜索结果,发现有用的结果还是很少,于是我也随便总结了一下,算是添砖加瓦吧. 原来的飞线是这个样子的: 现在 ...
- DuiLib学习笔记1.编译运行demo
c++中皮肤问题比较麻烦,MFC自带的太难用.DirectUI界面库就比较强大了,之前像skin++之类的基于DirectUI收费昂贵.DuiLib是基于DirectUI的界面库,可以将用户界面和处理 ...
最新文章
- 通过 .gitlab-ci.yml配置任务-官方配置文件翻译
- Office2016打开doc字符间距过小
- 面试官问你“有什么问题问我吗?”,你该如何回答?
- 部署superset_ubuntu16下部署apache superset趟坑指南(内有福利)
- php 派生类 构造,C++派生类的构造函数和析构函数
- wireshark抓包工具的使用及分析
- java synchronizer_Java同步框架AbstractQueuedSynchronizer详解
- FIFO、UART、ALE解释
- Ubuntu在docker容器中安装TensorFlow-1.5
- ASP.NET程序中 抛出Thread was being aborted. 异常(转)
- TAP-Win32 Adapter OAS“的网络适配器删除后总是出现(kms激活器及win10激活)
- 丁火生于未月命理分析_日主丁、未月出生五行喜用分析-丁日未月生《晶灵八字算命》...
- iOS设备、Icon、LaunchImage、图片分辨率
- Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)
- 云计算运维工程师前景怎么样?
- excel仪表盘_免费的Excel仪表板工具
- 武侠小说阅读记录 2009-02-18 21:14
- 幸福地生活 -哈佛幸福公开课
- 基于cruise的混合动力商用车仿真,P2并联混动仿真模型可实现并联混动汽车动力性经济性仿真
- 什么是路由模式通配符?