精华内容
下载资源
问答
  • MFC中实现对话框窗口任意分割

    热门讨论 2013-03-21 18:01:21
    此代码为MFC中对对话框分割的示例,注意是对话框,不是SDI。
  • 很多新手刚遇到有关MFC窗口分割的项目时都会找度娘询问,结果面对五花八门的答案往往不知所措。我就是其中的一员..经过一番摸索,我终于弄明白几种关于窗口分割的方法.从大的方面来说主要分为:基于文档的和基于对话框...

       很多新手刚遇到有关MFC窗口分割的项目时都会找度娘询问,结果面对五花八门的答案往往不知所措。我就是其中的一员大哭哭哭..经过一番摸索,我终于弄明白几种关于窗口分割的方法.从大的方面来说主要分为:基于文档的和基于对话框的.而基于文档的分割方法又分为基于单文档的和基于多文档的.但是都不会太复杂.这篇文章先讲一下如何用对话框完成文档分割.也算是对自己思路的整理.闲话少叙,开始;

        第一步;先建立一个基于对话框的MFC程序,

       1.1首先点开软件选择VC++下面的MFC应用程序,如果你的是英文版的那就是MFC Application.(应该是这个大笑)起个名字MySplitterDlg点击确定.



    1.2;点击确定之后,什么都不要动直到出现如下的页面时;一般会默认为多文档的;咱们是基于对话框的,所以选择1,基于对话框,然后下一步.


    1.3;点啊点到最后会出现一下画面.图中的1不要你选,这是将要出现在你类视图中的各项类们.我刚开始还纠结要选哪一个呢,菜鸟啊.

    所以不用管它,点击2




    好,至此为止程序建立好了,会出现如下画面:



    看到红圈圈没有,这里有类视图,资源视图,团队资源管理器,解决方案资源管理器;我们将在这里操作;


    第二步;建立两个对话框

      在刚才所说的红圈圈里找到资源视图选项,然后点开之后你会发现一个叫Dialog的条目,点击右键——》插入Dialog,插入两个对话框IDD_DIALOG1,IDD_DIALOG2







    
    
    
    展开全文
  • 如何建立基于mfc对话框窗口分割,实现对话框的窗口分割 新手,求指导 谢谢
  • 基于对话框MFC项目实现窗口分割

    千次阅读 2017-08-01 17:48:15
    1. 新建一个MFC对话框程序MySplitter。 再插入两个Dialog资源 ,这里一定要选择IDD_FORMVIEW类别的对话框,对这两个对话框分别新建类CMyFormView0 和CMyFormView1,基类别选CDialog,一定要选择CFormView。 2.主...

    1. 新建一个MFC对话框程序MySplitter。 再插入两个Dialog资源 ,这里一定要选择IDD_FORMVIEW类别的对话框,对这两个对话框分别新建CMyFormView0 和CMyFormView1,基类别选CDialog,一定要选择CFormView。

    2.主对话框类MySplitterDlg.h中新增两个成员变量

        CFrameWnd*      m_pMyFrame;    // 分隔窗口  
        CSplitterWnd    m_cSplitter;     // 左右分隔  

    3.  CMySplitterDlg中增加WM_CREATE的消息响应,编辑OnCreate()

    int CMySplitterDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CDialog::OnCreate(lpCreateStruct) == -1)
            return -1;
        // Because the CFRameWnd needs a window class, we will create a new one. I just copied the sample from MSDN Help.
        // When using it in your project, you may keep CS_VREDRAW and CS_HREDRAW and then throw the other three parameters.
        //需要注册窗口类
        CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW,  
                       ::LoadCursor(NULL, IDC_ARROW),    (HBRUSH) ::GetStockObject(WHITE_BRUSH),   
                      ::LoadIcon(NULL, IDI_APPLICATION));
    
        // Create the frame window with "this" as the parent
        m_pMyFrame = new CFrameWnd;
        m_pMyFrame->Create(strMyClass,_T(""), WS_CHILD,   CRect(0,0,300,300), this);
        m_pMyFrame->ShowWindow(SW_SHOW);
    
        // and finally, create the splitter with the frame as the parent
        m_cSplitter.CreateStatic(m_pMyFrame,1, 2); //在Frame里切分视图窗口为1×2,就是一行两列
        m_cSplitter.CreateView(0,0, RUNTIME_CLASS(CMyFormView0),   CSize(100,100), NULL);//第一行一列
        m_cSplitter.CreateView(0,1, RUNTIME_CLASS(CMyFormView1), CSize(100,100), NULL);//第一行二列
    
         return 0;
    }



    4.在CMySplitterDlg::OnInitDialog()中显示Frame

    int CMySplitterDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    
    CRect cRect;
    GetWindowRect(&cRect);
    ScreenToClient(&cRect);
    m_pMyFrame->MoveWindow(&cRect);
    m_pMyFrame->ShowWindow(SW_SHOW);
    
    
    return TRUE;
    }





    展开全文
  • 1.窗口分割: (参考:https://blog.csdn.net/weixin_45553150/article/details/106419738?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242l) 创建了...

    这里写自定义目录标题

    1.窗口分割:
    (参考:https://blog.csdn.net/weixin_45553150/article/details/106419738?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242l)
    创建了CSHPManagementSystem30Dlg的工程文件,及对话框,类。
    通过类向导创建CLeftDlg、CCenterDlg、CRightDlg类,基类为CFormView。
    通过类向导添加WM_CREAT消息,添加OnCreate函数:

    int CSHPManagementSystem30Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
    		return -1;
    	// TODO:  在此添加您专用的创建代码
    	CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW,
    		::LoadCursor(NULL, IDC_ARROW), (HBRUSH)::GetStockObject(WHITE_BRUSH),
    		::LoadIcon(NULL, IDI_APPLICATION));
    
    	//创建frame window作为子窗口
    	m_pFrameWnd = new CFrameWnd;
    	m_pFrameWnd->Create(strMyClass, _T(""), WS_CHILD, CRect(0, 0, 300, 300), this);
    	m_pFrameWnd->ShowWindow(SW_SHOW);
    
    	//创建分割窗口
    	m_splitterWnd.CreateStatic(m_pFrameWnd, 1, 3);
    	m_splitterWnd.CreateView(0, 0, RUNTIME_CLASS(CLeftDlg), CSize(150, 150), NULL);
    	m_splitterWnd.CreateView(0, 1, RUNTIME_CLASS(CCenterDlg), CSize(590, 100), NULL);
    	m_splitterWnd.CreateView(0, 2, RUNTIME_CLASS(CRightDlg), CSize(200, 100), NULL);
    	// TODO:  在此添加您专用的创建代码
    
    	return 0;
    }
    

    在CSHPManagementSystem30Dlg.cpp的OnInitDialog()函数中添加:

    CRect rect;
    	GetWindowRect(&rect);
    	ScreenToClient(&rect);
    	m_pFrameWnd->MoveWindow(&rect);
    	m_pFrameWnd->ShowWindow(SW_SHOW);
    

    最后在CSHPManagementSystem30Dlg.cpp中添加CLeftDlg、CCenterDlg、CRightDlg的头文件。
    2.窗口最大化和最小化:
    (参考:https://blog.csdn.net/zhulichen/article/details/52469664?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161129925216780262553139%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161129925216780262553139&biz_id=0&utm_medium)
    在CSHPManagementSystem30Dlg.h中添加

    POINT Old;
    	void resize();
    

    在CSHPManagementSystem30Dlg.cpp的OnInitDialog()函数中添加:

    GetClientRect(&rect);     //取客户区大小  
    Old.x = rect.right - rect.left;
    Old.y = rect.bottom - rect.top;
    

    通过类向导添加WM_SIZE消息,添加OnSize相应函数

    void CSHPManagementSystem30Dlg::OnSize(UINT nType, int cx, int cy)
    {
    	CDialogEx::OnSize(nType, cx, cy);
    
    	// TODO: 在此处添加消息处理程序代码
    	if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
    	{
    		resize();
    	}
    }
    

    在CSHPManagementSystem30Dlg.cpp中添加resize函数:

    void CSHPManagementSystem30Dlg::resize()
    {
    	float fsp[2];
    	POINT Newp; //获取现在对话框的大小
    	CRect recta;
    	GetClientRect(&recta);     //取客户区大小  
    	Newp.x = recta.right - recta.left;
    	Newp.y = recta.bottom - recta.top;
    	fsp[0] = (float)Newp.x / Old.x;
    	fsp[1] = (float)Newp.y / Old.y;
    	CRect Rect;
    	int woc;
    	CPoint OldTLPoint, TLPoint; //左上角
    	CPoint OldBRPoint, BRPoint; //右下角
    	HWND  hwndChild = ::GetWindow(m_hWnd, GW_CHILD);  //列出所有控件  
    	while (hwndChild)
    	{
    		woc = ::GetDlgCtrlID(hwndChild);//取得ID
    		GetDlgItem(woc)->GetWindowRect(Rect);
    		ScreenToClient(Rect);
    		OldTLPoint = Rect.TopLeft();
    		TLPoint.x = long(OldTLPoint.x * fsp[0]);
    		TLPoint.y = long(OldTLPoint.y * fsp[1]);
    		OldBRPoint = Rect.BottomRight();
    		BRPoint.x = long(OldBRPoint.x * fsp[0]);
    		BRPoint.y = long(OldBRPoint.y * fsp[1]);
    		Rect.SetRect(TLPoint, BRPoint);
    		GetDlgItem(woc)->MoveWindow(Rect, TRUE);
    		hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
    	}
    	Old = Newp;
    
    }
    

    **存在问题之前窗口分割的分界面的控件并没有根据主界面的大小而等比例变化,**自认为原因是虽然控件放在了三个分界面上,但还没有做界面挂载。
    问题没有解决,给示例编辑框加了变量。(这一步无所谓)
    最后的问题解决方式:在CLeftDlg、CCenterDlg、CRightDlg的头文件中添加:

    POINT Old;
    	void resize();
    

    在CLeftDlg、CCenterDlg、CRightDlg的。Cpp文件中添加和上述相同的OnSize函数和resize函数。。。复制的时候注意更改CSHPManagementSystem30Dlg变为各自的类名。

    在这里插入代码片
    
    展开全文
  • MFC对话框窗口分割/拆分

    千次阅读 2017-10-10 16:52:49
    二、创建对话框类 分别创类CMyFormView0 和CMyFormView1,基类别选CDialog,一定要选择CFormView。 类向导->添加类(MFC类): 三、增加WM_CREATE消息响应函数OnCreate 通过“类向
    • 本文测试环境vs2013!
    • 本文最后运行结果如下:


    一、新建项目:项目名称为:MySplitterDlg,其他保持默认选项即可。
    二、 创建对话框类
    分别创类CMyFormView0CMyFormView1,基类别选CDialog,一定要选择CFormView
    类向导->添加类(MFC类):


    三、
    增加WM_CREATE消息响应函数OnCreate

    通过“类向导”为“CMySpliterDlgDlg类(不要选择其它类)添加WM_CREATE的消息响应函数:


    四、编辑OnCreate

    添加了消息函数OnCreate之后,编辑其内容如下:

    int CMySplitterDlgDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
          if (CDialogEx::OnCreate(lpCreateStruct) == -1)
                return -1;

          // TODO:  在此添加您专用的创建代码
          // Because the CFRameWnd needs a window class, we will create a new one. I just copied the sample from MSDN Help.
          // When using it in your project, you may keep CS_VREDRAW and CS_HREDRAW and then throw the other three parameters.
          //需要注册窗口类
          CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW, 
                                        ::LoadCursor(NULL, IDC_ARROW),      (HBRUSH) ::GetStockObject(WHITE_BRUSH),   
                                      ::LoadIcon(NULL, IDI_APPLICATION));

          // Create the frame window with "this" as the parent
          m_pMyFrame = new CFrameWnd;
          m_pMyFrame->Create(strMyClass,_T(""), WS_CHILD,    CRect(0,0,300,300), this);
          m_pMyFrame->ShowWindow(SW_SHOW);

          // and finally, create the splitter with the frame as the parent
          m_cSplitter.CreateStatic(m_pMyFrame,1, 2); //在Frame里切分视图窗口为1×2,就是一行两列
          m_cSplitter.CreateView(0,0, RUNTIME_CLASS(CMyFormView0),    CSize(100,100), NULL);//第一行一列
          m_cSplitter.CreateView(0,1, RUNTIME_CLASS(CMyFormView1), CSize(100,100), NULL);//第一行二列

          return 0;
    }

    五、添加CFrameWnd变量     

    由于上述程序中用到变量m_pMyFrame,因此需要在类CMySplitterDlgDlg中添加

    public:
             CFrameWnd *m_pMyFrame;

    六、为了防止内存泄露,在onDestroy()中添加

    if (m_pMyFrame) delete m_pMyFrame;

    七、添加Dialog头文件 

    此外,由于上述程序还用到了3.3小结所创建的类CMyFormView0和CMyFormView1,因此需要在MySplitterDlgDlg.cpp中添加其头文件。

    #include "MyFormView0.h"
    #include "MyFormView1.h"

    八、添加CSplitterWnd变量

    由于分割窗口时使用到了CSplitterWnd类(见上述OnCreate函数),因此需要在类CMySplitterDlgDlg中添加

    CSplitterWnd m_cSplitter;

    九、编辑OnSize消息

    添加了消息函数OnSize之后,编辑其内容如下:

    void CMySplitterDlgDlg::OnSize(UINT nType, int cx, int cy)
    {
        CDialogEx::OnSize(nType, cx, cy);

        // TODO: 在此处添加消息处理程序代码
        CRect cRect;
        GetWindowRect(&cRect);
        ScreenToClient(&cRect);
        m_pMyFrame->MoveWindow(&cRect);
        m_pMyFrame->ShowWindow(SW_SHOW);
    }

    十、运行程序



    展开全文
  • 1.1生成基于对话框的应用程序(CTake_ClassDlg),运行结果如下: 1.2.添加类名:项目-添加类-MFC类 自定义类名(如:FrameViewOne),基类:CFormView,同理定义(FrameViewTwo类) 1.3.相关代码...
  • 根据网上的一些示例文档,自己写的可运行的示例。方便大家学习。【里面包含文档,跟可运行源码.】
  • VC++ MFC 对话框 窗口分割

    千次阅读 2018-06-12 10:39:24
    找了几个教程都比较早了1).插入三个IDD_FORMVIEW2)添加类:FormView1, FormView2,FormView3 基类:CFormView3).在Dlg.h中添加3.1#include "FormView1"#include "FormView2"...
  • MFC基于对话框多次分割窗口 最终实现效果: 一、首先准备4个类: CPProcess(主对话框,继承于CFormView)、CPPDisplayView(继承于CFormView)、CPPSelectView(继承于CTreeView)、CPPParaSet(继承于...
  • 最近写MFC的程序,想在对话框里实现窗口的任意分割。现在网络资料一大抄,找个东西实在麻烦。总算这个很简单,很快就搞定了,写下来做个笔记。
  • MFC窗口程序设计》第五章 分割窗口 这个代码是书上教程的原码,给新手参考
  • 实现功能:将单文档的MFC项目窗口,划分分左右两个部分,左侧为可视化控件窗口,右侧为绘图窗口 运行环境:Windows10 64位,VC++6.0,MFC架构 使用方法:将其中的Test02文件夹整个解压到某一目录下,双击打开其中的...
  • CSplitterWnd 分割窗口类(在文档/视图结构中使用分割窗口也用到这个类) CFrameWnd CFormView IDD_FORMVIEW (对话框实体) 步骤: (一)创建对话框工程CMySplitterDlg,在头文件中添加成员变量 CFram
  • 对话框窗口分割

    2013-03-10 15:04:03
    MFC对话框窗口分割功能实现,主要是用picture控件模拟
  • MFC窗口分割

    2014-05-16 21:40:06
    关于MFC窗口分割的设计与实现,可以对MFC窗口分割有进一步了解
  • CSplitterWnd提供一个分隔器窗口的功能。窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象。一个CSplitterWnd对象通常被嵌入CFrameWnd或CMDIChildWnd父对象。一般创建...
  • 最后终于迈出了第一步,写了一个答题的小程序,现在就介绍一下整个程序的实现思路和步骤(窗口分割和几个控件的使用方法)  程序的主体主要是整个界面的框架,至于具体的功能则可以在上面添加具体的控件和菜单栏...
  • 文章介绍了文档视图结构的窗口分割技术,并通过实例,提供相关的主要代码,手工实现基于MFC的单文档多视图的窗口分割,以及多视图之间的通信。用户可以根据需求应用这种方法实现窗口各式各样的分割,可扩展性好。
  • 使用CSplitterWnd分割窗口(一)   1.1、基本的CSplitterWnd的使用 1.1.1 在CMainFrame中添加一个CSplitterWnd成员:  CSplitterWnd m_splitterwnd1; 1.1.2 基于CView创建两个新的视图类,CViewLeft...
  • MFC DockPane 分割窗口创建工程1.生成MFC工程2.新建基类为CDockablePane的C++类2.1 新建CObjectWnd类2.2 在CMainFrame中操作3.新建对话框类,在停靠窗口中写入对话框3.1 新建对话框资源3.2 在停靠窗口中嵌入对话框4....
  • MFC分割窗口创建

    2012-04-15 21:17:24
    MFC分割窗口创建 基于MFC对话框 窗口的分割

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,467
精华内容 986
关键字:

mfc基于对话框分割窗口