MFC单文档框架编程(一): 分隔窗口的实现

1. 在SDI窗口中添加Splitter
(1)在stdafx.h中添加:
#include <afxcview.h>
#include <afxrich.h>

(2)在MainFrm.h中添加
protected:
CSplitterWnd m_wndSplitterLR;
CSplitterWnd m_wndSplitterLTB;

(3)在MainFrm.cpp中重载OnCreateClient
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//return CFrameWnd::OnCreateClient(lpcs, pContext);
CRect rect;
GetClientRect(&rect);
int x = rect.Width();
int y = rect.Height();
int rx = rect.Width()/3;
int lx = x - rx;
int lyb = rect.Height()/3;
int lyt = y - lyb;
int ry = rect.Height()/2;

m_wndSplitterLR.CreateStatic(this, 1, 2, WS_CHILD|WS_VISIBLE|WS_BORDER);    //分隔为左右两列
m_wndSplitterLR.CreateView(0, 1, RUNTIME_CLASS(CFileConfigView),                //右边一列添加视图: CFileConfigView
CSize(rx, ry), pContext);

m_wndSplitterLTB.CreateStatic(&m_wndSplitterLR, 2, 1,                                        //把左边一列分隔为上下两行
WS_CHILD|WS_VISIBLE, m_wndSplitterLR.IdFromRowCol(0, 0));
m_wndSplitterLTB.CreateView(0, 0, RUNTIME_CLASS(CBrdListView),                    //左上窗格添加视图: CBrdListView
CSize(lx, lyt), pContext);
m_wndSplitterLTB.CreateView(1, 0, RUNTIME_CLASS(CBrdInfoView),                    //左下窗格添加视图: CBrdInfoView
CSize(lx, lyb), pContext);
return TRUE;
}

(4) 在类视图中添加类CBrdListView,父类为CListView
重载OnInitialUpdate函数,以初始化视图类CBrdListView。在本例中只初始化列表头
void CBrdListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();

// TODO: 在此添加专用代码和/或调用基类
//添加列表的标头
const int columNumber = 7;
CString m_ColumnLabelStr[] = {_T("状态"),_T("设备名称"),  _T("MAC"), _T("IP"), 
_T("固件版本"), _T("所在位置"), _T("设备型号")};
CListCtrl& listCtrl = GetListCtrl(); //获取列表控件
DWORD dwStyle = listCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES;
dwStyle |= LVS_EX_UNDERLINEHOT;
listCtrl.SetExtendedStyle(dwStyle);

CRect rect;
GetClientRect(rect); 
for(int i = 0; i < columNumber; i++)
{
listCtrl.InsertColumn(i, m_ColumnLabelStr[i], LVCFMT_LEFT, rect.Width()/8);
}
}

(5) CFileConfigView是一个窗体视图
创建一个窗口,为窗口添加类:CFileConfigView,其父类为CFormView。

(6) CBrdInfoView的父类为CEditView,创建方法同CBrdListView

(7) 窗口拖动,重载CMainFrm的OnSize函数,重新设置分隔条比例
void CMainFrame::setSplitLayout()    //OnSize调用该私有函数
{
CRect rect;
GetClientRect(&rect);
int x = rect.Width();
int y = rect.Height();
int rx = rect.Width()/3;
int lx = x - rx;
int lyb = rect.Height()/3;
int lyt = y - lyb;
int ry = rect.Height()/2;

m_wndSplitterLR.SetColumnInfo(0, lx, 0);    //给一列设置一个“理想的”宽度
m_wndSplitterLR.SetColumnInfo(1, rx, 0);    //第1列,宽度xr,最小宽度0
m_wndSplitterLTB.SetRowInfo(0, lyt, 0); //给一行设置一个“理想的”高度
m_wndSplitterLTB.SetRowInfo(1, lyb, 0); //第1行,高度yb,最小高度0
RecalcLayout();
}

(7)窗口效果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值