bool GUIEnableSysMenuItem( gui_window *wnd, gui_ctl_id id, bool enable ) { HMENU hmenu; hmenu = _wpi_getsystemmenu( GUIGetParentFrameHWND( wnd ) ); if( hmenu != (HMENU)NULL ) { EnableItem( hmenu, id, enable ); } return( true ); }
/* * generateSystemMenu - generate a copy of the system menu for given window */ static HMENU generateSystemMenu( HWND hwnd ) { HMENU sys_menu; sys_menu = _wpi_getsystemmenu( hwnd ); if( sys_menu != NULLHANDLE ) { return( duplicateMenu( sys_menu ) ); } else { return( NULLHANDLE ); } } /* generateSystemMenu */
HMENU GUIGetHMENU( gui_window *wnd ) { HMENU hmenu; if( wnd->root_frame == NULLHANDLE ) { /* child window */ if( wnd->hwnd_frame == NULLHANDLE ) return( NULLHANDLE ); hmenu = _wpi_getsystemmenu( wnd->hwnd_frame ); } else { hmenu = _wpi_getmenu( wnd->root_frame ); } return( hmenu ); }
bool GUIAddToSystemMenu( gui_window *wnd, HWND hwnd, int num_menus, gui_menu_struct *menu, gui_create_styles style ) { HMENU system; gui_ctl_idx num; if( !( style & GUI_SYSTEM_MENU ) ) { return( true ); } system = _wpi_getsystemmenu( hwnd ); if( system == NULLHANDLE ) { return( false ); } if( GUIMDI && ( _wpi_getparent( hwnd ) != NULLHANDLE ) ) { num = _wpi_getmenuitemcount( system ); #ifndef __OS2_PM__ ModifyMenu( system, num - 1, MF_STRING | MF_BYPOSITION | MF_GRAYED, SC_NEXTWINDOW, LIT( NexXt ) ); // add \tCtrl+F6" ); ModifyMenu( system, num - 3, MF_STRING | MF_BYPOSITION | MF_ENABLED, SC_CLOSE, LIT( XClose ) ); // add \tctrl+f4" ); #endif } if( !( style & GUI_CLOSEABLE ) ) { _wpi_enablemenuitem( system, SC_CLOSE, FALSE, FALSE ); } if( style & GUI_CHANGEABLE_FONT ) { if( _wpi_appendmenu( system, MF_SEPARATOR, 0, 0, NULLHANDLE, NULL ) ) { _wpi_appendmenu( system, MF_STRING, MF_ENABLED, GUIHint[GUI_MENU_FONT].id, NULLHANDLE, GUIHint[GUI_MENU_FONT].label ); } } if( num_menus > 0 ) { if( _wpi_appendmenu( system, MF_SEPARATOR, 0, 0, NULLHANDLE, NULL ) ) { return( AppendMenus( wnd, system, num_menus, menu ) ); } } return( true ); }
static bool guiToolBarProc( HWND hwnd, WPI_MSG msg, WPI_PARAM1 wparam, WPI_PARAM2 lparam ) { gui_window *wnd; toolbarinfo *tbar; HMENU hmenu; gui_ctl_id id; wnd = GetToolWnd( hwnd ); if( wnd == NULL ) { return( false ); } tbar = wnd->tbinfo; if( tbar == NULL ) { return( false ); } switch( msg ) { case WM_CREATE : hwnd = _wpi_getframe( hwnd ); hmenu = _wpi_getsystemmenu( hwnd ); if( hmenu != NULLHANDLE ) { if( _wpi_appendmenu( hmenu, MF_SEPARATOR, 0, 0, NULLHANDLE, NULL ) ) { _wpi_appendmenu( hmenu, MF_ENABLED|MF_SYSMENU, 0, GUIHint[GUI_MENU_FIX_TOOLBAR].id, NULLHANDLE, GUIHint[GUI_MENU_FIX_TOOLBAR].label ); } } break; #ifdef __OS2_PM__ case WM_CHAR : case WM_TRANSLATEACCEL : #else case WM_SYSKEYDOWN : case WM_SYSKEYUP : case WM_KEYUP : case WM_KEYDOWN : #endif return( GUIProcesskey( hwnd, msg, wparam, lparam ) != 0 ); case WM_MENUSELECT : GUIProcessMenuSelect( wnd, hwnd, msg, wparam, lparam ); return( true ); case WM_SYSCOMMAND : id = _wpi_getid( wparam ); switch( id ) { case GUI_FIX_TOOLBAR : GUIChangeToolBar( wnd ); } break; #ifndef __OS2_PM__ case WM_NCLBUTTONDBLCLK : #endif case WM_RBUTTONDBLCLK : case WM_LBUTTONDBLCLK : /* flip the current state of the toolbar - * if we are fixed then start to float or vice versa */ if( !HasToolAtPoint( tbar->hdl, wparam, lparam ) ) { #ifdef __OS2_PM__ // Hack: For some reason we will get here with bogus coords, // we need to ignore the event. Should really find out where // the message is coming from. if( (ULONG)wparam != 0x0FFFFFFF ) GUIChangeToolBar( wnd ); #else GUIChangeToolBar( wnd ); #endif return( true ); } break; case WM_MOVE: case WM_SIZE: // Whenever we are moved or sized as a floating toolbar, we remember our position // so that we can restore it when dbl. clicked if( tbar->info.style == TOOLBAR_FLOAT_STYLE ) { hwnd = _wpi_getframe( hwnd ); _wpi_getwindowrect( hwnd, &tbar->floatrect ); } break; case WM_GETMINMAXINFO: { #ifdef __WINDOWS_386__ WPI_MINMAXINFO __far *minmax= (WPI_MINMAXINFO __far *)MK_FP32( (void *)lparam ); #else WPI_MINMAXINFO *minmax = (WPI_MINMAXINFO *)lparam; #endif _wpi_setmintracksize( minmax, ( tbar->info.border_size.x + _wpi_getsystemmetrics( SM_CXFRAME ) ) * 2 + tbar->info.button_size.x, ( tbar->info.border_size.y + _wpi_getsystemmetrics( SM_CYFRAME ) ) * 2 + tbar->info.button_size.y + _wpi_getsystemmetrics( SM_CYCAPTION ) ); } break; case WM_CLOSE : GUICloseToolBar( wnd ); return( true ); break; } return( false ); }
/* * fixSystemMenu */ static void fixSystemMenu( HWND hwnd ) { modifyChildSystemMenu( _wpi_getsystemmenu( hwnd ) ); } /* fixSystemMenu */