// TopToolbar.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BoounionPLC.h" #include "TopToolbar.h" #include "afxdialogex.h" #include "Common.h" // CTopToolbar ¶Ô»°¿ò IMPLEMENT_DYNAMIC(CTopToolbar, CDialogEx) CTopToolbar::CTopToolbar(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_TOP_TOOLBAR, pParent) { m_crBkgnd = TOP_TOOLBAR_BACKGROUND; m_hbrBkgnd = nullptr; } CTopToolbar::~CTopToolbar() { } void CTopToolbar::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd); DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDelete); DDX_Control(pDX, IDC_BUTTON_SETTINGS, m_btnSettings); DDX_Control(pDX, IDC_BUTTON_OPERATOR, m_btnOperator); } BEGIN_MESSAGE_MAP(CTopToolbar, CDialogEx) ON_WM_CTLCOLOR() ON_WM_DESTROY() ON_WM_SIZE() ON_NOTIFY(BLBUTTON_MENU_ITEM_CLICKED, IDC_BUTTON_OPERATOR, &CTopToolbar::OnButtonOperatorMenuClicked) END_MESSAGE_MAP() // CTopToolbar ÏûÏ¢´¦Àí³ÌÐò BOOL CTopToolbar::OnInitDialog() { CDialogEx::OnInitDialog(); InitBtn(m_btnAdd, "Add_blue_32.ico", "Add_Gray_32.ico"); InitBtn(m_btnDelete, "delete_blue_32.ico", "delete_Gray_32.ico"); InitBtn(m_btnSettings, "Settings_High_32.ico", "Settings_Gray_32.ico"); InitBtn(m_btnOperator, "Operator_High_32.ico", "Operator_Gray_32.ico"); HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCEA(IDR_MENU_OPEATOR)); m_btnOperator.SetMenu(hMenu); return TRUE; // return TRUE unless you set the focus to a control // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE } HBRUSH CTopToolbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkColor(m_crBkgnd); } if (m_hbrBkgnd == nullptr) { m_hbrBkgnd = CreateSolidBrush(m_crBkgnd); } return m_hbrBkgnd; } void CTopToolbar::OnDestroy() { CDialogEx::OnDestroy(); if (m_hbrBkgnd != nullptr) { ::DeleteObject(m_hbrBkgnd); m_hbrBkgnd = nullptr; } } void CTopToolbar::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (GetDlgItem(IDC_BUTTON_ADD) == nullptr) return; Resize(); } #define BTN_WIDTH 60 #define BTN_HEIGHT 30 void CTopToolbar::Resize() { CWnd* pItem; CRect rcClient, rcItem; GetClientRect(&rcClient); int nBthHeight = (rcClient.Height() - 10); int x = 2, y = 3; pItem = GetDlgItem(IDC_BUTTON_ADD); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; pItem = GetDlgItem(IDC_BUTTON_DELETE); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; pItem = GetDlgItem(IDC_TOOLBAR_LINE1); pItem->MoveWindow(x, y + 6, 2, nBthHeight - 12); x += 4; pItem = GetDlgItem(IDC_BUTTON_SETTINGS); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; x = rcClient.right - 5 - BTN_WIDTH - 20; pItem = GetDlgItem(IDC_BUTTON_OPERATOR); pItem->MoveWindow(x, y, BTN_WIDTH + 20, nBthHeight); CWnd* pLine = GetDlgItem(IDC_LINE1); pLine->MoveWindow(0, rcClient.bottom - 2, rcClient.Width(), 2); } void CTopToolbar::InitBtn(CBlButton& btn, const char* pszIcon1, const char* pszIcon2) { CString strIcon1, strIcon2; HICON hIcon1, hIcon2; strIcon1.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon1); strIcon2.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon2); hIcon1 = (HICON)::LoadImage(AfxGetInstanceHandle(), strIcon1, IMAGE_ICON, 32, 32, LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); hIcon2 = (HICON)::LoadImage(AfxGetInstanceHandle(), strIcon2, IMAGE_ICON, 32, 32, LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); btn.SetBkgndColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND); btn.SetBkgndColor(BS_PRESS, RGB(185, 209, 234)); btn.SetBkgndColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND); btn.SetFrameColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND); btn.SetFrameColor(BS_PRESS, RGB(185, 209, 234)); btn.SetFrameColor(BS_HOVER, RGB(185, 209, 234)); btn.SetFrameColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND); btn.SetIcon(hIcon1, hIcon2, 32); } CWnd* CTopToolbar::GetBtn(UINT nId) { return GetDlgItem(nId); } void CTopToolbar::SetOperatorBtnText(const char* pszText) { m_btnOperator.SetWindowText(pszText); } BOOL CTopToolbar::OnCommand(WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case IDC_BUTTON_ADD: case IDC_BUTTON_DELETE: case IDC_BUTTON_SETTINGS: GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, 0, LOWORD(wParam)); break; } return CDialogEx::OnCommand(wParam, lParam); } void CTopToolbar::OnButtonOperatorMenuClicked(NMHDR* pNMHDR, LRESULT* pResult) { BLBUTTON_NMHDR* pblbNmhdr = reinterpret_cast(pNMHDR); GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, (int)pblbNmhdr->dwData, IDC_BUTTON_OPERATOR); *pResult = 0; } HMENU CTopToolbar::GetOperatorMenu() { return m_btnOperator.GetMenu(); } BOOL CTopToolbar::PreTranslateMessage(MSG* pMsg) { if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { return TRUE; } return CDialogEx::PreTranslateMessage(pMsg); }