📄 mainfrm.cpp
字号:
// MainFrm.cpp : CMainFrame 类的实现
//
#include "stdafx.h"
#include "ToolBarDemo.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
static TCHAR *TextTips[] = {"下拉按钮","","切换按钮位图"};
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_DRAW, DrawType)
ON_COMMAND(ID_TYPE, Type)
ON_WM_SETFOCUS()
ON_COMMAND(ID_VIEW_TOOLBAR2, OnViewToolbar2)
END_MESSAGE_MAP()
static UINT BASED_CODE My_Buttons[]=
{ // 要和工具条中位图的次序一样
ID_DRAW,
ID_COMBOBOX,
ID_TYPE,
};
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame 构造/销毁
CMainFrame::CMainFrame()
: type(0)
, bShowBar2(false)
{
// TODO:在此添加成员初始化代码
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::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("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
// TODO: 如果不需要工具栏可停靠,则删除这三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
////////////////////////////////////////////////////////
m_pMyToolBar=new CComboBar();
m_pMyToolBar->CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// 将按钮图象和工具条对象连接起来
m_pMyToolBar->LoadBitmap(IDR_MYTOOLBAR);
// 将映射数组My_Buttons和工具条对象连接起来
m_pMyToolBar->SetButtons(My_Buttons, sizeof(My_Buttons)/sizeof(UINT));
// 允许用户通过鼠标将工具条移动到框架的其它地方
m_pMyToolBar->EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(m_pMyToolBar);
//////////////////////////////////////////////////////////////
m_pMyToolBar->GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS);
DWORD dwStyle = m_pMyToolBar->GetButtonStyle(m_pMyToolBar->CommandToIndex(ID_DRAW));
m_pMyToolBar->SetButtonStyle(m_pMyToolBar->CommandToIndex(ID_DRAW), dwStyle|TBSTYLE_DROPDOWN);
///////////////////////////////////////////////////
CRect itemrect;
SIZE sizeButton,sizeImage,m_sizeMax;
m_sizeMax.cx = 0;
m_sizeMax.cy = 0;
for (int i=0;i<m_pMyToolBar->GetCount();i++)
{
m_pMyToolBar->SetButtonText(i,TextTips[i]);
m_pMyToolBar->GetItemRect(i,itemrect);
m_sizeMax.cx = __max(itemrect.Size().cx, m_sizeMax.cx);
m_sizeMax.cy = __max(itemrect.Size().cy, m_sizeMax.cy);
}
//设置按钮尺寸
sizeButton.cx = __max(m_sizeMax.cx, 23);
sizeButton.cy = __max(m_sizeMax.cy, 22);
sizeImage.cx = 16;
sizeImage.cy = 15;
m_pMyToolBar->SetSizes(sizeButton,sizeImage);
ShowControlBar(m_pMyToolBar,FALSE,FALSE);
ShowControlBar(m_pMyToolBar,TRUE,FALSE);
m_pMyToolBar->RedrawWindow();
///////////////////////////////////////////////////
CRect rect;
//设置指定工具栏按钮的宽度并获取新的区域 100是宽度
m_pMyToolBar->SetButtonInfo(1, ID_COMBOBOX, TBBS_SEPARATOR, 100);
m_pMyToolBar->GetItemRect(1, &rect);
//设置位置
rect.left+=5;
rect.top+=5;
rect.bottom+=20;
// 创建并显示控件
if(!m_pMyToolBar->m_StyleCombo.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL| CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect,
m_pMyToolBar, ID_COMBOBOX))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}
m_pMyToolBar->m_StyleCombo.ShowWindow(SW_SHOW);
//填充内容
m_pMyToolBar->m_StyleCombo.AddString("Line");
m_pMyToolBar->m_StyleCombo.AddString("Circle");
m_pMyToolBar->m_StyleCombo.AddString("Rectangle");
//选择默认项
m_pMyToolBar->m_StyleCombo.SetCurSel(0);
//////////////////////////////////////////////////////////
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU;
return TRUE;
}
// CMainFrame 诊断
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame 消息处理程序
void CMainFrame::DrawType()
{
}
void CMainFrame::Type()
{
type++;
type=type%3;
int index = m_pMyToolBar->CommandToIndex(ID_TYPE);
switch(type)
{
case 0:
m_pMyToolBar->SetButtonInfo(index,nID,nStyle,index_line);
break;
case 1:
m_pMyToolBar->SetButtonInfo(index,nID,nStyle,index_circle);
break;
case 2:
m_pMyToolBar->SetButtonInfo(index,nID,nStyle,index_rectangle);
}
}
BOOL CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: 在此添加专用代码和/或调用基类
#define lpnm ((LPNMHDR)lParam)
#define lpnmtb ((LPNMTOOLBAR)lParam)
switch(lpnm->code)
{
case TBN_DROPDOWN:
//drop down button was hit
//handle appropriately
CWnd *pWnd = m_pMyToolBar;
CMenu menu;
menu.LoadMenu(IDR_DRAWMENU);
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup);
CRect rc;
pWnd->SendMessage(TB_GETRECT, lpnmtb->iItem, (LPARAM)&rc);
pWnd->ClientToScreen(&rc);
pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, this, &rc);
return FALSE; //indicates the TBN_DROPDOWN
//notification was handled
}
return CFrameWnd::OnNotify(wParam, lParam, pResult);
}
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
CFrameWnd::OnSetFocus(pOldWnd);
// TODO: 在此添加消息处理程序代码
CToolBarCtrl &toolctrl=m_pMyToolBar->GetToolBarCtrl();
index_line=toolctrl.AddBitmap(1,IDB_LINE);
index_circle=toolctrl.AddBitmap(1,IDB_CIRCLE);
index_rectangle=toolctrl.AddBitmap(1,IDB_RECTANGLE);
int index=m_pMyToolBar->CommandToIndex(ID_TYPE);
int iImage;
m_pMyToolBar->GetButtonInfo(index,nID,nStyle,iImage);
m_pMyToolBar->SetButtonInfo(index,nID,nStyle,index_line);
}
void CMainFrame::OnViewToolbar2()
{
// TODO: 在此添加命令处理程序代码
if(bShowBar2)
{
m_pMyToolBar->ShowWindow(SW_SHOWNORMAL);
}
else
{
m_pMyToolBar->ShowWindow(SW_HIDE);
}
bShowBar2=!bShowBar2;
RecalcLayout();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -