Mercurial > dwindows
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 /* |