首页 > 其他分享 >MFC 动态拆分窗口

MFC 动态拆分窗口

时间:2024-03-20 20:56:11浏览次数:13  
标签:10 MFC 窗口 函数 wndSplitter 拆分 rect

MFC 动态拆分窗口,使用MFC自带的CSplitterWnd类进行操作。

其步骤就是:

1、在框架类添加此类型的成员函数。

2、覆盖OnCreateClent函数。

3、调用create函数。

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    // TODO: 在此添加专用代码和/或调用基类
    

    n = m_wndSplitter.Create(this, 2, 2, CSize(10, 10), pContext, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT);
    
    
    return TRUE;//CMDIChildWnd::OnCreateClient(lpcs, pContext);
}

后面的样式可以不用输入,他有一个默认值。

具体效果,运行后便可以看到

在左下角和右上角有拆分器的按钮,鼠标点击拖动,即可实现拆分。

默认创建是没有自动拆分的,需要手动拖动才能实现拆分。

 下面讲一下MFC运行原理:

OnCreateClient这个函数由OnCreate函数调用,当你覆盖之后,OnCreate函数就会调用你覆盖的这个函数。

动态拆分窗口,是使用同一个view类来创建不同的窗口,所以在拆分以后,他是两个或者多个窗口,它使用的文档类,依然是只有一个。

动态拆分窗口,他最大支持2*2的窗口数量,多了就断言失败。

他这个拆分窗口是可以通过代码来调整的:

void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
    CMDIChildWnd::OnSize(nType, cx, cy);

    // TODO: 在此处添加消息处理程序代码
    CRect rect;
    GetWindowRect(&rect);
    if (n) {
        m_wndSplitter.SetRowInfo(0, rect.Height() / 2, 10);
        m_wndSplitter.SetRowInfo(1, rect.Height() / 2, 10);
        m_wndSplitter.SetColumnInfo(0, rect.Width() / 2, 10);
        m_wndSplitter.SetColumnInfo(1, rect.Width() / 2, 10);
        m_wndSplitter.RecalcLayout();
    }
    
}

这个函数表示当框架窗口改变尺寸时,要做的处理,首先获取窗口的尺寸大小,n呢是一个BOOL变量,记录拆分窗口是否被正确创建,防止没有拆分的时候出现错误,

SetRowInfo函数表示设置的行,参数0表示第一行,第二个参数表示当前行有多高,最后一个是当等于或者小于当前数值时,拆分器销毁当前窗口。

SetColumnInfo函数表示的是列,第一列有多宽,最后一个参数和上面一样。

当设置行和列后,要调用RecalcLayout更新显示。这样才能即使的显示拆分。

标签:10,MFC,窗口,函数,wndSplitter,拆分,rect
From: https://www.cnblogs.com/Super-biscuits/p/18086061

相关文章

  • SQL窗口函数
    通俗易懂的学会:SQL窗口函数-知乎(zhihu.com)SQL题目讲解——窗口函数(一)_哔哩哔哩_bilibili因为窗口函数是对where或者groupby子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中  ......
  • mfc进程方面处理
    //获取某个进程IDDWORDGetTaskManagerProcessId(){ DWORDtaskManagerProcessId=0; PROCESSENTRY32pe32; pe32.dwSize=sizeof(PROCESSENTRY32); HANDLEhProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap==INVALID_HANDLE_VAL......
  • 代码随想录算法训练营第十三天|239. 滑动窗口最大值、347.前 K 个高频元素、总结
    题目:239.滑动窗口最大值文章链接:代码随想录视频链接:LeetCode:239.滑动窗口最大值题目链接:力扣题目链接图释:classSolution{public://自己定义一个优先队列classMyQueue{public: deque<int>deq; //弹出 voidpop(intvalue){ //当输入的数组与队顶......
  • 139. 单词拆分
    给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。题解主要分类:动态规划思路:这题的要点在于如何使用动态规划。这是打死我也想不......
  • Go语言实现时间滑动窗口算法 动态计算增加量、最大值、最小值
    //时间窗口varfiveMinAccMap=NewAccumulatorsMap(5*time.Minute)vartenMinAccMap=NewAccumulatorsMap(10*time.Minute)varfifteenMinAccMap=NewAccumulatorsMap(15*time.Minute)varthirtyMinAccMap=NewAccumulatorsMap(30*time.Minute)varoneHourAccM......
  • VBA读取 Excel 并按工作表拆分成多个 Excel
    新建窗体SubSplitExcelByMonth()'OnErrorGoToErrorHandler'启用错误处理OnErrorResumeNextApplication.ScreenUpdating=FalseApplication.DisplayAlerts=FalseDimexclePath,sourceSheetName,groupSheetName,filterI......
  • node实现将大CSV文件拆分小CSV
    constfs=require('fs');constreadline=require('readline');//定义输入文件的路径和输出文件的目录constinputFilePath='大的CSV文件.csv';constoutputDirectory='result'; //每个小文件包含的行数constlinesPerFile=250000;//创建输出目录if(......
  • 用 滑动窗口 算法 解决 蓝桥杯子矩阵 的运行超时 问题
    这题如果用暴力算法解决,会用到四个for循环。当数据很大时,会超时,无法通过蓝桥杯。如果掌握了二维滑动窗口,会让时间复杂度减少俩个数量级,很好地解决超时的问题。关于滑动窗口算法,如果读者不会的话,建议去哔站看大佬的讲解视频,笔者也是昨天才学的。如果已经会了滑动窗口算法,......
  • 平面拆分
    引言题目链接:https://www.luogu.com.cn/problem/P8720思路首先可以画一个n=3的图找规律:可以发现划分的平面数有如下的规律:重边只有首次出现的那条会影响结果加入一条没有重边的直线,划分平面数+1新加入的直线与之前加入的直线有a个不同的交点,则划分平面数+a......
  • matinal:SAP FICO会计凭证如何实现自动拆分
    ......