⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 VC.net 的一些有用的技巧
💻 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 + -