工具栏为什么这么难看,为什么和客户区持平,而不是和框架一体?

sealdh 2006-08-26 10:34:36
一个Dialog程序,当点一个按钮时,我要显示一个窗口,该窗口要带一个工具栏,过程如下:

CMyDlg::OnButton()
{
CMyFrame * myfrm; //CMyFrame是派生于CFrameWnd类
myfrm = new CMyFrame();
myfrm->Create(NULL, "测试", WS_OVERLAPPEDWINDOW);
myfrm->ShowWindow(SW_SHOW);

}

工具栏的创建过程如下:
int CMyFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}

这样,程序运行时,点这个按钮,可以显示窗口和工具栏,但工具栏很难看,这样创建的工具栏和mfc向导生成单文档程序的工具栏有很大不同,向导生成的,工具栏是和框架为一体的,比客户区略高一些,有明显的高低层次感,但我创建的工具栏,位置是和客户区为一体的,没有高低层次感,这样就显得很难看,我不知道应该怎么设置,谢谢~~~~
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry 2006-08-28
  • 打赏
  • 举报
回复
不要用从CView派生的类, 要从CWnd派生你的视图类. 因为你的这个框架不是文档视图结构的
sealdh 2006-08-26
  • 打赏
  • 举报
回复
好象可以解决我的问题,但发现了另外的问题。我按照你的说法,创建了一个视图,
在CMyFrame.h中

CMyScrollView * m_scr;//CMyScrollView是派生于CScrollView类

在CMyFrame::OnCreate()中
m_scr = new CMyScrollView;
m_scr->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
//下面创建工具栏(略)

可是当程序运行时,会弹出一个断言错误,跟踪发现指向如下位置:
void CScrollView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
ASSERT_VALID(pDC);

#ifdef _DEBUG
if (m_nMapMode == MM_NONE)
{
TRACE0("Error: must call SetScrollSizes() or SetScaleToFitSize()");
TRACE0("\tbefore painting scroll view.\n");
ASSERT(FALSE);
return;
}


我应该怎么改呢?谢谢
jerry 2006-08-26
  • 打赏
  • 举报
回复
从 CWnd派生一个新类.

在 FrameWnd里声明一个这样的成员.


在OnCreate里创建工具栏前创建这个视图:

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
sealdh 2006-08-26
  • 打赏
  • 举报
回复
我这个是非文档的。

为什么要创建客户区呢?
现在这样,也应该可以显示图象的啊。

怎么创建客户区呢?
jerry 2006-08-26
  • 打赏
  • 举报
回复
你这个框架是文档框架还是非文档的?

文档框架要通过 文档模板来创建. 而不是Create
如果框架是非文档的,那么创建之后要主动创建客户区,视图窗口

16,472

社区成员

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

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

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