请问,怎么切分sdi?在onCreateClient()函数中,应该加入什么?能否详细回答?(

soandor 2001-05-10 07:48:00
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_jun_fen 2001-05-12
  • 打赏
  • 举报
回复
你新键一个类:用ClassWizard
class CSplitter : public CSplitterWnd
{
}
在mainframe中定义
CSplitter m_wndSplitter;



BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
//
// For the difference application, we will create a
// static splitter window with 2 side by sidepanes.
//
if(!m_wndSplitter.CreateStatic(this,2,2,WS_CHILD))
{
return FALSE;
}

SIZE size;
CRect rect;
GetClientRect(&rect);

// size.cx =(rect.right-2*m_wndSplitter.GetSplitterWidth())/3;
// size.cy = rect.bottom;
size.cx=(rect.Width()-m_wndSplitter.GetSplitterWidth())/2;
size.cy=(rect.Height()-m_wndSplitter.GetSplitterWidth())/2;
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CDiffView),size, pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDiffView),size, pContext);
// size.cx=rect.Width()/3;
// size.cy=rect.Height()/2-m_wndSplitter.GetSplitterWidth();
int rc=m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CDiffView),size,pContext);
m_wndSplitter.CreateView(1,1,RUNTIME_CLASS(CDiffView),size, pContext);
SetActiveView((CView *)m_wndSplitter.GetPane(0,1));
m_wndSplitter.ShowWindow(SW_SHOWNORMAL);
m_wndSplitter.UpdateWindow();
return TRUE;
}

你要怎样切分就在上面的CreateStatic(this,2,2,WS_CHILD)中设定就可以了,

yao
god剑走偏锋 2001-05-12
  • 打赏
  • 举报
回复
这就是窗口分割功能
该功能可将窗口分割成多个可滚动的面板,面板之间的边界称为分割条,可用分割条来调整每个面板的相对大小。要想增加窗口分割功能,则必须修改主窗口类。首先,在主窗口类的头文件MainFrm.h中添加以下代码:

CsplitterWnd m-SWnd;

Virtual BOOL OnCreateClient (LPCREATESTRUCTcs,CcreateContext *pContext);

再在MainFrm.cpp中添加成员函数OnCreateClient的定义:

BOOL CmainFrame::OnCreateCline(LPCREATESTRUCTcs,CcreateContext *p Context)

{

return m-SWnd.Creat(this,2,2,Csize(20,20),pContext);

}

新的CsplitterWnd类对象m-SWnd用于创建和管理分割窗口,该窗口中可以包含一个或多个面板。首次创建主窗口时,将调用成员函数OnCreateClient。在缺省情况下,该函数创建一个填充主框窗口客户区的视图窗口。覆盖该函数后,将调用CsplitterWnd的成员函数Create来创建分割窗口。其中,第一个参数用于指定分割的父窗口(主窗口);第二个参数指定垂直方向上的面板个数为2;第三个参数指定水平方向上的面板的个数;第四个参数用于设置每个面板的最小尺寸;第五个参数传递描述信息。上述分割窗口的每个面板都是由视图类对象管理的,当用户在某一面板内显示文档和图形时,必须在其它面板中重新绘制,从而在多个面板中均显示相同的内容。为此,必须调用显示文档类的UpdateALLView成员函数来更新其它面板。此时,只需加入pdoc->UpdataALLView(NULL)即可。


jucee 2001-05-10
  • 打赏
  • 举报
回复
先在CMAINFRAME中申明一个CSpliterWin spiterWin对象,然后在onCreateClient调用splierWin.Create(>>>>>)function

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