////////////////////////////////////////////////////////////////// // File : ddbtn.h ( DropDownButton) // Purpose : new control for drop down button // // // Copyright(c) 1991-1997, Microsoft Corp. All rights reserved // // History :970905 Started ////////////////////////////////////////////////////////////////// //---------------------------------------------------------------- // //Detail description // //---------------------------------------------------------------- #if 0 This Drop down Button(DDButton) control has 2 mode, 1. Separated Button. 2. No Separated Button. Normal case is Separated button. like Word or Excel's common interface, Icon button and Triangle button. If DDBS_NOSEPARATED is NOT set, you can see below face. this is 1.case. Figure 1. normal face. left right +-----------+-------+ | | | | | ##### | | | ### | | | # | | | | +-----------+-------+ you can set Text or Icon to left button, with DDButton_SetText() or DDButton_SetIcon(). you can set Item list to DDButton with DDButton_InsertItem() or DDButton_AddItem(). If some item are inserted, and you can see drop down menu if you clicked the "right" button. Figure 2. drop down menu has shown. left button right button +-----------+-------+ | | | | | ##### | | | ### | | | # | | | | +-----------+-------+---+ | I t e m 0 | | I t e m 1 | |V I t e m 2 | | I t e m 3 | | I t e m 4 | | I t e m 5 | | I t e m 6 | +-----------------------+ "V" means current selected Item. If you Call DDButton_GetCurSel(), you can get current selected item. in this case, you can get 2 as integer value. If you selected specified item in the menu, not current selected item, you can get WM_COMMAND in Parent window procedure with, "DDBN_SELCHANGE". you can also set current selected item by DDButton_SetCurSel(). If you click "left button", current selected item index is incremented. in this case, if you click "left button", you can receive DDBN_CLICKED notify, and AFTER that, you receive DDBN_SELCHANGE. current selected index has changed to "3" and Before menu will be shown, you can receive WM_COMMAND with DDBN_DROPDOWN, and after menu has hidden, you can receive, DDBN_CLOSEUP notify. If DDBS_NOSEPARATED is NOT set, you can see below face. Figure 3. with DDBS_NOSEPARATED style. +-------------------+ | | | ##### | | ### | | # | | | +-------------------+ This DDButton has this style, you can NOT receive DDBN_CLICKED. only DDBN_DROPDOWN, DDBN_CLOSEUP and DDBN_SELCHANGE will be sent. #endif //if 0 #ifndef _DROP_DOWN_BUTTON_ #define _DROP_DOWN_BUTTON_ //---------------------------------------------------------------- //Drop Down Button Style //---------------------------------------------------------------- #define DDBS_TEXT 0x0000 // Show Text as Button Face. #define DDBS_ICON 0x0001 // Show Icon as Button Face. #define DDBS_THINEDGE 0x0002 // Draw Thin Edge. #define DDBS_FLAT 0x0004 // Flat style drop down button. #define DDBS_NOSEPARATED 0x0010 // No separated button. // when button was pushed, always drop down is shown. //---------------------------------------------------------------- //Drop down Item's type mask. //---------------------------------------------------------------- #define DDBF_TEXT 0x0000 //Only Unicode string. #define DDBF_ICON 0x0001 //not used. #define DDBF_SEPARATOR 0x0002 //not used. //---------------------------------------------------------------- //Drop down Item structure //---------------------------------------------------------------- #pragma pack(1) typedef struct tagDDBITEM { INT cbSize; // DDBITEM structure size is needed. UINT mask; // reserved. not used. LPWSTR lpwstr; // drop down item string. HICON hIcon; //reserved. not used. LPARAM lParam; //reserved. not used. }DDBITEM, *LPDDBITEM; #pragma pack() //---------------------------------------------------------------- //Drop Down Button Message //---------------------------------------------------------------- #define DDBM_ADDITEM (WM_USER + 100) #define DDBM_INSERTITEM (WM_USER + 101) #define DDBM_SETCURSEL (WM_USER + 102) #define DDBM_GETCURSEL (WM_USER + 103) #define DDBM_SETICON (WM_USER + 104) #define DDBM_SETTEXT (WM_USER + 105) #define DDBM_SETSTYLE (WM_USER + 106) //---------------------------------------------------------------- //Drop Down Button Notify code. //It is set to Parent window of Drop Down button as //WM_COMMAND. //---------------------------------------------------------------- //---------------------------------------------------------------- // Notify: DDBN_CLICKED // When it comes?: If DDBS_NOSEPARATED was SET,this notify only come, // when current selected item was change. // If DDBS_NOSEPARATED was NOT set, when button was clicked, or menu item // was changed, this notify come. //---------------------------------------------------------------- //---------------------------------------------------------------- // Notify: DDBN_SELCHANGED // When it comes?: If menu item was selected, this notify come. // if DDBS_NOSEPARATED style is NOT set, // when right button(Separated right button, not a mouse) // was clicked, this notify comes, after DDBN_CLICKED notify. //---------------------------------------------------------------- //---------------------------------------------------------------- // Notify: DDBN_DROPDOWN // When it comes?: If dropdown menu was shown, this notify come. //---------------------------------------------------------------- //---------------------------------------------------------------- // Notify: DDBN_CLOSEUP // When it comes?: If dropdown menu was hidden, this notify come. //---------------------------------------------------------------- #define DDBN_CLICKED 0 #define DDBN_SELCHANGE 1 #define DDBN_DROPDOWN 2 #define DDBN_CLOSEUP 3 //---------------------------------------------------------------- //Drop Down Button Message Macro. //---------------------------------------------------------------- ////////////////////////////////////////////////////////////////// // Function : DDButton_AddItem // Type : INT // Purpose : add dropdown item. // Args : HWND hwndCtrl: DDButton window handle // : LPDDBITEM lpDDBItem: // Remarks : when it was called, // : lpDDBItem->lpwstr data is copyed to DDButton's // : internal data area. // Return : ////////////////////////////////////////////////////////////////// #define DDButton_AddItem(hwndCtrl, pddbItem) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_ADDITEM, 0, (LPARAM)pddbItem)) ////////////////////////////////////////////////////////////////// // Function : DDButton_InsertItem // Type : INT // Purpose : insert dropdown item. // Args : HWND hwndCtrl: DDButton window handle // : INT index: // : LPDDBITEM lpDDBItem: // Remarks : when it was called, // : lpDDBItem->lpwstr data is copyed to DDButton's // : internal data area. // Return : ////////////////////////////////////////////////////////////////// #define DDButton_InsertItem(hwndCtrl, index, pddbItem) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_INSERTITEM, (WPARAM)(index), (LPARAM)(pddbItem))) ////////////////////////////////////////////////////////////////// // Function : DDButton_SetCurSel // Type : INT // Purpose : Set current item by specified index. // Args : HWND hwndCtrl: DDButton window handle // : INT index: Select index. // Return : ////////////////////////////////////////////////////////////////// #define DDButton_SetCurSel(hwndCtrl, index) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_SETCURSEL, (WPARAM)(index), (LPARAM)0)) ////////////////////////////////////////////////////////////////// // Function : DDButton_GetCurSel // Type : INT // Purpose : // Args : HWND hwndCtrl: DDButton window handle // Return : current selected item index. ////////////////////////////////////////////////////////////////// #define DDButton_GetCurSel(hwndCtrl) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_GETCURSEL, (WPARAM)0, (LPARAM)0)) ////////////////////////////////////////////////////////////////// // Function : DDButton_SetIcon // Type : INT // Purpose : Set button image as icon. // Args : HWND hwndCtrl: DDButton window handle. // : HICON hIcon: Icon handle. // Remarks : DDBS_ICON style must be set. // Return : ////////////////////////////////////////////////////////////////// #define DDButton_SetIcon(hwndCtrl, hIcon) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_SETICON, (WPARAM)hIcon, (LPARAM)0)) ////////////////////////////////////////////////////////////////// // Function : DDButton_SetText // Type : INT // Purpose : Set button image as icon. // Args : HWND hwndCtrl: DDButton window handle. // : LPWSTR lpsz: Unicode String pointer. // Remarks : // Return : ////////////////////////////////////////////////////////////////// #define DDButton_SetText(hwndCtrl, lpsz) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_SETTEXT, (WPARAM)lpsz, (LPARAM)0)) ////////////////////////////////////////////////////////////////// // Function : DDButton_SetStyle // Type : INT // Purpose : Set Drop down button's style. // Args : HWND hwndCtrl: DDButton window handle. // : DWORD dwStyle: DDBS_XXXXX combination. // Remarks : // Return : ////////////////////////////////////////////////////////////////// #define DDButton_SetStyle(hwndCtrl, dwStyle) \ ((int)(DWORD)SendMessage((hwndCtrl), DDBM_SETSTYLE, (WPARAM)dwStyle, (LPARAM)0)) ////////////////////////////////////////////////////////////////// // Function : DDButton_CreateWindow // Type : HWND // Purpose : Opened API. // : Create Drop Down Button. // Args : // : HINSTANCE hInst // : HWND hwndParent // : DWORD dwStyle DDBS_XXXXX combination. // : INT wID Window ID // : INT xPos // : INT yPos // : INT width // : INT height // Return : // DATE : 970905 ////////////////////////////////////////////////////////////////// extern HWND DDButton_CreateWindow(HINSTANCE hInst, HWND hwndParent, DWORD dwStyle, INT wID, INT xPos, INT yPos, INT width, INT height); #ifdef UNDER_CE // In Windows CE, all window classes are process global. extern BOOL DDButton_UnregisterClass(HINSTANCE hInst); #endif // UNDER_CE #endif //_DROP_DOWN_BUTTON_