仿VC6界面悬浮停靠缩放效果--上位机VC
仿VC6界面悬浮停靠缩放效果--上位机VC
功能展示
VC6有两个常用工作窗口,工作窗口与输出窗口可以悬浮停靠及窗口缩放效果,当前例程也实现这一功能,效果如图。例程是基于单文档框架程序,程序运行会显示两个可以停靠的窗口,初始化停靠在左边与下边,可以对这两窗口进行悬浮停靠及窗口缩放操作
要点提示
例程集成一类CDockPageBar用于窗口悬浮等效果,在使用时定义一个实例CDockPageBar m_CourceBar;此变量初始化后就可调用AddPage()将一个现成的对话框添加进去,让对话框显示在悬浮窗口上;要注意的是对话框得具有动态创建的属性也就是得在对话框类的头文件添加指令DECLARE_DYNCREATE,源文件添加指令IMPLEMENT_DYNCREATE,另外也将对话框设置为子窗口及无边框; 实现功能 1.新建基于单文档应用程序,视窗类可选择基于CFormView; 2.将例程根目录sizebar.cpp, sizebar.h,DockPageBar.h, DockPageBar.cpp AutoHideBar.h, AutoHideBar.cpp复制到自己工程根目录并载入到工程中; 3.在框架类头文件包含#include “AutoHideBar.h”,添加两个实例变量 CDockPageBar m_CourceBar; CDockPageBar m_OutputBar;并使之继承于CAutoHideFrame, class CMainFrame : public CAutoHideFrame,源文件中指定IMPLEMENT_DYNCREATE改成IMPLEMENT_DYNCREATE(CMainFrame,CAutoHideFrame), BEGIN_MESSAGE_MAP改成BEGIN_MESSAGE_MAP(CMainFrame, CAutoHideFrame) 4.准备两个对话框用于添加到前面的悬浮窗口上显示,如例程COutputDlg, CCourceDlg两对话框,使用对话框具有动态创建功能,既在头文件与源文件分别添加DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE指令,对话框具体额外的功能,可自行添加
5.在框架窗口类中包含新建对话框类的头文件,并在OnCreate()中创建 - int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
- if (!m_wndStatusBar.Create(this) ||
- !m_wndStatusBar.SetIndicators(indicators,
- sizeof(indicators)/sizeof(UINT)))
- {
- TRACE0("Failed to create status bar\n");
- return -1; // fail to create
- }
- //<>
- if (!m_CourceBar.Create(_T("课程目录窗口"), this, CSize(230,260),TRUE,32767))
- {
- TRACE0("Failed to create DockPageBar.\n");
- return -1;
-
复制代码- }
- m_CourceBar.SetBarStyle(m_CourceBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
- m_CourceBar.EnableDocking (CBRS_ALIGN_ANY);
- if (!m_OutputBar.Create(_T("输出窗口"), this, CSize(230,160),TRUE,32768))
- {
- TRACE0("Failed to create OutputBar.\n");
- return -1;
- }
- m_OutputBar.SetBarStyle(m_OutputBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
- m_OutputBar.EnableDocking (CBRS_ALIGN_ANY);
- //<>
- EnableDocking(CBRS_ALIGN_ANY);
- DockControlBar(&m_CourceBar, AFX_IDW_DOCKBAR_LEFT);
- DockControlBar(&m_OutputBar, AFX_IDW_DOCKBAR_BOTTOM);
- //<>添加子页
- m_CourceBar.AddPage(RUNTIME_CLASS(CCourceDlg), IDD_COURCE_DLG, "课程目录", IDR_GKBC8TYPE);
- m_OutputBar.AddPage(RUNTIME_CLASS(COutputDlg), IDD_OUTPUT_DLG, "结果输出", IDR_MAINFRAME);
- //<> 另一方法添加子页
- if (!m_wndTree.Create(WS_CHILD|WS_VISIBLE| TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT, CRect(0, 0, 0, 0), this, 100))
- {
- TRACE0("Failed to create instant bar child\n");
- return -1;
- }
- HTREEITEM hti = m_wndTree.InsertItem(_T("工控编程课程"));
- m_wndTree.InsertItem(_T("欧姆龙PLC编程"), hti);
- m_wndTree.InsertItem(_T("三菱PLC编程"), hti);
- m_wndTree.InsertItem(_T("维纶触摸屏编程"), hti);
- m_wndTree.InsertItem(_T("上位机编程"), hti);
- m_wndTree.InsertItem(_T("变频器调试与控制"), hti);
- m_wndTree.InsertItem(_T("伺服定位编程"), hti);
- m_wndTree.InsertItem(_T("CCD视觉定位"), hti);
- m_CourceBar.AddPage(&m_wndTree,"工控编程",IDR_MAINFRAME);
- return 0;
- }
复制代码 如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|