comparison win/dw.c @ 238:13d3de3f1e83

Rewrote the menu code to not return structs.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 18 Feb 2003 19:34:21 +0000
parents e57c182cac64
children 00d2b1bcf036
comparison
equal deleted inserted replaced
237:efa724294b5f 238:13d3de3f1e83
3686 * id: An ID to be used for getting the resource from the 3686 * id: An ID to be used for getting the resource from the
3687 * resource file. 3687 * resource file.
3688 */ 3688 */
3689 HMENUI API dw_menu_new(ULONG id) 3689 HMENUI API dw_menu_new(ULONG id)
3690 { 3690 {
3691 return (HMENUI)CreatePopupMenu();
3692 }
3693
3694 /*
3695 * Create a menubar on a window.
3696 * Parameters:
3697 * location: Handle of a window frame to be attached to.
3698 */
3699 HMENUI API dw_menubar_new(HWND location)
3700 {
3691 HMENUI tmp; 3701 HMENUI tmp;
3692 3702
3693 tmp.menu = CreatePopupMenu(); 3703 tmp = (HMENUI)CreateMenu();
3694 tmp.hwnd = NULL; 3704
3695 return tmp; 3705 dw_window_set_data(location, "_dw_menu", (void *)tmp);
3696 } 3706
3697 3707 SetMenu(location, (HMENU)tmp);
3698 /* 3708 return location;
3699 * Create a menubar on a window.
3700 * Parameters:
3701 * location: Handle of a window frame to be attached to.
3702 */
3703 HMENUI API dw_menubar_new(HWND location)
3704 {
3705 HMENUI tmp;
3706
3707 tmp.menu = CreateMenu();
3708 tmp.hwnd = location;
3709
3710 SetMenu(location, tmp.menu);
3711 return tmp;
3712 } 3709 }
3713 3710
3714 /* 3711 /*
3715 * Destroys a menu created with dw_menubar_new or dw_menu_new. 3712 * Destroys a menu created with dw_menubar_new or dw_menu_new.
3716 * Parameters: 3713 * Parameters:
3717 * menu: Handle of a menu. 3714 * menu: Handle of a menu.
3718 */ 3715 */
3719 void API dw_menu_destroy(HMENUI *menu) 3716 void API dw_menu_destroy(HMENUI *menu)
3720 { 3717 {
3721 if(menu) 3718 if(menu)
3722 DestroyMenu(menu->menu); 3719 {
3720 HMENU mymenu = (HMENU)*menu;
3721
3722 if(IsWindow((HWND)mymenu) && !IsMenu(mymenu))
3723 mymenu = (HMENU)dw_window_get_data((HWND)mymenu, "_dw_menu");
3724 if(IsMenu(mymenu))
3725 DestroyMenu(mymenu);
3726 }
3723 } 3727 }
3724 3728
3725 /* 3729 /*
3726 * Adds a menuitem or submenu to an existing menu. 3730 * Adds a menuitem or submenu to an existing menu.
3727 * Parameters: 3731 * Parameters:
3734 * submenu: Handle to an existing menu to be a submenu or NULL. 3738 * submenu: Handle to an existing menu to be a submenu or NULL.
3735 */ 3739 */
3736 HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu) 3740 HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu)
3737 { 3741 {
3738 MENUITEMINFO mii; 3742 MENUITEMINFO mii;
3743 HMENU mymenu = (HMENU)menux;
3744
3745 if(IsWindow(menux) && !IsMenu(mymenu))
3746 mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu");
3739 3747
3740 mii.cbSize = sizeof(MENUITEMINFO); 3748 mii.cbSize = sizeof(MENUITEMINFO);
3741 mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_TYPE; 3749 mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_TYPE;
3742 3750
3743 /* Convert from OS/2 style accellerators to Win32 style */ 3751 /* Convert from OS/2 style accellerators to Win32 style */
3757 mii.fType = MFT_STRING; 3765 mii.fType = MFT_STRING;
3758 else 3766 else
3759 mii.fType = MFT_SEPARATOR; 3767 mii.fType = MFT_SEPARATOR;
3760 3768
3761 mii.wID = id; 3769 mii.wID = id;
3762 mii.hSubMenu = submenu.menu; 3770 if(IsMenu((HMENU)submenu))
3771 mii.hSubMenu = (HMENU)submenu;
3772 else
3773 mii.hSubMenu = 0;
3763 mii.dwTypeData = title; 3774 mii.dwTypeData = title;
3764 mii.cch = strlen(title); 3775 mii.cch = strlen(title);
3765 3776
3766 InsertMenuItem(menux.menu, 65535, TRUE, &mii); 3777 InsertMenuItem(mymenu, 65535, TRUE, &mii);
3767 if(menux.hwnd) 3778 if(IsWindow(menux) && !IsMenu((HMENU)menux))
3768 DrawMenuBar(menux.hwnd); 3779 DrawMenuBar(menux);
3769 return (HWND)id; 3780 return (HWND)id;
3770 } 3781 }
3771 3782
3772 /* 3783 /*
3773 * Sets the state of a menu item check. 3784 * Sets the state of a menu item check.
3777 * check: TRUE for checked FALSE for not checked. 3788 * check: TRUE for checked FALSE for not checked.
3778 */ 3789 */
3779 void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check) 3790 void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check)
3780 { 3791 {
3781 MENUITEMINFO mii; 3792 MENUITEMINFO mii;
3793 HMENU mymenu = (HMENU)menux;
3794
3795 if(IsWindow(menux) && !IsMenu(mymenu))
3796 mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu");
3782 3797
3783 mii.cbSize = sizeof(MENUITEMINFO); 3798 mii.cbSize = sizeof(MENUITEMINFO);
3784 mii.fMask = MIIM_STATE; 3799 mii.fMask = MIIM_STATE;
3785 if(check) 3800 if(check)
3786 mii.fState = MFS_CHECKED; 3801 mii.fState = MFS_CHECKED;
3787 else 3802 else
3788 mii.fState = MFS_UNCHECKED; 3803 mii.fState = MFS_UNCHECKED;
3789 SetMenuItemInfo(menux.menu, id, FALSE, &mii); 3804 SetMenuItemInfo(mymenu, id, FALSE, &mii);
3790 } 3805 }
3791 3806
3792 /* 3807 /*
3793 * Pops up a context menu at given x and y coordinates. 3808 * Pops up a context menu at given x and y coordinates.
3794 * Parameters: 3809 * Parameters:
3799 */ 3814 */
3800 void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) 3815 void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y)
3801 { 3816 {
3802 if(menu) 3817 if(menu)
3803 { 3818 {
3819 HMENU mymenu = (HMENU)*menu;
3820
3821 if(IsWindow(*menu) && !IsMenu(mymenu))
3822 mymenu = (HMENU)dw_window_get_data(*menu, "_dw_menu");
3823
3804 popup = parent; 3824 popup = parent;
3805 TrackPopupMenu(menu->menu, 0, x, y, 0, parent, NULL); 3825 TrackPopupMenu(mymenu, 0, x, y, 0, parent, NULL);
3806 DestroyMenu(menu->menu); 3826 DestroyMenu(mymenu);
3807 } 3827 }
3808 } 3828 }
3809 3829
3810 3830
3811 /* 3831 /*