只有向HorizontalLayout、VerticalLayout等容器种才可使用xml进行拖动改变控件的大小。
HorizontalLayout:
sepimm=“true” 允许拖动改变大小
sepwidth=“6” 响应的宽度
minwidth=“500” 最小宽度
maxwidth=“800” 最大宽度

VerticalLayout:
sepimm=“true” 允许拖动改变大小
sepheight=“6” 响应的高度
minheight=“500” 最小高度
maxheight=“800” 最大高度

遇到的bug:
1、能拖动,但是在HorizontalLayout容器种添加许多其他容器的时候鼠标放上去不会改变图标样式。
原因:
UIManager.cpp

    case WM_SETCURSOR:{if( m_pRoot == NULL ) break;if( LOWORD(lParam) != HTCLIENT ) break;if( m_bMouseCapture ) return true;POINT pt = { 0 };::GetCursorPos(&pt);::ScreenToClient(m_hWndPaint, &pt);CControlUI* pControl = FindControl(pt);if( pControl == NULL ) break;if( (pControl->GetControlFlags() & UIFLAG_SETCURSOR) == 0 ) break;TEventUI event = { 0 };event.Type = UIEVENT_SETCURSOR;event.pSender = pControl;event.wParam = wParam;event.lParam = lParam;event.ptMouse = pt;event.wKeyState = MapKeyState();event.dwTimestamp = ::GetTickCount();pControl->Event(event);}

