zoukankan      html  css  js  c++  java
  • 一种对话框嵌入MFC 文档结构效果的实现方法(一),让你的自定义对话框区域同客户区大小一起改变

    鸣谢:https://blog.csdn.net/educast/article/details/8980686  提供的启发

    上机环境: win2012 vs2015 C++  单文档MFC风格窗口

    MFC以文档视图---闻名,我们最初接触MFC,肯定对下图的窗口结构印象深刻

     不过,我们还是更倾向使用控件,既然MFC已经为我们慷慨的提供了功能相对全面的菜单和工具栏,我们又没有理由去从头创建一个windows form项目,所以把一个能添加各类控件的窗口加入空白区域,充分利用窗口的空间是我们的不二选择。(如下图)

    网上一些帖子给出的方法感觉还是带偏了方向,这里给出一个粗糙一些的方法,实现了对话框(非模式对话框)嵌入到视图客户区的效果

    第一步,当然是在项目的资源视图创建对话框。

    第二步,选中对话框新建自定义类,然后在项目视图类中的头文件建立对话框类的成员变量。以此建立视图和自定义对话框类之间的关联。

    接下来的问题是让对话框大小随着文档视图大小一起改变,这样才够美观,那就要解决两个问题

    1.获取客户区的坐标,距离屏幕的上下左右间距。

    2.根据第一个问题的处理结果,动态的设置对话框的大小

    对于问题1,微软官方提供了结构体RECT和CRect类,RECT中的四个属性记载了上下左右四个方位距离屏幕的位置,CRect类除了记录属性,还给出了计算客户区以及其他各类矩形区域的宽,高等成员方法。

    对于问题2,微软官方提供了Cwnd成员方法用来设置CWnd继承类的窗口位置,由于CDialog继承自CWnd,所以可以直接调用该方法

    BOOL SetWindowPos(
        const CWnd* pWndInsertAfter,
        int x,
        int y,
        int cx,
        int cy,
        UINT nFlags);

    由于OnDraw是文档视图启动时的重要成员方法,因此,把对话框的设置工作放在OnDraw方法十分可行

    void Csu17View::OnDraw(CDC* /*pDC*/)
    {
        Csu17Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        if (!pDoc)
            return;
    
        // TODO: 在此处为本机数据添加绘制代码----开始绘制窗口
        if (!IsWindow(this->ddlg.m_hWnd))
        {
            this->ddlg.Create(IDD_DIALOG1, NULL);        
        }
        //SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);
        CRect   temprect;//用来盛放客户区域坐标及宽高等信息
        GetClientRect(temprect);//获取视图客户区域距离屏幕边距,实际上就是获取客户区域宽,高等数据
        this->ddlg.SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);//来自CWnd成员方法
        this->ddlg.ShowWindow(SW_SHOW);
    }
    • 项目文件结构(dingsdlg即为自定义对话框创建的类,选中xxxxView,右键添加---添加变量)

    • 在xxxxView中 添加的成员变量dingsdlg ddlg

     上述项目的不足之处在于,对话框上的控件无法随着对话框的大小而改变,且听下回分解

  • 相关阅读:
    CentOS LiveCD LiveDVD DVD 等版本的区别
    解决蛋疼的阿里云单CPU使用率的问题。
    软件工程在北航
    Introduction of Team Member
    proxool的配置
    hibernate配置jndi
    dbcp的配置
    绘制图片
    myeclipse搭建svn插件
    svn搭建
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12439395.html
Copyright © 2011-2022 走看看