1.编写windows下带Aero特效的QT窗口
简介:主要设计QT无边框窗口,如果单纯使用QT常用功能可以设计出支持缩放,拖拽,阴影等功能,但是windows自带的非常实用的snap效果确很难做到尽善尽美。因此这里使用的是QT5之后支持的功能,来设计带WINDOWS下的阴影、缩放、拖拽、Aero Snap效果的窗口。
参考博客:http://www.cnblogs.com/findumars/p/6204345.html
参考代码:https://github.com/deimos1877/BorderlessWindow
少走弯路:
1).之前设计的出支持缩放,拖拽,阴影等功能的QT窗口,缩放使用的是NativeEvent()函数,拖拽使用的是根据鼠标按住和松开位置进行move(x,y),阴影使用的是paintEvent()函数。设计效果如下:
参考代码:http://download.csdn.net/detail/qq_31215157/9922187
2).http://blog.csdn.net/imxiangzi/article/details/49962365 和 http://blog.csdn.net/jan5_reyn/article/details/39042197 这两篇博客介绍的仅仅是毛玻璃特效,在无边框的QT窗口无法满足一些功能,如边界自动缩放尺寸等,不建议参考。
设计说明:
参考代码解析:
1)按键控制:F6边框控制,F7阴影控制,F5未知
case WM_KEYDOWN: {
switch ( wParam ) {
case VK_F5: {
window->borderlessResizeable = !window->borderlessResizeable;
break;
}
case VK_F6: {
window->toggleShadow();
window->toggleBorderless();
SetFocus( winId );
break;
}
case VK_F7: {
window->toggleShadow();
break;
}
}
if ( wParam != VK_TAB ) return DefWindowProc( hWnd, message, wParam, lParam );
SetFocus( winId );
break;
}
2)控制拖拽,拖拽宽度可调,默认为5,不影响最大化显示。
case WM_NCHITTEST: {
if ( window->borderle