⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 This source code has been tested under OpenWindows 2.0, Sun s X11/NeWS server. For Xlib programs th
💻 C
字号:
/*************************************************************************                                                                    ****  menu.c                                                            ****                                                                    ****  Doodle -- Menubar Module                                          ****                                                                    *************************************************************************/#include <string.h>#include <Xm/RowColumn.h>#include <Xm/CascadeB.h>#include <Xm/Label.h>#include <Xm/PushB.h>#include <Xm/Separator.h>#include "doodle.h"/*************************************************************************                                                                    ****               F O R W A R D   D E F I N I T I O N S                ****                                                                    *************************************************************************/static	void	InitFileMenu();static	void	InitPenMenu();static	void	InitPenColorMenu();static	void	InitPenSizeMenu();static	void	InitHelpMenu();static	void	FileMenuCB();/*************************************************************************                                                                    ****  InitMenuBar()                                                     ****                                                                    ****  This function creates the menu bar and all pulldown menus. The    ****  menu bar is created as the child of the main window.              ****                                                                    ****  This function modifies the global "menubar", and accesses the     ****  global "mainwin".                                                 ****                                                                    *************************************************************************/void InitMenuBar(){    menubar = XmCreateMenuBar( mainwin, "MenuBar", NULL, 0 );    XtManageChild( menubar );    InitFileMenu();    InitPenMenu();    InitHelpMenu();}/*************************************************************************                                                                    ****  InitFileMenu()                                                    ****                                                                    ****  Creates the File menu: cascade button, pull-down menu pane, and   ****  all menu-pane choices. Attaches callbacks to menu-pane choices.   ****                                                                    *************************************************************************/static void InitFileMenu(){    Widget	topic,		pane,		choices[3];    pane = XmCreatePulldownMenu( menubar, "FilePane", NULL, 0 );    choices[0] = XmCreatePushButton( pane, "File_Clear", NULL, 0 );    choices[1] = XmCreateSeparator( pane, "File_Sep", NULL, 0 );    choices[2] = XmCreatePushButton( pane, "File_Exit", NULL, 0 );    XtManageChildren( choices, 3 );    XtSetArg( arglist[0], XmNsubMenuId, pane );    topic = XmCreateCascadeButton( menubar, "FileTopic", arglist, 1 );    XtManageChild( topic );    XtAddCallback( choices[0], XmNactivateCallback, FileMenuCB, "New" );    XtAddCallback( choices[2], XmNactivateCallback, FileMenuCB, "Ext" );}/*************************************************************************                                                                    ****  InitPenMenu()                                                     ****                                                                    ****  Creates the Pen menu: cascade button, pull-down menu pane, and    ****  all menu-pane choices. Attaches callbacks to menu-pane choices.   ****                                                                    *************************************************************************/static void InitPenMenu(){    Widget	topic,		pane,		choices[2];    pane = XmCreatePulldownMenu( menubar, "Pen_Pane", NULL, 0 );    choices[0] = XmCreateCascadeButton( pane, "Pen_Color", NULL, 0 );    choices[1] = XmCreateCascadeButton( pane, "Pen_Size", NULL, 0 );    XtManageChildren( choices, 2 );    XtSetArg( arglist[0], XmNsubMenuId, pane );    topic = XmCreateCascadeButton( menubar, "PenTopic", arglist, 1 );    XtManageChild( topic );    InitPenColorMenu( pane, choices[0] );    InitPenSizeMenu( pane, choices[1] );}/*************************************************************************                                                                    ****  InitPenColorMenu()                                                ****                                                                    ****  Creates the cascading pull-down for pen colors.                   ****  The attached callback is in the file "mainwin.c"                  ****                                                                    *************************************************************************/static void InitPenColorMenu( parent, button )    Widget	parent;    Widget	button;{    Widget	pane,		choices[6];    pane = XmCreatePulldownMenu( parent, "PenColor_Pane", NULL, 0 );    choices[0] = XmCreatePushButton( pane, "PenColor_0", NULL, 0 );    choices[1] = XmCreatePushButton( pane, "PenColor_1", NULL, 0 );    choices[2] = XmCreatePushButton( pane, "PenColor_2", NULL, 0 );    choices[3] = XmCreatePushButton( pane, "PenColor_3", NULL, 0 );    choices[4] = XmCreatePushButton( pane, "PenColor_4", NULL, 0 );    choices[5] = XmCreatePushButton( pane, "PenColor_5", NULL, 0 );    XtManageChildren( choices, 6 );    XtSetArg( arglist[0], XmNsubMenuId, pane );    XtSetValues( button, arglist, 1 );    XtAddCallback( choices[0], XmNactivateCallback, PenColorCB, NULL );    XtAddCallback( choices[1], XmNactivateCallback, PenColorCB, NULL );    XtAddCallback( choices[2], XmNactivateCallback, PenColorCB, NULL );    XtAddCallback( choices[3], XmNactivateCallback, PenColorCB, NULL );    XtAddCallback( choices[4], XmNactivateCallback, PenColorCB, NULL );    XtAddCallback( choices[5], XmNactivateCallback, PenColorCB, NULL );}/*************************************************************************                                                                    ****  InitPenSizeMenu()                                                 ****                                                                    ****  Creates the cascading pull-down for pen sizes.                    ****  The attached callback is in the file "mainwin.c"                  ****                                                                    *************************************************************************/static void InitPenSizeMenu( parent, button )    Widget	parent;    Widget	button;{    Widget	pane,		choices[5];    pane = XmCreatePulldownMenu( parent, "PenSize_Pane", NULL, 0 );    choices[0] = XmCreatePushButton( pane, "PenSize_1", NULL, 0 );    choices[1] = XmCreatePushButton( pane, "PenSize_2", NULL, 0 );    choices[2] = XmCreatePushButton( pane, "PenSize_3", NULL, 0 );    choices[3] = XmCreatePushButton( pane, "PenSize_4", NULL, 0 );    choices[4] = XmCreatePushButton( pane, "PenSize_8", NULL, 0 );    XtManageChildren( choices, 5 );    XtSetArg( arglist[0], XmNsubMenuId, pane );    XtSetValues( button, arglist, 1 );    XtAddCallback( choices[0], XmNactivateCallback, PenSizeCB, "1" );    XtAddCallback( choices[1], XmNactivateCallback, PenSizeCB, "2" );    XtAddCallback( choices[2], XmNactivateCallback, PenSizeCB, "3" );    XtAddCallback( choices[3], XmNactivateCallback, PenSizeCB, "4" );    XtAddCallback( choices[4], XmNactivateCallback, PenSizeCB, "8" );}/*************************************************************************                                                                    ****  InitHelpMenu()                                                    ****                                                                    ****  Creates the Help menu: cascade button, pull-down menu pane, and   ****  all menu-pane choices. Attaches callbacks to menu-pane choices.   ****                                                                    *************************************************************************/static void InitHelpMenu(){    Widget	topic,		pane,		choices[1];    pane = XmCreatePulldownMenu( menubar, "Help_Pane", NULL, 0 );    choices[0] = XmCreateLabel( pane, "Help_Lbl", NULL, 0 );    XtManageChildren( choices, 1 );    XtSetArg( arglist[0], XmNsubMenuId, pane );    topic = XmCreateCascadeButton( menubar, "HelpTopic", arglist, 1 );    XtManageChild( topic );    XtSetArg( arglist[0], XmNmenuHelpWidget, topic );    XtSetValues( menubar, arglist, 1 );}/*************************************************************************                                                                    ****  FileMenuCB( w, client_data, call_data )                           ****                                                                    ****  Callback procedure for the "File" pull-down. This function is     ****  called when any of the file menu buttons are activated. The       ****  particular operation is identified by a string accessed by the    ****  "client_data" param.                                              ****                                                                    ****  Note: This callback is only invoked on Activate, so the call      ****        data (which describes the reason) is superfluous. It is     ****        therefore not declared as a specific type in the func hdr.  ****                                                                    *************************************************************************/static void FileMenuCB( w, client_data, call_data )    Widget	w;    char	*client_data;    caddr_t	call_data;{    if (!strcmp(client_data, "New"))        ClearWin();    else if (!strcmp(client_data, "Ext"))        exit( 0 );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -