MFC对话框 切分为三块 左边分上下两块 右边为一整块

xiejanee 2014-11-06 09:58:15
需要对MFC对话框进行分割,实现如题所述的效果,但是目前实现的效果只能将对话框一分为二(如图所示),不知该怎样将左边的区域再分割为上下两部分。请大家指教,方案越详细越好。
主要代码如下:

BOOL CSplitDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码
//IDC_CUSTOM_WINDOW 为覆盖客户区的按钮控件
CRect cRect;
GetDlgItem(IDC_CUSTOM_WINDOW)->GetWindowRect(&cRect);

// Move the splitter
ScreenToClient(&cRect);
m_pMyFrame->MoveWindow(&cRect);
m_pMyFrame->ShowWindow(SW_SHOW);
m_wndSplitter.MoveWindow(0,0, cRect.Width(), cRect.Height());
m_wndSplitter.ShowWindow(SW_SHOW);

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

int CSplitDlgDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
CCreateContext ccc;
ccc.m_pNewViewClass = RUNTIME_CLASS(CTestDlg);
ccc.m_pCurrentDoc = NULL;
ccc.m_pNewDocTemplate = NULL;
ccc.m_pLastView = NULL;
ccc.m_pCurrentFrame = NULL;

CString strMyClass = AfxRegisterWndClass(CS_VREDRAW |
CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL, IDI_APPLICATION));

// Create the frame window with "this" as the parent
m_pMyFrame = new CFrameWnd;
m_pMyFrame->Create(strMyClass,"", WS_CHILD,
CRect(0,0,1,1), this);
m_pMyFrame->ShowWindow(SW_SHOW);
m_pMyFrame->MoveWindow(0,0,100,100);

// and finally, create the splitter with the frame as
// the parent
m_wndSplitter.CreateStatic(m_pMyFrame,1, 2);
m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CTestDlg),
CSize(50,50), &ccc);
m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CTestDlg),
CSize(50,50), &ccc);

return 0;
}
...全文
775 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SerissaLT 2015-01-27
  • 打赏
  • 举报
回复
m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CTestDlg),CSize(50,50), &ccc);
运行到这个语句时出错。
“testFrane.exe”: 已加载“C:\Users\litao\AppData\Local\Youdao\Dict\Application\6.2.54.2064\TextExtractorImpl32.dll”,Cannot find or open the PDB file
“testFrane.exe”: 已加载“C:\Windows\SysWOW64\oleacc.dll”,Cannot find or open the PDB file
“testFrane.exe”: 已加载“C:\Windows\SysWOW64\winspool.drv”,Cannot find or open the PDB file
“testFrane.exe”: 已加载“C:\Windows\SysWOW64\comdlg32.dll”,Cannot find or open the PDB file
“testFrane.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.18455_none_72d576ad8665e853\GdiPlus.dll”,Cannot find or open the PDB file
“testFrane.exe”: 已加载“C:\Windows\SysWOW64\winmm.dll”,Cannot find or open the PDB file
菜鸟求救!
xiejanee 2014-11-06
  • 打赏
  • 举报
回复
引用 7 楼 shen_wei 的回复:
void CMyFormViewOne::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	m_nMapMode = -1;
}
请问m_nMapMode 是什麽类型的变量, 需要与什么资源控件关联么
shen_wei 2014-11-06
  • 打赏
  • 举报
回复
void CMyFormViewOne::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	m_nMapMode = -1;
}
xiejanee 2014-11-06
  • 打赏
  • 举报
回复
引用 5 楼 shen_wei 的回复:
你可以把滚动条属性该关闭了。。
恩 视图对话框的横向和纵向滚动条属性的状态一直都是false 但是界面还是有滚动条
shen_wei 2014-11-06
  • 打赏
  • 举报
回复
你可以把滚动条属性该关闭了。。
xiejanee 2014-11-06
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
CSize(50,50) 设置小点。。
实现上述界面效果的代码 都是从你博客中拷贝过来的 但是效果还是有差异 是还需要对对话框的属性进行什么修改吗
shen_wei 2014-11-06
  • 打赏
  • 举报
回复
CSize(50,50) 设置小点。。
xiejanee 2014-11-06
  • 打赏
  • 举报
回复
引用 1 楼 shen_wei 的回复:
http://blog.csdn.net/shen_001/article/details/40857791


谢谢 按照你的方法实现了叉分效果 如下图 不过想请问下 如何才能消除各个分区的滚动条 就如你博客中所附界面的效果一样

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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