C++ VC实现对话框窗口任意分割

最近写MFC的程序,想在对话框里实现窗口的任意分割。现在网络资料一大抄,找个东西实在麻烦。总算这个很简单,很快就搞定了,写下来做个笔记。
    个人认为简单问题最好就是直接贴源代码,一看就明白,说来说去反而弄不清楚,那我就少废话了,自己看吧,注释很清楚。

先来张图片

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

2. 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,"", 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;
}

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

int CMySplitterDlg::OnInitDialog()
{
CDialog::OnInitDialog();

GetWindowRect(&cRect);
ScreenToClient(&cRect);
m_pMyFrame->MoveWindow(&cRect);
m_pMyFrame->ShowWindow(SW_SHOW);

return TRUE;
}
时间: 2024-08-08 01:27:23

C++ VC实现对话框窗口任意分割的相关文章

【VC】Dialog 窗口任意分割子窗口。

用 Dialog 对话框来实现窗口的任意分割. 在资源中添加  Dialog 选择  IDD_FORMVIEW 资源..分别新建FormViewOne,FormViewTwo FormViewThree 类,分别继承基类 CFormView. class CMyFormViewOne : public CFormView { DECLARE_DYNCREATE(CMyFormViewOne) protected: CMyFormViewOne(); // 动态创建所使用的受保护的构造函数 vir

VC 模式对话框和非模式对话框的创建,销毁和区别

在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的.而非模式对话框则是利用CreateWindow来创建的.在MFC或是WTL中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create.模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作.而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作.Create的Dialog一般是modalless,如果你的程序本身就是只有一个Dialog,就

vc++ 不同对话框中传递信息的方法(基于自定义消息SendMessage) (转载)

转载自:http://blog.csdn.net/myj0513/article/details/6827360 背景: 新建了一个基于对话框的MFC程序,在主对话框中添加tabcontrol控件,又新建了两个Dialog(CDialog1和CDialog2),将它们设为tabcontrol控件的子对话框. 目的: 两个子对话框之间传递消息,子对话框与主对话框传递消息. 方法: 第一步:  定义消息. 在目标窗口类的头文件或者stdafx.h中添加: #define WM_MY_MESSAGE 

[00002]-[2015-06-27]-[00]-[MFC 动态链接库 制作一种对话框窗口皮肤(一)]

基于MFC建立动态链接库工程 [SkinDll] [Step1 资源导入]导入已经编辑好的位图资源,定义好标识符,设置工程为MFC静态库编译方式 #define IDB_LEFTTITLE 1000 #define IDB_MIDTITLE  1001 #define IDB_RIGHTTITLE 1002 #define IDB_LEFTBAND 1003 #define IDB_BOTTOMBAND 1004 #define IDB_RIGHTBAND 1005 #define IDB_MI

18.对话框窗口

1.对话框分类 (1)模式对话框 当对话框显示时,会禁止本进程其他窗口的输入等用户交互操作 (2)无模式对话框 在对话框显示时,本进程其他窗口同样可以接受输入等用户交互操作 2.对话框基本使用 (1)对话框窗口处理函数 (2)注册窗口类(可选,基本不使用) (3)创建对话框 (4)关闭对话框

Android学习笔记(七)——显示对话框窗口

显示对话框窗口 1.创建Dialog1项目,在activity_main.xml文件中添加一个Button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:l

vc 基于对话框多线程编程实例——线程之间的通信

 vc基于对话框多线程编程实例--线程之间的通信 实例: vc 基于对话框多线程编程实例--线程之间的通信,码迷,mamicode.com

VC++模态对话框和非模态对话框

MFC中有两种类型的对话框:模态对话框和非模态对话框. 模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他任务.非模态对话框是指当其显示时,允许转而执行程序中其他任务,而不用关闭这个对话框. 模态对话框的创建:创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能是创建并显示一个模态对话框,其返回值将作为CDialog类的另一个成员函数:EndDialog的参数,后者的功能是关闭模态对话框.一般显示模态对话框的实现代码如下: voi

【代码备忘】VC判断自己窗口的另一种方法

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 FindWindow就不说了,这说 的是另一种:GetProp 代码也差不多: 查询... HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD); while (::IsWindow(hWndPrevious)) { if (::GetProp(hWndPrevious, _FLAG)) { if (::IsI