MFC静态拆分窗口
拆分窗口后的界面挂载以及自定义消息发送:https://blog.csdn.net/u014151564/article/details/109668660
1、创建两个窗口类 CSelectView 和 CDisPlayView,用于存放拆分后的两个窗口数据
2、在 MainFrame.h 中声明切分窗口类对象,通过对象进行拆分
3、重写 MainFrame 中的 OnCreateClient ,使其在初始化时就拆分
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//return CFrameWnd::OnCreateClient(lpcs, pContext);
//拆成一行两列
m_spliter.CreateStatic(this,1,2);
//左侧和右侧具体的显示内容
m_spliter.CreateView(0, 0, RUNTIME_CLASS(CSelectView), CSize(200, 500), pContext);
m_spliter.CreateView(0, 1, RUNTIME_CLASS(CDispalyView), CSize(600, 500), pContext);
return TRUE;//自己拆分
}
此段代码,将窗口拆分为一行两列
4、创建这两列的数据
在类 CSelectView 或者 CDispalyView 中设置事件等等
5、效果展示
这里展示在 CSelectView 中 添加了树控件和切换选中项时响应消息
CSelectView.h中声明
private:
CTreeCtrl *m_treeCtrl; //树控件
CImageList m_imageList; //图标列表
public:
virtual void OnInitialUpdate();
afx_msg void OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult);
CSelectView.cpp 中实现
void CSelectView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
//初始化 树视图
//获取树控件
m_treeCtrl = &GetTreeCtrl();
//1、准备图片集合
HICON icon = AfxGetApp()->LoadIconW(IDI_ICON_RE);
m_imageList.Create(30, 30, ILC_COLOR32, 1, 1);
m_imageList.Add(icon);
m_treeCtrl->SetImageList(&m_imageList,TVSIL_NORMAL);
//2、添加节点
m_treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXT("销售管理"), 0, 0, NULL);
m_treeCtrl->InsertItem(TEXT("库存管理"), 0, 0, NULL);
m_treeCtrl->InsertItem(TEXT("库存添加"), 0, 0, NULL);
m_treeCtrl->InsertItem(TEXT("库存删除"), 0, 0, NULL);
// TODO: 在此添加专用代码和/或调用基类
}
效果展示:
6、相关函数详细信息
1、CSplitterWnd::CreateStatic
BOOL CreateStatic( CWnd* pParentWnd,
int nRows,
int nCols,
DWORD dwStyle = WS_CHILD | WS_VISIBLE,
UINT nID = AFX_IDW_PANE_FIRST
);
返回值:如果成功则返回非零值;否则返回0。
参数: pParentWnd 分隔器窗口的父框架窗口。
nRows 行数。这个值必须不超过16。
nCols 列数。这个值必须不超过16。
dwStyle 指定窗口的风格。
nID 此窗口的子窗口ID。如果这个分隔器窗口不是嵌套在另一个分隔器窗口中的,则这个ID可以是AFX_IDW_PANE_FIRSH。
说明:
要创建一个静态的分隔器窗口,应调用CReateStatic成员函数。
你可以通过如下步骤将一个CSplitterWnd嵌入一个CFrameWnd或CMDIChildWnd父对象: 1. 在父框架中嵌入一个CSplitterWnd成员变量。
2. 重载父框架的CFrameWnd::OnCreateClient成员函数。
3. 从重载的OnCreateClient中调用Create成员函数。
一个静态的分隔器窗口包含了固定数目的窗格,这些窗格是不同类的。
当你创建一个静态分隔器窗口时,你必须同时创建它的所有窗格。CReateView成员函数通常就是用于这个目的,但你也可以创建其它非视类。
一个静态分隔器窗口的初始最小行高度和列高度是0。这些最小值用来确定窗格是否太小以至于不能将其完整地显示出来。
要给静态分隔器窗口添加滚动条,就应在dwStyle参数中指定WS_HSCROLL或WS_VSCROLL风格。
有关静态分隔器窗口的更多信息,参见“Visual C++程序员指南”中的文章“多文档类型,视,和框架窗口”中的“分隔器窗口”;“Visual C++联机文档”中的“TN029:分隔器窗口”;以及CSplitterWnd类概述。
2、CSplitterWnd::CreateView
virtual BOOL CreateView(
int row,
int col,
CRuntimeClass* pViewClass,
SIZE sizeInit,
CCreateContext* pContext
);
返回值:如果成功则返回非零值;否则返回0。
参数: row 指定用来放置新视的分隔器窗口行。
col 指定用来放置新视的分隔器窗口列。
pViewClass 指定新视的CRuntimeClass。
sizeInit 指定新视的初始尺寸。
pContext 指向用来创建此视的创建环境的指针(通常,该pContext被传递给在其中创建此分隔器窗口的父框架的重载的OnCreateClient成员函数)。
说明:
此成员函数用来为一个静态分隔器窗口创建窗格。一个静态分隔器窗口的所有窗格必须在框架显示这个分隔器之前被创建。
当一个动态分隔器的用户分隔一个窗格,行或列时,框架也调用这个成员函数来创建新的窗格。