大家说说想建一个有菜单工具栏状态条的窗口该怎么做吧?

ADang 2001-03-13 10:06:00
选中某项命令后,想显示一个窗口,以显示相应的具体内容。这个窗口应该有
自己独立的菜单,工具条,状态栏。有点类似foxmail双击莫信件后弹出的窗口.如 果是sdk的话,知道该如何做。但是在mfc里,觉得不知如何下手。我想这个新窗口
应该从CFrameWnd继承,有一个成员指向CRichEditView,当然还有成员指向,menu,toolbar,statusbar。 我也这样试了,问题是menu还能够显示,而toolbar,statusbar显示不出。如果先注释掉指向CRichEditView的成员的构造何显示的有关语句,此时toolbar,statusbar倒能够显示,但是很别扭,很难看。

唉,贴补出来,我画一下:
本来正常应该如此:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃标题 ┃
┃文件(F) 编辑(E).... ┃
┃□ □ □ □ <---  Toolbar ┃
┃┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃
┃┃ ┃┃
┃┃ ┃┃
┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┃
┃StatusBar xxxxxxxxx ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

现在好像工具栏和状态栏嵌入到里面去了 :
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃标题 ┃
┃文件(F) 编辑(E).... ┃
┃┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃
┃┃ □ □ □ <---  Toolbar ┃┃
┃┃ ┃┃
┃┃ ┃┃
┃┃ ┃┃
┃┃ ┃┃
┃┃ Statusbar ┃┃
┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
我试了一下,发现工具栏和状态条创建到了窗口的客户区,怎
样才能把它们创建到非客户区?

相关代码:
int CFrame2::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//LoadFrame( IDR_MENU1);

m_menu.LoadMenu( IDR_MENU1 );


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_MAINFRAME1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
RECT rect1;
rect1.bottom = rect1.right = 100;
rect1.top = rect1.left = 50;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
if ( !SetMenu(&m_menu) ) return -1;


RECT rect;
rect.bottom = rect.right = 100;
rect.top = rect.left = 100;



/* // m_pWin2指向CRichEditView
BOOL bResult = m_pWin2->Create( NULL , // LPCTSTR lpszClassName
NULL , // LPCTSTR lpszWindowName
WS_CHILD | WS_VISIBLE, // DWORD dwStyle,
rect, //const RECT& rect
this, // CWnd* pParentWnd
0, // UINT nID
NULL // CCreateContext* pContext = NULL
) ;
if ( !bResult ) {
delete m_pWin2;
return -1;
}
m_pWin2->GetRichEditCtrl().SetBackgroundColor( FALSE, GetSysColor(
COLOR_BTNF
ACE) );


*/
// m_pWin2->SetWindowText("i love you") ;
return 0;
}



在主view里:
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CFrame2* pFrame2 = new CFrame2();

RECT rect;
rect.bottom = rect.right = 400 ;
rect.top = rect.left = 100;


BOOL bResult = pFrame2->Create( NULL , // LPCTSTR lpszClassName
"留言" , // LPCTSTR lpszWindowName
rect, //const RECT& rect
AfxGetApp()->m_pMainWnd, // CWnd* pParentWnd
0, // UINT nID
NULL // CCreateContext* pContext = NULL
) ;
}



...全文
43 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
joke100 2001-03-13
  • 打赏
  • 举报
回复
可不可以考虑创建窗口时把窗口的边框去掉,就是搞边框很细的那种,这样停靠以后就不会那么靠里了

16,471

社区成员

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

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

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