得到鼠标的“WM_SETCURSOR”事件消息时,pControl控件不是想要的容器,所以不会修改图标
修改方式:

 void CHorizontalLayoutUI::DoEvent(TEventUI& event){if( m_iSepWidth != 0 ) {if( event.Type == UIEVENT_BUTTONDOWN && IsEnabled() ){RECT rcSeparator = GetThumbRect(false);if( ::PtInRect(&rcSeparator, event.ptMouse) ) {//添加代码::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));//=====end======m_uButtonState |= UISTATE_CAPTURED;m_ptLastMouse = event.ptMouse;m_rcNewPos = m_rcItem;if( !m_bImmMode && m_pManager ) m_pManager->AddPostPaint(this);return;}}if( event.Type == UIEVENT_BUTTONUP ){if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) {m_uButtonState &= ~UISTATE_CAPTURED;m_rcItem = m_rcNewPos;if( !m_bImmMode && m_pManager ) m_pManager->RemovePostPaint(this);NeedParentUpdate();return;}}if( event.Type == UIEVENT_MOUSEMOVE ){//添加代码RECT rcSeparator = GetThumbRect(false);if (IsEnabled() && ::PtInRect(&rcSeparator, event.ptMouse)) {::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));}//=====end======if( (m_uButtonState & UISTATE_CAPTURED) != 0 ) {LONG cx = event.ptMouse.x - m_ptLastMouse.x;m_ptLastMouse = event.ptMouse;RECT rc = m_rcNewPos;if( m_iSepWidth >= 0 ) {if( cx > 0 && event.ptMouse.x < m_rcNewPos.right - m_iSepWidth ) return;if( cx < 0 && event.ptMouse.x > m_rcNewPos.right ) return;rc.right += cx;if( rc.right - rc.left <= GetMinWidth() ) {if( m_rcNewPos.right - m_rcNewPos.left <= GetMinWidth() ) return;rc.right = rc.left + GetMinWidth();}if( rc.right - rc.left >= GetMaxWidth() ) {if( m_rcNewPos.right - m_rcNewPos.left >= GetMaxWidth() ) return;rc.right = rc.left + GetMaxWidth();}}else {if( cx > 0 && event.ptMouse.x < m_rcNewPos.left ) return;if( cx < 0 && event.ptMouse.x > m_rcNewPos.left - m_iSepWidth ) return;rc.left += cx;if( rc.right - rc.left <= GetMinWidth() ) {if( m_rcNewPos.right - m_rcNewPos.left <= GetMinWidth() ) return;rc.left = rc.right - GetMinWidth();}if( rc.right - rc.left >= GetMaxWidth() ) {if( m_rcNewPos.right - m_rcNewPos.left >= GetMaxWidth() ) return;rc.left = rc.right - GetMaxWidth();}}CDuiRect rcInvalidate = GetThumbRect(true);m_rcNewPos = rc;m_cxyFixed.cx = m_rcNewPos.right - m_rcNewPos.left;if( m_bImmMode ) {m_rcItem = m_rcNewPos;NeedParentUpdate();}else {rcInvalidate.Join(GetThumbRect(true));rcInvalidate.Join(GetThumbRect(false));if( m_pManager ) m_pManager->Invalidate(rcInvalidate);}return;}}if( event.Type == UIEVENT_SETCURSOR ){RECT rcSeparator = GetThumbRect(false);if( IsEnabled() && ::PtInRect(&rcSeparator, event.ptMouse) ) {::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));return;}}}CContainerUI::DoEvent(event);}

在鼠标按下和移动的时候添加改变图标,造成一种错觉。

Duilib控件拖动改变大小相关推荐

  1. c++ MFC 根据屏幕分辨率变化自动调整控件位置和大小

    在mfc应用程序开发过程中经常遇到应用场景分辨率不同对应窗口的控件相对位置不同,现在通过在给窗口做尺度变换后,原来的控件位置和大小跟着变,导致界面看起来仍然协调,如下: 缩放前: 缩放后 要解决这个问 ...

  2. QML控件拖动并靠边停留

    前言 用QML做控件拖动,当鼠标按下要拖动的按钮然后移动鼠标,控件坐标会随着鼠标而移动,释放鼠标后判断当前的控件位置,然后选择要停留在父窗口的左边还是右边,再通过动画将控件移动到边上.这种场景在做工具 ...

  3. 无边框对话框拖动改变大小的实现总结

    相同是项目遇到的问题,要求是无边框的对话框要实现鼠标的拖动改变大小.无边框对话框跟有边框的实现肯定不一样喽. 我上网搜到一种方法是: 须要处理下面这三个消息: WM_NCHITTEST  WM_SET ...

  4. Android如何设置按钮图片(控件图片)大小自适应

    Android如何设置按钮图片(控件图片)大小自适应 在你的button中放入图片:drawble属性,你可以选择它的位置上下左右, 如何让图片自适应? 把图片放入res-drawable-mipma ...

  5. C# wpf 实现Canvas内控件拖动

    系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动(本章) 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 文章目录 系列文章目录 前言 一.如何实现? 1 ...

  6. C# wpf 实现Grid内控件拖动

    系列文章目录 第一章 Grid内控件拖动(本章) 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 文章目录 系列文章目录 前言 一.如何实现? 1 ...

  7. textBox控件无法改变高度

    textBox控件无法改变高度,Multiline 属性设置为False就可以了. 相关文章: <微信小程序开发从入门到精通·学习路线> <C#开发WindowsForm程序Load ...

  8. [转载]WPF控件拖动

    这篇博文总结下WPF中的拖动,文章内容主要包括: 1.拖动窗口 2.拖动控件 Using Visual Studio 2.1thumb控件 2.2Drag.Drop(不连续,没有中间动画) 2.3拖动 ...

  9. 窗体控件随窗体大小改变(仍有不足)

    private void frmWatch_Load(object sender, EventArgs e){FormWidth = this.Width;FormHeight = this.Heig ...

  10. 窗体控件随窗体大小改变(包括字体大小)

    文章参考:http://blog.csdn.net/loveme1204/archive/2007/12/24/1964577.aspx 是一篇vb编写的,我只是把它翻译成c#的. 其实Anchor和 ...

最新文章

  1. oracle基础-基本的查询,以及pl/sql登录
  2. SAP S4HANA 实战LTMC - 打响了第一炮
  3. 最新Ceph L版与openstack Pike对接
  4. java 格式匹配,java匹配电话格式的正则表达式
  5. python两数相加代码_一边学编程,一边学语数外,用python编程全排列10以内两数加法...
  6. qt中Qtableview的用法
  7. 胃部不适,原来好辛苦!
  8. CPU 明明 8 个核,网卡为啥拼命折腾一号核?
  9. Error:No-bean-named-springSecurityFilterChain-available
  10. javascript代码混淆的原理
  11. 【175】Easy CHM的使用
  12. css选择最后一个元素
  13. 从底特律的覆灭,反思“珠三角”未来
  14. 【引用】佳能IP1180连供改装图(原创)
  15. java之字符串转换
  16. 惠普电脑window10系统怎么进入bios
  17. com.mchange.v2.c3p0.ComboPooledDataSource 报红
  18. Unity Physics.OverlapSphere实现冲击波
  19. 韩国工程师为IE浏览器立墓碑:“它是下载其他浏览器的好工具”
  20. 声学基础---学习笔记

热门文章

  1. matlab编程绘制直方图,matlab绘制直方图程序
  2. java jni so_java 用jni调用so全过程
  3. 【电子电路】电子基础基本知识和面试要点
  4. Anaconda3下YOLOV3火焰检测
  5. APKTOOL反编译使用教程
  6. SPSS实现卡方检验
  7. 【灵感一剖】WPS简历助手使用反馈
  8. 谷歌地球 Google Earth v7.3.2.5495 专业版
  9. access mysql mssql_ACCESS数据库自行转换成MSSQL数据库教程
  10. 比较全面的OA系统需求分析