📄 toolbar.h
字号:
/**************************************************************************
*
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
* PURPOSE.
*
* Copyright (C) 1992 - 1996 Microsoft Corporation. All Rights Reserved.
*
**************************************************************************/
/****************************************************************************
*
* toolbar.h: Toolbar include file
*
* Vidcap32 Source code
*
***************************************************************************/
/*****************************************************************************
* *
* Program Description: Implements a generic toolbar. *
* *
* Here's how to use it: *
* *
* Include the source files "toolbar.h" and "toolbar.c" in your *
* application. *
* *
* Include a line in your application's RC file that gives a file *
* name with a resource id eg. IDBMP_BUTTONS. This is a .BMP file that *
* contains all of the pictures of the buttons you want on your toolbar. *
* Also, make a define for your label with a unique value. If your app has *
* more than one toolbar, and all toolbars don't share a bitmap file, then *
* you will need several defines. *
* *
* e.g. IDBMP_BUTTONS BITMAP "buttons.bmp" *
* IDBMP_ARROWS BITMAP "arrows.bmp" *
* *
* This file must have the different buttons across horizontally *
* and the different states for these buttons vertically. Change the *
* defines in this header file to match the button names and state names of *
* your buttons. You must include the states listed here, and actually *
* you probably won't need to change them at all. The numbers for a button *
* or state are indexes into the bitmap, so the pictures must match. *
* *
* STATE DESCRIPTIONS: *
* GRAYED: The button cannot be pressed & is inactive *
* UP: The button is up *
* DOWN: The button is down *
* FOCUSUP: The button is up and is the one with focus *
* FOCUSDOWN: The button is down and is the one with focus*
* FULLDOWN: A checkbox button has this additional state *
* where it is all the way down when pressed *
* and when it is let go, it will go into *
* either the UP or DOWN state (maybe focused) *
* *
* When you draw the pictures, make sure to get the right state in the right *
* vertical position in the bitmap to match the #define's. *
* *
* A button can also have a type associated with it: *
* *
* PUSH: When pressed it goes down, when let go it bounces *
* up. Therefore, when you aren't currently holding *
* the mouse button or space bar on it, it will *
* ALWAYS be in the up position. It can be in any *
* state except FULLDOWN, which is invalid. *
* *
* CHECKBOX: This button can be up or down. When pushed, it *
* toggles into the opposite state. However, it *
* is always in the FULLDOWN state when being held *
* down with the mouse button or space bar, and when *
* let go, it will go into the opposite state of what *
* it was in before you pressed it. E.G. The button *
* is up. You press it, and it goes way down. You let *
* go, and it comes up a bit, but it's still down. You*
* press it again, and it goes further down before *
* popping all the way up. *
* *
* RADIO: This is a group of buttons that can be up or down, *
* and also have the intermediate step of being *
* FULLDOWN when being held down. But, when you *
* push one of the radio buttons down, all other radio *
* buttons in its group will pop up. Any group can *
* have only 1 down at a time, and 1 must be down. *
* *
* CUSTOM: If your application is wierd, you can have a custom *
* type button that does anything you want it to. *
* *
* First, your app must call: toolbarInit(hInst, hPrev); *
* with the two instance parameters to register a toolbar window class. *
* Then your app is free to call CreateWindow with a class of *
* szToolBarClass to create one or more toolbar windows anywhere it wants *
* and of any size it wants, presumably as the child window of another of the*
* app's windows. The file that creates the window must declare an *
* extern char szToolBarClass[]; All messages about activity to a toolbar *
* button will go to the parent window of the toolbar. *
* *
* Next, call: toolbarSetBitmap(HWND hwnd, HANDLE hInst, int ibmp, *
* POINT ptSize); *
* Pass it the resource ID (eg. IDBMP_BUTTONS) to tell the toolbar where to *
* find the pictures for the buttons. Also pass a point with the width and *
* height of each button (eg. 24 X 22) so it knows how to find individual *
* buttons in the bitmap file. *
* *
* Next, call: toolbarAddTool(HWND hwnd, TOOLBUTTON tb); *
* as many times as you want to add a button to the toolbar specified by *
* hwnd. You fill in the "tb" struct with the following information: *
* *
* tb.rc = the rect in the toolbar window to place the button *
* based at 0,0 and measured in pixels. *
* tb.iButton = the ID of the button you wish the add (which is *
* the horizontal offset into the bitmap of buttons). *
* Only one of each button allowed. Use one of the *
* defines (BTN_??????). *
* tb.iState = the initial state of the button (GRAYED, UP, DOWN). *
* If you wish, you can specify a FOCUS'ed state to give *
* any button you wish the focus. By default, it's the *
* one furthest left and tabbing order goes to the right.*
* This is the vertical offset into the bitmap. *
* Use one of the defines (BTNST_?????). *
* tb.iType = The type of button (BTNTYPE_???). Either pushbutton, *
* checkbox, or radio button. (or custom). If it is a *
* radio button, you can have many groups of radio btn's *
* on the same toolbar. Type BTNTYPE_RADIO is one group.*
* Use BTNTYPE_RADIO+1 for another group, BTNTYPE_RADIO+2*
* for a third group, etc. You have thousands. *
* tb.iString = The resource ID of a string to be associated with *
* this button (if you'd like). *
* *
* *
* At any time in the app, you can call toolbarAddTool to add more buttons *
* or toolbarRemoveTool to take some away. To take one away, identify it *
* with it's button ID (horizontal offset in the bitmap). *
* *
* You can also call toolbarRetrieveTool to get the TOOLBUTTON struct back *
* from a button that is on the toolbar. This is the way to change a *
* button's position. Change the tb.rc and then Remove and Add the button *
* again so that the tabbing order will be re-calculated based on the new *
* rect of the tool. *
* *
* Now, all buttons will automatically behave properly. They'll go up and *
* down as you press on them, or use the keyboard, groups of radio buttons *
* will pop up as you press a different one down, etc. etc. etc. *
* You don't have to do a thing! *
* *
* The parent of the toolbar window will get a WM_COMMAND message with *
* a wParam of IDC_TOOLBAR whenever anything happens to a button. *
* The LOWORD of the lParam is the hwnd of the toolbar window that has the *
* button on it. The (HIWORD & 0xFF) is the button ID of the button. *
* Remember to change IDC_TOOLBAR to something unique. *
* *
* The app can then call toolbarIndexFromButton(hwnd, buttonID) *
* to get the index of the button (used for subsequent calls). *
* *
* Then call: toolbarStateFromButton(hwnd, buttonID) *
* *
* to get either BTNST_UP or BTNST_DOWN. This is the *
* NEW state of the button since the activity on the *
* button. It can also be BTNST_GRAYED, but you won't get *
* any activity messages while it's grayed, unless it is a *
* cutsom button. *
* *
* Call toolbarFullStateFromButton(hwnd, buttonID) *
* *
* to get more detail about the state. It can also return *
* BTNST_FULLDOWN as well as the above states. In the case *
* of BTNST_FULLDOWN, you'll have to call *
* toolbarPrevStateFromButton(hwnd, btn ID) to get the state*
* before it went full down. *
* *
* toolbarPrevStateFromButton(hwnd, buttonID) *
* *
* is only valid when the state is BTNST_FULLDOWN. *
* *
* toolbarActivityFromIndex(hwnd, buttonID) *
* *
* tells you what just happened to the button. *
* BTNACT_KEYDOWN, BTNACT_MOUSEUP, etc. are possibilities. *
* BTNACT_MOUSEMOUSEOFF means that they pressed it down and *
* moved the mouse off of the button ( so it was re- drawn *
* in its previous state before being pressed). *
* BTNACT_MOUSEMOUSEON means that the above happened and *
* then the mouse moved back on top of the button again, so *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -