您的位置:首页 > 编程语言 > C语言/C++

《精通Visual C++ 实效编程280例》读书笔记(第三章 控制栏)

2013-06-27 09:59 218 查看
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
= 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;

}

至此,第三章控制部分记录完毕,以下是第四章:对话框
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: