wuxud 发表于 2006-8-18 20:31:23

有谁知道redhat下motif程序如何显示中文吗?

我的motif程序代码如下:希望把红色英文改成中文,但直接修改后中文显示为乱码,求大家解决以下这个别问题

#include "demgen.h"
#include "graphics.h"
#include <X11/cursorfont.h>
#include <Xm/CascadeB.h>
#include <Xm/SeparatoG.h>
#include <Xm/Separator.h>
#include <Xm/ToggleBG.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <stdlib.h>
#include "gcn.h" /* for the cps_div and min_con_len parameters for _segment */

/* Function prototypes */
Boolean
read_file(char * filename, enum FILETYPE file_type);

void
do_plot(enum FILETYPE file_type),
elm_setup();

/* Callback prototypes */
/* static XtCallbackProc */
static void
projectname_CB(Widget w, XtPointer client_data, XtPointer call_data),
display_CB(Widget w, XtPointer client_data,
    XtPointer call_data ),
/*    XmPushButtonCallbackStruct *call_data), */
run_splin2h_CB(Widget w, XtPointer client_data,
    XtPointer call_data ),
      /*      XmPushButtonCallbackStruct *call_data), */
run_grdcon_CB(Widget w, XtPointer client_data,
    XtPointer call_data ),
       /*       XmPushButtonCallbackStruct *call_data), */
run_element_CB(Widget w, XtPointer client_data,
    XtPointer call_data ),
      /*      XmPushButtonCallbackStruct *call_data), */
control_help_CB(Widget w, XtPointer client_data,
    XtPointer call_data ),
/*XmPushButtonCallbackStruct *call_data), */
quit_CB(Widget w, XtPointer client_data,
    XtPointer call_data );
/*XmPushButtonCallbackStruct *call_data); */

/* XtCallbackProc */
void
spl_CB(Widget w, XtPointer client_data,
       XtPointer call_data ),
/*       XmPushButtonCallbackStruct *call_data), */
gcn_CB(Widget w, XtPointer client_data,
       XtPointer call_data ),
/*       XmPushButtonCallbackStruct *call_data), */
zoom_CB(Widget w, XtPointer client_data,
XtPointer call_data );
/* XmPushButtonCallbackStruct *call_data); */

/* Widget definitions */
static Widget project_l; /* Label for the project name */
static Widget menubar; /* The menu bar for the pulldown menus */

/* Widgets used in the construction of the pulldown menus used to control
   the system */
static Widget display_cascade, build_cascade, run_cascade;
static Widget display_submenu, build_submenu, run_submenu;
static Widget display_button, build_button, run_button;

/* These are used for zoom/pan on ths display window */
Widget zoom_pan_button, zoom_pan_message;

/* Field seperators for the control window */
static Widget control_sep1, control_sep2;

/* Other buttons used in the control window */
static Widget clear_button, help_button, quit_button;
static Widget control_help;

/* Message boxes used when waiting for processing */
Widget io_wait_box, splin2h_wait_box, grdcon_wait_box;

enum FILETYPE file_type;

Widget create_control(void)
   /* Create the control window, and it's associated menus and buttons */
{
    Widget control;/* holds return value for the function */
    /*    Widget button; */ /* to allow us to unmanage the working box buttons */
    Arg args;
    int n;
    XmString string, title;

/* controls*/
    title = XmStringCreateLtoR("Demgen Control Menu", XmSTRING_DEFAULT_CHARSET);
    n = 0;
    XtSetArg(args, XmNdefaultPosition, False); n++;
    XtSetArg(args, XmNdialogTitle, title); n++;
    XtSetArg(args, XmNautoUnmanage, False); n++;
    control = XmCreateFormDialog(toplevel, "control_form", args, n);
    XmStringFree(title);

/* project name - label gadget and text field widget */
    n = 0;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg (args, XmNlabelType, XmSTRING); n++;
    XtSetArg (args, XmNlabelString,
      XmStringCreateLtoR("Project Name", XmSTRING_DEFAULT_CHARSET)); n++;
    project_l = XmCreateLabel(control, "project_label", args, n);
    /* XmCreateLabelGadget changed to XmCreateLabel */

    XtManageChild(project_l);

    n = 0;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, project_l); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg (args, XmNcolumns, (short) 15); n++;
    XtSetArg (args, XmNresizeWidth, True); n++;
    XtSetArg (args, XmNnavigationType, XmNONE); n++;
    project_t = XmCreateTextField(control, "project_text", args, n);
    XtManageChild(project_t);

    /* If the textfield is activated, or loses focus, call the projectname_CB
       callback, to save the projectname */
    XtAddCallback(project_t, XmNactivateCallback, projectname_CB, NULL);
    XtAddCallback(project_t, XmNlosingFocusCallback, projectname_CB, NULL);
    if (projectname)
      XmTextSetString(project_t, projectname);

/* the menubar
   used to hold the pulldown menus */
    n = 0;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, project_t); n++;
    XtSetArg(args, XmNtopOffset, 10); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg(args, XmNorientation, XmVERTICAL); n++;
    XtSetArg(args, XmNentryBorder, (Dimension) 1); n++;
    XtSetArg(args, XmNspacing, (Dimension) 2); n++;
    menubar = XmCreateMenuBar(control, "control_menubar", args, n);
    XtManageChild(menubar);

/* the display menu
   used to display different datafiles */
    n = 0;
    display_submenu = XmCreatePulldownMenu(menubar, "display_submenu",
args, n);
    n = 0;
    display_button = XmCreatePushButton(display_submenu,
"Spot heights(.xyz)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) xyz);
    display_button = XmCreatePushButton(display_submenu,
"Raw contours(.cns)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) cns);
    display_button = XmCreatePushButton(display_submenu,
      "Fitted grid(.grd)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) grd);
    display_button = XmCreatePushButton(display_submenu,
      "Gcn contours(.con)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) con);
    display_button = XmCreatePushButton(display_submenu,
      "DEM contours(.tcn)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) tcn);
    display_button = XmCreatePushButton(display_submenu,
      "Element File(.elm)", args, n);
    XtAddCallback(display_button, XmNactivateCallback, display_CB,
    (XtPointer) elm);
    XtManageChildren(display_button, 6);

    string = XmStringCreate("Display ", XmSTRING_DEFAULT_CHARSET);
    n = 0;
    XtSetArg(args, XmNlabelString, string); n++;
    XtSetArg(args, XmNsubMenuId, display_submenu); n++;
    display_cascade = XmCreateCascadeButton(menubar, "display_cascade",
         args, n);
    XtManageChild(display_cascade);
    XmStringFree(string);

    /* the build menu
       used to popup the different parameter file dialogs */
    n = 0;
    build_submenu = XmCreatePulldownMenu(menubar, "build_submenu",
   args, n);
    n = 0;
    build_button = XmCreatePushButton(build_submenu,
            "spl file", args, n);
    XtAddCallback(build_button, XmNactivateCallback, spl_CB, NULL);
    build_button = XmCreatePushButton(build_submenu,
            "gcn file", args, n);
    XtAddCallback(build_button, XmNactivateCallback, gcn_CB, NULL);
    XtManageChildren(build_button, 2);

    n = 0;
/* positional arguments */
    string = XmStringCreate("Build   ", XmSTRING_DEFAULT_CHARSET);
    XtSetArg(args, XmNlabelString, string); n++;
    XtSetArg(args, XmNsubMenuId, build_submenu); n++;
    build_cascade = XmCreateCascadeButton(menubar, "build_cascade",
      args, n);
    XmStringFree(string);
    XtManageChild(build_cascade);

    /* the run menu
       used to run _splin2h, _grdcon, and _element */
    n = 0;
    run_submenu = XmCreatePulldownMenu(menubar, "run_submenu",
args, n);
    n = 0;
    run_button = XmCreatePushButton(run_submenu,
"_splin2h ", args, n);
    XtAddCallback(run_button, XmNactivateCallback, run_splin2h_CB, NULL);
    run_button = XmCreatePushButton(run_submenu,
"_grdcon", args, n);
    XtAddCallback(run_button, XmNactivateCallback, run_grdcon_CB, NULL);
    run_button = XmCreatePushButton(run_submenu,
"_element", args, n);
    XtAddCallback(run_button, XmNactivateCallback, run_element_CB, NULL);
    XtManageChildren(run_button, 3);

    n = 0;
/* positional arguments */
    string = XmStringCreate("Run   ", XmSTRING_DEFAULT_CHARSET);
    XtSetArg(args, XmNlabelString, string); n++;
    XtSetArg(args, XmNsubMenuId, run_submenu); n++;
    run_cascade = XmCreateCascadeButton(menubar, "run_cascade", args, n);
    XmStringFree(string);
    XtManageChild(run_cascade);

    /* controls separator gadget */
    n = 0;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, menubar); n++;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNrightAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 2); n++;
    XtSetArg(args, XmNrightOffset, 2); n++;
    control_sep1 =
      XmCreateSeparator(control, "control_sep1", args, n);
    XtManageChild(control_sep1);

    /* the graphics utilities toggle button
       this controls the zoom/pan functions */
    n = 0;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, control_sep1); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg(args, XmNindicatorOn, False); n++;
    XtSetArg(args, XmNshadowThickness, (Dimension) 2); n++;
    zoom_pan_button =
      XmCreateToggleButton(control, "Zoom/Pan", args, n);
    XtAddCallback(zoom_pan_button, XmNvalueChangedCallback, zoom_CB, NULL);
    XtManageChild(zoom_pan_button);

    zoom_pan_message =
      create_help_box(control, "zoom_pan_message", "Zoom/Pan", "", False);
   
    /* controls separator gadget */
    n = 0;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, zoom_pan_button); n++;
    XtSetArg(args, XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNrightAttachment, XmATTACH_FORM); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 2); n++;
    XtSetArg(args, XmNrightOffset, 2); n++;
    control_sep2 =
      XmCreateSeparator(control, "control_sep2", args, n);
    XtManageChild(control_sep2);

    /* the clear button */
    n = 0;
    /* positional arguments */
    XtSetArg(args, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
    XtSetArg(args, XmNrightWidget, menubar); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, control_sep2); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg(args, XmNlabelString,
      XmStringCreateLtoR("Clear   ", XmSTRING_DEFAULT_CHARSET)); n++;
    clear_button = XmCreatePushButton(control, "Clear", args, n);
    XtAddCallback(clear_button, XmNactivateCallback, clear_CB, NULL);
    XtManageChild(clear_button);

    /* the help button */
    n = 0;
    /* positional arguments */
    XtSetArg(args, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
    XtSetArg(args, XmNrightWidget, menubar); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, clear_button); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg(args, XmNlabelString,
      XmStringCreateLtoR("Help    ", XmSTRING_DEFAULT_CHARSET)); n++;
    help_button = XmCreatePushButton(control, "Help", args, n);
    XtAddCallback(help_button, XmNactivateCallback, control_help_CB, NULL);
    XtManageChild(help_button);

    /* the help box */
    control_help = create_help_box(control, "control_help", "", "", False);

    /* the quit button */
    n = 0;
    /* positional arguments */
    XtSetArg(args, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
    XtSetArg(args, XmNrightWidget, menubar); n++;
    XtSetArg(args, XmNtopAttachment, XmATTACH_WIDGET); n++;
    XtSetArg(args, XmNtopWidget, help_button); n++;
    XtSetArg(args, XmNtopOffset, 5); n++;
    XtSetArg(args, XmNbottomOffset, 5); n++;
    XtSetArg(args, XmNleftOffset, 5); n++;
    XtSetArg(args, XmNrightOffset, 5); n++;
    XtSetArg(args, XmNlabelString,
      XmStringCreateLtoR("Quit    ", XmSTRING_DEFAULT_CHARSET)); n++;
    quit_button = XmCreatePushButton(control, "Quit", args, n);
    XtAddCallback(quit_button, XmNactivateCallback, quit_CB, NULL);
    XtManageChild(quit_button);

    /* the file read wait box */
    io_wait_box = create_wait_box(control, "FileWait", "IO Wait",
      "Reading the data file\nPlease wait...");

    /* the splin2h wait box */
    splin2h_wait_box = create_wait_box(control, "splin2hWait", "splin2h Wait",
         "Running _splin2h\nPlease wait...");

    /* the grdcon wait box */
    grdcon_wait_box =
      create_wait_box(control, "grdconWait", "grdcon Wait",
      "Running _grdcon and _segment\nPlease wait...");

/*    XmAddTabGroup(control); ZZZ */
    XtManageChild(control);

    return control;
}

/* static XtCallbackProc */
static void
display_CB(Widget w,
    XtPointer client_data, /* filetype to display*/
    XtPointer call_data )
   /*    XmPushButtonCallbackStruct *call_data) */
   /* Call do_plot for the requested datafile type.
The datafile type is passed in client_data */
{
do_plot((enum FILETYPE) client_data);
}

/* static XtCallbackProc */
static void
run_splin2h_CB(Widget w,
      XtPointer client_data,
      XtPointer call_data )
/*      XmPushButtonCallbackStruct *call_data) */
   /* Run _splin2h using the system function call */
{
    char string = "_splin2h < ";
    XtManageChild(splin2h_wait_box);
    XmUpdateDisplay(splin2h_wait_box);
#ifndef hp
    usleep(250000);
#endif
    strcat(string, projectname);
    strcat(string, ".spl");
    printf("%s\n", string);
    XmUpdateDisplay(splin2h_wait_box);
    system(string);
    XtUnmanageChild(splin2h_wait_box);
}


/* static XtCallbackProc */
static void
run_grdcon_CB(Widget w,
       XtPointer client_data,
       XtPointer call_data )
/*       XmPushButtonCallbackStruct *call_data) */
   /* Run grdcon and segment using the system function call */
{
    char string = "_grdcon < ";
    char param;
    int rc;
    gcn_rec gcn_seg_data;

    XtManageChild(grdcon_wait_box);
    XmUpdateDisplay(grdcon_wait_box);
#ifndef hp
    usleep(250000);
#endif

/* get the segment parameters */
    gcn_read(projectname, &gcn_seg_data);

/* run _grdcon */
    strcat(string, projectname);
    strcat(string, ".gcn");
    printf("Running %s\n", string);
    printf("%s\n", string);
    XmUpdateDisplay(grdcon_wait_box);
    rc = system(string);
    if (rc) return; /* if error, then return */
    /* run _segment via segment.sh
       segment.sh is used to feed the parameters into the segment program */
    strcpy(string, "segment.sh ");
    strcat(string, projectname);
    sprintf(param," %d %d", gcn_seg_data.cps_div, gcn_seg_data.min_con_len);
    strcat(string, param);
    printf("Running %s\n", string);
    rc = system(string);
    /* remove the con file
       it is not needed after segment has been run */
    strcpy(string, "/bin/rm -f ");
    strcat(string, projectname);
    strcat(string, ".con");
    rc = system(string);
    XtUnmanageChild(grdcon_wait_box);
}

