From b3a4d65e9469305d5ccb0eeffc0888019cc1baf5 Mon Sep 17 00:00:00 2001 From: george82 Date: Tue, 26 Jul 2005 10:22:56 +0000 Subject: [PATCH] Added ToolBar class implementation to the rfb_win32 library. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@300 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- rfb_win32/ToolBar.cxx | 201 ++++++++++++++++++++++++++++++++++++++++++ rfb_win32/ToolBar.h | 110 +++++++++++++++++++++++ 2 files changed, 311 insertions(+) create mode 100644 rfb_win32/ToolBar.cxx create mode 100644 rfb_win32/ToolBar.h diff --git a/rfb_win32/ToolBar.cxx b/rfb_win32/ToolBar.cxx new file mode 100644 index 00000000..77a2f3d5 --- /dev/null +++ b/rfb_win32/ToolBar.cxx @@ -0,0 +1,201 @@ +/* Copyright (C) 2004 TightVNC Team. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +// -=- ToolBar control class. + +#include "ToolBar.h" + +ToolBar::ToolBar() : hwndToolBar(0), tbID(-1) { + INITCOMMONCONTROLSEX icex; + + // Ensure that the common control DLL is loaded + icex.dwSize = sizeof(INITCOMMONCONTROLSEX); + icex.dwICC = ICC_BAR_CLASSES; + InitCommonControlsEx(&icex); +} + +ToolBar::~ToolBar() { + DestroyWindow(getHandle()); +} + +bool ToolBar::create(int _tbID, HWND _parentHwnd, DWORD dwStyle) { + parentHwnd = _parentHwnd; + dwStyle |= WS_CHILD; + + // Create the ToolBar window + hwndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, 0, dwStyle, + 0, 0, 25, 25, parentHwnd, (HMENU)_tbID, GetModuleHandle(0), 0); + + if (hwndToolBar) { + tbID = _tbID; + + // It's required for backward compatibility + SendMessage(hwndToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); + } + return (hwndToolBar ? true : false); +}; + +int ToolBar::addBitmap(int nButtons, UINT bitmapID) { + assert(nButtons > 0); + TBADDBITMAP resBitmap; + resBitmap.hInst = GetModuleHandle(0); + resBitmap.nID = bitmapID; + return SendMessage(getHandle(), TB_ADDBITMAP, nButtons, (LPARAM)&resBitmap); +} + +int ToolBar::addSystemBitmap(UINT stdBitmapID) { + TBADDBITMAP resBitmap; + resBitmap.hInst = HINST_COMMCTRL; + resBitmap.nID = stdBitmapID; + return SendMessage(getHandle(), TB_ADDBITMAP, 0, (LPARAM)&resBitmap); +} + +bool ToolBar::setBitmapSize(int width, int height) { + int result = SendMessage(getHandle(), TB_SETBITMAPSIZE, + 0, MAKELONG(width, height)); + return (result ? true : false); +} + +bool ToolBar::addButton(int iBitmap, int idCommand, BYTE state, BYTE style, UINT dwData, int iString) { + TBBUTTON tbb; + tbb.iBitmap = iBitmap; + tbb.idCommand = idCommand; + tbb.fsState = state; + tbb.fsStyle = style; + tbb.dwData = dwData; + tbb.iString = iString; + + int result = SendMessage(getHandle(), TB_ADDBUTTONS, 1, (LPARAM)&tbb); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::addNButton(int nButtons, LPTBBUTTON tbb) { + assert(nButtons > 0); + assert(tbb > 0); + int result = SendMessage(getHandle(), TB_ADDBUTTONS, nButtons, (LPARAM)tbb); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::deleteButton(int indexButton) { + assert(indexButton >= 0); + int result = SendMessage(getHandle(), TB_DELETEBUTTON, indexButton, 0); + + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::insertButton(int indexButton, LPTBBUTTON tbb) { + assert(indexButton >= 0); + assert(tbb > 0); + int result = SendMessage(getHandle(), TB_INSERTBUTTON, + indexButton, (LPARAM)tbb); + + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +int ToolBar::getButtonInfo(int idButton, TBBUTTONINFO *btnInfo) { + assert(idButton >= 0); + assert(btnInfo > 0); + return SendMessage(getHandle(), TB_GETBUTTONINFO, idButton, (LPARAM)btnInfo); +} + +int ToolBar::getButtonsHeight() { + return HIWORD(SendMessage(getHandle(), TB_GETBUTTONSIZE, 0, 0)); +} + +int ToolBar::getButtonsWidth() { + return LOWORD(SendMessage(getHandle(), TB_GETBUTTONSIZE, 0, 0)); +} + +bool ToolBar::setButtonInfo(int idButton, TBBUTTONINFO* btnInfo) { + assert(idButton >= 0); + assert(btnInfo > 0); + int result = SendMessage(getHandle(), TB_SETBUTTONINFO, + idButton, (LPARAM)(LPTBBUTTONINFO)btnInfo); + return (result ? true : false); +} + +bool ToolBar::checkButton(int idButton, bool check) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_CHECKBUTTON, + idButton, MAKELONG(check, 0)); + return (result ? true : false); +} + +bool ToolBar::enableButton(int idButton, bool enable) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_ENABLEBUTTON, + idButton, MAKELONG(enable, 0)); + return (result ? true : false); +} + +bool ToolBar::pressButton(int idButton, bool press) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_PRESSBUTTON, + idButton, MAKELONG(press, 0)); + return (result ? true : false); +} + +bool ToolBar::getButtonRect(int nIndex, LPRECT buttonRect) { + int result = SendMessage(getHandle(), TB_GETITEMRECT, + nIndex, (LPARAM)buttonRect); + return (result ? true : false); +} + +bool ToolBar::setButtonSize(int width, int height) { + assert(width > 0); + assert(height > 0); + int result = SendMessage(getHandle(), TB_SETBUTTONSIZE, + 0, MAKELONG(width, height)); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + return true; + } + return false; +} + +void ToolBar::autoSize() { + DWORD style = SendMessage(getHandle(), TB_GETSTYLE, 0, 0); + if (style & CCS_NORESIZE) { + RECT r, btnRect; + GetClientRect(parentHwnd, &r); + getButtonRect(0, &btnRect); + int height = getButtonsHeight() + btnRect.top * 2 + 2; + SetWindowPos(getHandle(), HWND_TOP, 0, 0, r.right - r.left, height, + SWP_NOMOVE); + } else { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } +} + +int ToolBar::getHeight() { + RECT r; + GetWindowRect(getHandle(), &r); + return r.bottom - r.top; +} diff --git a/rfb_win32/ToolBar.h b/rfb_win32/ToolBar.h new file mode 100644 index 00000000..d1c0d0ad --- /dev/null +++ b/rfb_win32/ToolBar.h @@ -0,0 +1,110 @@ +/* Copyright (C) 2004 TightVNC Team. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +// -=- ToolBar.h + +#include +#include +#include + +class ToolBar { +public: + ToolBar(); + virtual ~ToolBar(); + + // create() creates a windows toolbar. dwStyle is a combination of + // the toolbar control and button styles. It returns TRUE if successful, + // or FALSE otherwise. + bool create(int tbID, HWND parentHwnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT); + + // -=- Button images operations + + // addBitmap() adds one or more images from resources to the list of button + // images available for a toolbar. Returns the index of the first new image + // if successful, or -1 otherwise. + int addBitmap(int nButtons, UINT bitmapID); + + // addSystemBitmap() adds the system-defined button bitmaps to the list + // of the toolbar button specifying by stdBitmapID. Returns the index of + // the first new image if successful, or -1 otherwise. + int addSystemBitmap(UINT stdBitmapID); + + // setBitmapSize() sets the size of the bitmapped images to be added + // to a toolbar. It returns TRUE if successful, or FALSE otherwise. + // You must call it before addBitmap(). + bool setBitmapSize(int width, int height); + + // -=- Button operations + + // addButton() adds one button. + bool addButton(int iBitmap, int idCommand, BYTE state=TBSTATE_ENABLED, BYTE style=TBSTYLE_BUTTON, UINT dwData=0, int iString=0); + + // addNButton() adds nButtons buttons to a toolbar. + bool addNButton(int nButtons, LPTBBUTTON tbb); + + // deleteButton() removes a button from the toolbar. + bool deleteButton(int nIndex); + + // insertButton() inserts a button in a toolbar control by index. + bool insertButton(int nIndex, LPTBBUTTON tbb); + + // getButtonInfo() retrieves extended information about a toolbar's button. + // It returns index of the button if successful, or -1 otherwise. + int getButtonInfo(int idButton, TBBUTTONINFO *btnInfo); + + // getButtonsHeight() retrieves the height of the toolbar buttons. + int getButtonsHeight(); + + // getButtonsWidth() retrieves the width of the toolbar buttons. + int getButtonsWidth(); + + // setButtonInfo() sets the information for an existing button in a toolbar. + bool setButtonInfo(int idButton, TBBUTTONINFO* ptbbi); + + // checkButton() checks or unchecks a given button in a toolbar control. + bool checkButton(int idButton, bool check); + + // enableButton() enables or disables the specified button in the toolbar. + bool enableButton(int idButton, bool enable); + + // pressButton() presses or releases the specified button in the toolbar. + bool pressButton(int idButton, bool press); + + // getButtonRect() gets the bounding rectangle of a button in a toolbar. + bool getButtonRect(int nIndex, LPRECT buttonRect); + + // setButtonSize() sets the size of the buttons to be added to a toolbar. + // Button size must be largen the button bitmap. + bool setButtonSize(int width, int height); + + + + // autoSize() resizes the toolbar window. + void autoSize(); + + // getHandle() returns handle to a toolbar window. + HWND getHandle() { return hwndToolBar; } + + // getHeight() returns the toolbar window height. + int getHeight(); + +protected: + HWND hwndToolBar; + HWND parentHwnd; + int tbID; +}; -- 2.39.5