1、创建工具栏
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndDemoToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
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
}
if (!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR))
{
return -1;
}
return 0;
}
2、工具栏的停靠
OnCreate(LPCREATESTRUCT lpCreateStruct):
m_wndDemoToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockBar(&m_wndToolBar,&m_wndDemoToolBar);
void CMainFrame::DockBar(CControlBar* pDestBar,CControlBar* pSrcBar)
{
RecalcLayout(TRUE);
CRect rect;
pDestBar->GetWindowRect(&rect);
rect.OffsetRect(1,0);
DWORD dwStyle = pDestBar->GetBarStyle();
UINT nDockBarID = 0;
if (dwStyle & CBRS_ALIGN_TOP)
{
nDockBarID = AFX_IDW_DOCKBAR_TOP;
}
else if (dwStyle & CBRS_ALIGN_BOTTOM)
{
nDockBarID = AFX_IDW_DOCKBAR_BOTTOM;
}
else if (dwStyle & CBRS_ALIGN_LEFT)
{
nDockBarID = AFX_IDW_DOCKBAR_LEFT;
}
else if (dwStyle & CBRS_ALIGN_RIGHT)
{
nDockBarID = AFX_IDW_DOCKBAR_RIGHT;
}
DockControlBar(pSrcBar,nDockBarID,rect);
}
3、为工具栏添加下拉菜单
OnCreate(LPCREATESTRUCT lpCreateStruct):
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
int nIndex = m_wndToolBar.CommandToIndex(ID_FILE_NEW);
UINT nStyle = m_wndToolBar.GetButtonStyle(nIndex);
nStyle |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(nIndex,nStyle);
afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)
void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes)
{
NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pnmh;
switch (pNMToolBar->iItem)
{
case ID_FILE_NEW:
AfxMessageBox("ID_FILE_NEW");
break;
default:
break;
}
}
4、为工具栏添加热点图像:
if (!m_ImageList.Create(IDR_MAINFRAME,16,0,RGB(128,128,128)))
{
return -1;
}
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&m_ImageList);
5、在工具栏中添加组合框
BOOL CMainFrame::CreateComboBox(UINT nID)
{
int nIndex = 0;
CRect rect;
while (m_wndToolBar.GetItemID(nIndex) != nID)
{
nIndex++;
}
m_wndToolBar.SetButtonInfo(nIndex,nID,TBBS_SEPARATOR,80);
m_wndToolBar.GetItemRect(nIndex,&rect);
rect.top += 0;
rect.bottom += 200;
if (!m_ComboBox.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|
CBS_DROPDOWNLIST|CBS_HASSTRINGS,rect,&m_wndToolBar,nID))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}
m_ComboBox.ShowWindow(SW_SHOW);
m_ComboBox.AddString("500%");
m_ComboBox.AddString("200%");
m_ComboBox.AddString("150%");
m_ComboBox.AddString("100%");
m_ComboBox.AddString("75%");
m_ComboBox.AddString("50%");
m_ComboBox.AddString("25%");
m_ComboBox.AddString("10%");
m_ComboBox.SetCurSel(3);
return TRUE;
}
OnCreate():
if (!CreateComboBox(ID_COMBOBOX))
{
TRACE0("Failed to create combo box\n");
}
6、设置状态栏
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this))
{
return -1;
}
UINT IDArray[2];
for (int n = 0;n<2;n++)
{
IDArray[n] = 10000 + n;
}
m_wndStatusBar.SetIndicators(IDArray,sizeof(IDArray)/sizeof(UINT));
m_wndStatusBar.SetPaneInfo(0,IDArray[0],SBPS_NORMAL,100);
m_wndStatusBar.SetPaneInfo(1,IDArray[1],SBPS_STRETCH,0);
m_wndStatusBar.SetPaneText(0,"状态栏");
m_wndStatusBar.SetPaneText(1,"");
return 0;
}
至此,第三章控制部分记录完毕,以下是第四章:对话框