/* static XtCallbackProc */
static void
run_element_CB(Widget w, XtPointer client_data,
      XtPointer call_data )
/*             XmPushButtonCallbackStruct *call_data) */
   /* Start the terrain analysis - element */
{
elm_setup();
}

/* static XtCallbackProc */
static void
quit_CB(Widget w, XtPointer client_data,
XtPointer call_data )
   /* XmPushButtonCallbackStruct *call_data) */
   /* Quit the application */
{
    exit(0);
}

void
do_plot(enum FILETYPE file_type)
   /* Plot the requested datafile type.
The file is read (read_file), and then the screen is redrawn to
display it. */
{
/* Set the wait cursor */
XDefineCursor(display, XtWindow(drawing), waitcursor);
XDefineCursor(display, XtWindow(control), waitcursor);
/* Popup the wait box, then wait briefly to encourage the text in the box
   to appear. This does not always work. */
   
XtManageChild(io_wait_box);
XmUpdateDisplay(io_wait_box);
#ifndef hp
usleep(250000);
#endif
XmUpdateDisplay(io_wait_box);
read_file(projectname, file_type);
XtUnmanageChild(io_wait_box);
XmUpdateDisplay(io_wait_box);
/* clear the drawing window, and draw in it */
draw_screen(True);
/* Unset the wait cursor */
XUndefineCursor(display, XtWindow(drawing));
XUndefineCursor(display, XtWindow(control));
}

/* static XtCallbackProc */
static void
projectname_CB(Widget w, XtPointer client_data, XtPointer call_data)
   /* projectname callback -
gets the text value of projectname from the projectname widget */
{
    projectname = XmTextGetString(w);
}

/* static XtCallbackProc */
static void
control_help_CB(Widget w, /* widget id */
XtPointer client_data, /* data from application */
XtPointer call_data )
   /*XmPushButtonCallbackStruct *call_data) */
   /* data from widget class */

   /* Display the help window for the control screen.
Context sensitive help has not been implemented for theis screen yet,
although skeleton code is included here as comments */
{
/*static Widget help_for;
printf("Before tracking locate\n");
help_for = XmTrackingLocate(control, helpcursor, True);
printf("After tracking locate\n");
if ((help_for == project_l) || (help_for == project_t))
    printf("Help for project name field\n");
else if (help_for == display_cascade)
    printf("Help for display menu\n");
else if (help_for == build_cascade)
    printf("Help for build menu\n");
else if (help_for == run_cascade)
    printf("Help for run menu\n");
else
    printf("Unknown help for control panel\n");*/
XtManageChild(control_help);
}

cobranail 发表于 2006-8-18 23:19:19

不能,openmotif2.3可以,motifzone上有详细的信息
页: [1]
查看完整版本: 有谁知道redhat下motif程序如何显示中文吗?