大家说说想建一个有菜单工具栏状态条的窗口该怎么做吧?
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
) ;
}