26上位机VC MFC实现窗口融合嵌入到另一窗口效果
26上位机VC MFC实现窗口融合嵌入到另一窗口效果
功能展示 不管是在我们VC软件,还是在PLC编程软件触摸屏编程软件,都有一相可拖动和嵌入的工作区窗口,软件有了这一功能,非常方便用户的操作。我们当前例程就来实现这一功能,效果如上图
要点提示 在文档结构的程序中,默认情况下,用户可以将工具栏拖动到任意位置。如果要将对话框拖动到任意位置,就要从控制条CControlBar派生一个子类,本例为CDockBarCtrl.在CDockBarCtrlK 实现 某个对话框的显示,并实现 控制条的手动功能; 实现对话框的显示非常容易,只要在CDockBarCtrl类定义一个对话框 指针,然后在CDockBarCtrl类的Create()方法中创建对话框,并设置对话框的位置就可以了 要实现控制条的拖动,最核心的问题是设置控制条的位置和大小,即根据当前拖动的状况,适当设置控制条的位置和大小。在CDockBarCtrl类中提供 了两个虚拟方法CalcDynamicLayout和CalcFixedLayout来计算控制条的大小。在CalcDynamicLayout方法中只是直接调用了CalcDynamicLayout方法,面CalcFixedLayout只是简单地设置控制条的大小 。并没有根据实际情况进行计算。因为CDockBarCtrl是一个抽象类, CalcFixedLayout方法只是进行了默认的调整。有关CDockBarCtrl类对CalcDynamicLayout和CalcFixedLayout方法的改写可以参考实现的过程
在控制条CDockBarCtrl中还应该包含一个标题栏,用于显示还原按钮,关闭按钮和两条力,可以通过处理控制条的WM_NCCALCSIZE消息来设置标题栏的区域。要注意的是标题栏不是一层不变,当控制条在上下械右依靠,标题栏的区域都 是不同,因此要在WM_NCCALCSIZE消息处理函数中针对 不同情况进行设置
实现功能 1.新建一个单文档的应用程序 2.插入一个时钟背景用位图 3.建立一个对话框资源,并关联与新建一个对话框类; 4.载入CDockBarCtrl类的DockBarCtrl.cpp与DockBarCtrl.h文件,在CMAINFRAM类中建立CDockBarCtrl m_DockBar变量和刚才新的对话框变量CTool m_ToolDlg; 注意头文件的添加 5.在CMAINFRAM类中OnCreate()函数中初始化 - m_DockBar.Create(this,&m_ToolDlg,IDD_DIALOG1);
- m_DockBar.SetBarStyle(m_DockBar.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
- m_DockBar.EnableDocking(CBRS_ALIGN_ANY);
- DockControlBar(&m_DockBar);
复制代码
6.这样便快速实现的窗口嵌入窗口的效果,当然你会发现对话框窗口怎么会单独可移动,不想要这种效果,可以对对话框资源的属性进行设置:1样式下层,2边框,无。3扩展样式工具窗口,客户边缘
下面演示融合嵌入功能实现过程
源码及视频下载 (仅在电脑可见)
|