📄 toolbardlg.cpp
字号:
// ToolBarDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Controls.h"
#include "ToolBarDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CToolBarDlg property page
IMPLEMENT_DYNCREATE(CToolBarDlg, CPropertyPage)
CToolBarDlg::CToolBarDlg() : CPropertyPage(CToolBarDlg::IDD)
{
//{{AFX_DATA_INIT(CToolBarDlg)
m_bNoDivider = FALSE;
m_nOrientation = 1;
m_bGripper = FALSE;
m_bToolTips = FALSE;
m_nButtonStyle = 0;
m_bDisabledList = FALSE;
m_bHotList = FALSE;
//}}AFX_DATA_INIT
m_psp.dwFlags &= ~PSP_HASHELP;
}
CToolBarDlg::~CToolBarDlg()
{
}
void CToolBarDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CToolBarDlg)
DDX_Check(pDX, IDC_TOOLBAR_NODIVIDER, m_bNoDivider);
DDX_Radio(pDX, IDC_TOOLBAR_VERTICAL, m_nOrientation);
DDX_Check(pDX, IDC_TOOLBAR_GRIPPER, m_bGripper);
DDX_Check(pDX, IDC_TOOLBAR_TOOLTIPS, m_bToolTips);
DDX_Radio(pDX, IDC_TOOLBAR_RADIOBUTTONS, m_nButtonStyle);
DDX_Check(pDX, IDC_TOOLBAR_DISABLEDLIST, m_bDisabledList);
DDX_Check(pDX, IDC_TOOLBAR_HOTLIST, m_bHotList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CToolBarDlg, CPropertyPage)
//{{AFX_MSG_MAP(CToolBarDlg)
ON_BN_CLICKED(IDC_TOOLBAR_NODIVIDER, OnToolbarNodivider)
ON_BN_CLICKED(IDC_TOOLBAR_HORIZONTAL, OnToolbarOrientation)
ON_BN_CLICKED(IDC_TOOLBAR_GRIPPER, OnToolbarGripper)
ON_BN_CLICKED(IDC_TOOLBAR_TOOLTIPS, OnToolbarTooltips)
ON_BN_CLICKED(IDC_TOOLBAR_RADIOBUTTONS, OnButtonStyle)
ON_BN_CLICKED(IDC_TOOLBAR_HOTLIST, OnToolbarHotlist)
ON_BN_CLICKED(IDC_TOOLBAR_DISABLEDLIST, OnToolbarDisabledlist)
ON_BN_CLICKED(IDC_TOOLBAR_DISABLEBUTTON, OnToolbarDisablebutton)
ON_BN_CLICKED(IDC_TOOLBAR_VERTICAL, OnToolbarOrientation)
ON_BN_CLICKED(IDC_TOOLBAR_PUSHBUTTONS, OnButtonStyle)
ON_BN_CLICKED(IDC_TOOLBAR_CHECKBUTTONS, OnButtonStyle)
//}}AFX_MSG_MAP
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CToolBarDlg message handlers
BOOL CToolBarDlg::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// m_imageNormal.Create (IDB_TOOLBAR_ENABLED, 16, 4, ILC_MASK);
m_imageNormal.Create (IDB_TOOLBAR_ENABLED, 24, 4, ILC_MASK);
m_imageDisabled.Create (IDB_TOOLBAR_DISABLED, 24, 4, ILC_MASK);
m_imageHot.Create (IDB_TOOLBAR_HOT, 24, 4, ILC_MASK);
CreateToolBar (WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN | TBSTYLE_WRAPABLE | TBSTYLE_TOOLTIPS);
return TRUE;
}
void CToolBarDlg::CreateToolBar(DWORD dwStyle)
{
TBBUTTON ButtonData[4] =
{
0, ID_LIST_LARGEICON, TBSTATE_ENABLED | TBSTATE_CHECKED, TBSTYLE_BUTTON | TBSTYLE_CHECKGROUP, 0, 0, 0, -1,
1, ID_LIST_SMALLICON, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_CHECKGROUP, 0, 0, 0, -1,
2, ID_LIST_LIST, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_CHECKGROUP, 0, 0, 0, -1,
3, ID_LIST_REPORT, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_CHECKGROUP, 0, 0, 0, -1
};
CRect rc = CRect (0, 0, 0, 0);
// rc.bottom = 18;
// rc.right = 4 * 24 + 6;
rc.right = 4 * 48 + 6;
m_ToolBar.Create (dwStyle, // | CCS_ADJUSTABLE,
rc,
this, 0);
m_ToolBar.SetImageList (&m_imageNormal);
m_ToolBar.AddButtons (4, ButtonData);
m_ToolBar.GetToolTips ()->Activate (FALSE);
}
void CToolBarDlg::OnToolbarNodivider()
{
UpdateData (TRUE);
CRect rcBar;
m_ToolBar.GetWindowRect (rcBar);
ScreenToClient (rcBar);
if (m_bNoDivider)
{
m_ToolBar.ModifyStyle (0, CCS_NODIVIDER, TRUE);
rcBar.bottom -= 2;
}
else
{
m_ToolBar.ModifyStyle (CCS_NODIVIDER, 0, TRUE);
rcBar.bottom += 2;
}
m_ToolBar.SetWindowPos (NULL, rcBar.left, rcBar.top,
rcBar.Width (), rcBar.Height(),
SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
BOOL CToolBarDlg::OnToolTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom;
// is idFrom is actually the HWND of the tool?
if (pTTT->uFlags & TTF_IDISHWND)
nID = ::GetDlgCtrlID((HWND)nID);
if(nID)
{
pTTT->lpszText = MAKEINTRESOURCE(nID);
pTTT->hinst = AfxGetResourceHandle();
return(TRUE);
}
return(FALSE);
}
// 0 is top/left
// 0 is vertical
//
/*
void CToolBarDlg::OnToolbarPosition()
{
UpdateData (TRUE);
if (m_nOrientation) // Is toolbar horizontal?
{
if (m_nOrientation)
m_ToolBar.ModifyStyle (CCS_TOP, CCS_BOTTOM, TRUE);
else
m_ToolBar.ModifyStyle (CCS_BOTTOM, CCS_TOP, TRUE);
DWORD dwStyle = m_ToolBar.GetStyle ();
m_ToolBar.DestroyWindow ();
CreateToolBar (dwStyle);
}
else // Vertical orientation
{
CRect rc, rcBar;
GetWindowRect (rc);
m_ToolBar.GetWindowRect (rcBar);
ScreenToClient (rc);
ScreenToClient (rcBar);
if (m_nTopOrLeft) // to the right?
{
rcBar.left = rc.right - rcBar.right;
rcBar.right = rc.right;
}
else
{
rcBar.right = rcBar.right - rcBar.left;
rcBar.left = 0;
}
m_ToolBar.SetWindowPos (NULL, rcBar.left, rcBar.top,
rcBar.Width (), rcBar.Height(),
SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
}
*/
void CToolBarDlg::OnToolbarOrientation()
{
int nOld = m_nOrientation;
UpdateData (TRUE);
if (nOld == m_nOrientation)
return;
CRect rcBar;
m_ToolBar.GetWindowRect (rcBar);
ScreenToClient (rcBar);
DWORD dwSize = m_ToolBar.GetButtonSize ();
int nCount = m_ToolBar.GetButtonCount ();
int nWidth = LOWORD (dwSize);
int nHeight = HIWORD (dwSize);
//
// Leave the left and top as is. Make the toolbar
// as wide as it is deep and as deep as it is wide
//
if (!m_bNoDivider)
rcBar.top -= 6;
if (m_nOrientation) // Horizontal
{
rcBar.right = rcBar.left + nCount * nWidth + 2;
rcBar.bottom = rcBar.top + nHeight;
if (m_bGripper)
rcBar.right += 6;
}
else // Vertical
{
if (m_bGripper)
nWidth += 6;
rcBar.right = rcBar.left + nWidth;
rcBar.bottom = rcBar.top + nCount * nHeight + 2;
}
m_ToolBar.SetWindowPos (NULL, rcBar.left, rcBar.top,
rcBar.Width (), rcBar.Height(),
SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
void CToolBarDlg::OnToolbarGripper()
{
UpdateData (TRUE);
CRect rcBar;
m_ToolBar.GetWindowRect (rcBar);
ScreenToClient (rcBar);
if (!m_bNoDivider)
rcBar.top -= 4;
if (m_bGripper)
{
m_ToolBar.ModifyStyle (0, CBRS_GRIPPER, TRUE);
rcBar.right += 6;
}
else
{
m_ToolBar.ModifyStyle (CBRS_GRIPPER, 0, TRUE);
rcBar.right -= 6;
}
m_ToolBar.SetWindowPos (NULL, rcBar.left, rcBar.top,
rcBar.Width (), rcBar.Height(),
SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
InvalidateRect (rcBar);
}
void CToolBarDlg::OnToolbarTooltips()
{
UpdateData (TRUE);
if (m_bToolTips)
m_ToolBar.GetToolTips ()->Activate (TRUE);
else
m_ToolBar.GetToolTips ()->Activate (FALSE);
}
void CToolBarDlg::OnButtonStyle()
{
UpdateData (TRUE);
int nCount = m_ToolBar.GetButtonCount ();
BYTE NewStyle;
switch (m_nButtonStyle)
{
case 0: // Radio Buttons
NewStyle = TBSTYLE_CHECKGROUP;
break;
case 1: // Check Buttons
NewStyle = TBSTYLE_CHECK;
break;
case 2: // Push Buttons
NewStyle = TBSTYLE_BUTTON;
break;
}
for (int i = 0; i < nCount; ++i)
{
TBBUTTON tb;
TBBUTTONINFO tbi;
m_ToolBar.GetButton (i, &tb);
tbi.cbSize = sizeof (TBBUTTONINFO);
m_ToolBar.GetButtonInfo (tb.idCommand, &tbi);
tbi.fsStyle = NewStyle;
if (NewStyle == TBSTYLE_BUTTON)
tbi.fsState &= ~TBSTATE_CHECKED;
if (NewStyle == TBSTYLE_CHECKGROUP)
{
if (i)
tbi.fsState &= ~TBSTATE_CHECKED;
else
tbi.fsState |= TBSTATE_CHECKED;
}
tbi.dwMask = TBIF_STYLE | TBIF_STATE;
m_ToolBar.SetButtonInfo (tb.idCommand, &tbi);
}
}
void CToolBarDlg::OnToolbarHotlist()
{
UpdateData (TRUE);
if (m_bHotList)
m_ToolBar.SetHotImageList (&m_imageHot);
else
m_ToolBar.SetHotImageList (NULL);
m_ToolBar.Invalidate ();
}
void CToolBarDlg::OnToolbarDisabledlist()
{
UpdateData (TRUE);
if (m_bDisabledList)
m_ToolBar.SetDisabledImageList (&m_imageDisabled);
else
m_ToolBar.SetDisabledImageList (NULL);
m_ToolBar.Invalidate ();
}
void CToolBarDlg::OnToolbarDisablebutton()
{
UpdateData (TRUE);
int nCount = m_ToolBar.GetButtonCount ();
TBBUTTONINFO tbi;
for (int i = 0; i < nCount; ++i)
{
TBBUTTON tb;
m_ToolBar.GetButton (i, &tb);
tbi.cbSize = sizeof (TBBUTTONINFO);
m_ToolBar.GetButtonInfo (tb.idCommand, &tbi);
tbi.fsState ^= TBSTATE_ENABLED;
tbi.dwMask = TBIF_STATE;
m_ToolBar.SetButtonInfo (tb.idCommand, &tbi);
}
CWnd *button = GetDlgItem (IDC_TOOLBAR_DISABLEBUTTON);
if (tbi.fsState & TBSTATE_ENABLED)
button->SetWindowText ("Disable\nButtons");
else
button->SetWindowText ("Enable\nButtons");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -