1 Duilib软件界面出现不可拖动和不可拉伸的问题
距离上一次用Duilib写Windows软件界面已经几个月了,对于Duilib的使用难免比较生疏,今天就遇到一个比较费解的问题,一般情况下我们在写duilib界面的xml文件时,会如下的对软件主界面进行定义
<Window size="1280,720" maxinfo="1280,720" mininfo="1280,720" sizebox="6,6,6,6" caption="0,0,0,90" showshadow="true" shadowsize="2" shadowposition="0,0" shadowcolor="#F0F0F0" shadowdarkness="155" >
</Window>
其中Window的sizebox
属性定义软件窗口可拖动改变窗口大小的边距,而caption
定义窗口可拖动的标题栏大小的边距,一般情况下,如果我们在界面xml文件中按上述方式定义了这两个属性,那么我们就可以通过鼠标按住软件进行拖动,和将鼠标放在软件四个边界对界面进行拖动拉伸,但是今天即使定义了上述的两个属性,也无法正常的对界面进行拖动和拉伸。
在经过费解和查找问题之后,是由于我对WindowImplBase
类的虚函数OnSysCommand
进行了实现,但是并没有在其中有任何代码实现,这直接导致了后续没有办法对消息进行正常的处理,在WindowImplBase
中,OnSysCommand
的实现如下
LRESULT WindowImplBase::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (wParam == SC_CLOSE)
{
bHandled = TRUE;
SendMessage(WM_CLOSE);
return 0;
}
#if defined(WIN32) && !defined(UNDER_CE)
BOOL bZoomed = ::IsZoomed(*this);
LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
if( ::IsZoomed(*this) != bZoomed ) {
if( !bZoomed ) {
CControlUI* pControl = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("maxbtn")));
if( pControl ) pControl->SetVisible(false);
pControl = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("restorebtn")));
if( pControl ) pControl->SetVisible(true);
}
else {
CControlUI* pControl = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("maxbtn")));
if( pControl ) pControl->SetVisible(true);
pControl = static_cast<CControlUI*>(m_PaintManager.FindControl(_T("restorebtn")));
if( pControl ) pControl->SetVisible(false);
}
}
#else
LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
#endif
return lRes;
}
如果我们要自定义实现,但是其中并没有使用CWindowWnd::HandleMessage(uMsg, wParam, lParam);
对系统消息进行处理,那么久会导致出现上述的问题,所以解决方法有两种,第一种就是直接使用WindowImplBase
类的虚函数OnSysCommand
实现,不进行复写;第二种就是如果一定要复写的情况下,一定要将CWindowWnd::HandleMessage(uMsg, wParam, lParam);
放在函数体中,比如
LRESULT MainWindow::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND
if (wParam == SC_CLOSE) {
::PostQuitMessage(0L);
bHandled = TRUE;
return 0;
}
BOOL bZoomed = ::IsZoomed(*this);
LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam);
}
出现这种情况还是由于自己已经很久不写了,以后要多注意这种细节问题。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Duilib – 界面出现不可拖动和不可拉伸的问题
原文链接:https://www.stubbornhuang.com/2491/
发布于:2023年01月30日 15:42:34
修改于:2023年06月21日 17:13:52
当前分类随机文章推荐
- Duilib - 修改程序图标以及任务栏图标 阅读694次,点赞0次
- Duilib - duilib应用程序实现文件可拖拽的功能 阅读2751次,点赞1次
- Duilib - Label控件文本换行 阅读2638次,点赞1次
- Duilib - Edit编辑控件输入文字时编辑框背景颜色不是所设置的背景颜色的问题 阅读779次,点赞1次
- Duilib - 在同一台电脑上限制只能运行一个程序,防止软件多开 阅读2186次,点赞0次
- Duilib - RichEdit和List等控件增加垂直滚动条vscrollbar和水平滚动条hscrollbar 阅读2139次,点赞2次
- Duilib - 使用Default设置控件默认的全局样式以及使用Style自定义样式 阅读254次,点赞0次
- Duilib - 各个控件的消息响应类型 阅读2564次,点赞0次
- Duilib - 点击程序关闭按钮最小化到托盘,点击托盘按钮恢复 阅读2052次,点赞0次
- Duilib - 设置窗体阴影 阅读3578次,点赞2次
全站随机文章推荐
- WordPress - 获取每年发表的文章数量 阅读487次,点赞0次
- C++ - 使用Crypto++/CryptoPP加解密库对字符串或者文件进行AES256加密 阅读4569次,点赞1次
- 资源分享 - Realistic Image Synthesis Using Photon Mapping英文高清PDF下载 阅读2707次,点赞0次
- 资源分享 - Game Physics Engine Development- How to Build a Robust Commercial-Grade Physics Engine for your Game (Second Edition) 英文高清PDF下载 阅读2251次,点赞0次
- 三维点云重建(曲面重建)的经典算法 阅读9330次,点赞8次
- Google Adsense - 从Google Adsense开通到第一个10美元我用了一年时间 阅读2360次,点赞2次
- 资源分享 - Effective Computational Geometry for Curves and Surfaces 英文高清PDF下载 阅读1796次,点赞0次
- OpenCV - linux上编译出现undefined reference to `cv::VideoCapture::VideoCapture()'错误 阅读3284次,点赞0次
- 资源分享 - Computational Geometry - An Introduction Through Randomized Algorithms 英文高清PDF下载 阅读1855次,点赞0次
- 姿态估计之Openpose-Body25数据集骨骼关节keypoint标注对应 阅读9291次,点赞5次
评论
169