○日本語化
■ウィンドウ全体を日本語化します
@日本語化のためのリソースを準備します
char *resources[] = {
"*international: True",//国際化
"*fontSet: -*-*-*-*-*--18-*",//フォントの指定
"*preeditType: OverTheSpot,OffTheSpot,Root",//日本語入力の表示タイプ
"*inputMethod: kinput2",//入力のプログラム
NULL
};
Aプログラムの一番最初で国際化の初期化を行います
XtSetLanguageProc (NULL, NULL, NULL);
Bトップレベルのウィジットを作成する時にリソースを読み込ませます
Widget top = XtAppInitialize ( &app_context, "top",NULL, 0,&argc, argv,resources,NULL,0);
または、
Widget top = XtVaAppInitialize( &app_context, "top", NULL, 0, &argc, argv,resources,
//XtNwidth,500,
//XtNheight,500,
NULL);
C以上で日本語化完了です、ラベル、ボタン、エディト、メニュー、リストなどで
日本語が表示・入力できるようになります
ただし、ソースコードの文字コードがEUCになっていないと文字化けします
文字化けした場合はソースコードを漢字コード変換フィルタなどでEUCに変換してください
■ラベル、エディト、ボタンに日本語を入れる
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/AsciiText.h>
//日本語化のためのリソース
char *resources[] = {
"*international: True",//国際化
"*fontSet: -*-*-*-*-*--18-*",//フォントの指定
"*preeditType: OverTheSpot,OffTheSpot,Root",//日本語入力の表示タイプ
"*inputMethod: kinput2",//入力のプログラム
NULL
};
//Textウィジットから文字列を取得
void getStr(Widget w,char*str){
char*st;
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)&st);
XtGetValues(w,args,1);
strcpy(str,st);
}
//Textウィジットに文字を入れる
void setStr(Widget w,char*str){
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)str);
XtSetValues(w,args,1);
}
//ボタンが押された時の動作
void Button1Callback( Widget w, XtPointer client, XtPointer called ) {
exit(0);
}
//テキストが入力された時の動作、入力されているテキストを表示
void Edit1Callback( Widget w, XtPointer cld, XtPointer cad ){
char str[128]="";
getStr(w,str);
printf("%s\n",str);
}
main( int argc, char **argv ) {
XtAppContext app_context;
Widget top, form;
//国際化の初期化
XtSetLanguageProc (NULL, NULL, NULL);
top = XtVaAppInitialize( &app_context, "top", NULL, 0, &argc, argv,resources,
//XtNwidth,500,
//XtNheight,500,
NULL);
form = XtVaCreateManagedWidget("form",formWidgetClass,top,NULL); //ラベルの作成
Widget label1 = XtVaCreateManagedWidget("label1",//ウィジット名
labelWidgetClass,//ラベルクラスを指定
form, //リソースの直接入力(どんどん追加できる)
XtNlabel,"テストラベル",//表示される文字
XtNhorizDistance,5,//開始位置
XtNvertDistance,5, XtNwidth,100,//幅と高さ
XtNheight,20, XtNborderWidth,1,//境界線
//リソースここまで
NULL);
//テキストの作成
Widget edit1 = XtVaCreateManagedWidget("edit1",//ウィジット名
asciiTextWidgetClass,//クラスを指定
form, //リソースの直接入力(どんどん追加できる)
XtNeditType,XawtextEdit,//読み書き可能
//XtNeditType,XawtextRead,//リードオンリー
//XtNeditType,XawtextAppend,//追加のみ
XtNecho,True,//入力文字を表示
//XtNstring,"test",//初期値
//XtNdisplayCaret,False,//カレットを表示しない
//XtNscrollHorizontal,XawtextScrollAlways,//横方向のスクロールバーを表示
//XtNscrollVertical,XawtextScrollAlways,//縦方向のスクロールバーを表示
//XtNwrap,XawtextWrapWord,//自動折り返し もしくは XawtextWrapLine
XtNhorizDistance,25,//開始位置
XtNvertDistance,30,
XtNwidth,100,//幅と高さ
//XtNheight,200,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
//テキストボックスにテキストを入れる
setStr(edit1,"てすと");
//カレットを文字列の最後尾に移動
XawTextSetInsertionPoint(edit1,strlen("てすと")); //XawTextSetSelection(edit1,1,strlen("testTest"));//テキストを選択
XtAddCallback( XawTextGetSource(edit1), XtNcallback,Edit1Callback,NULL );//テキストのコールバック関数を登録
//ボタンの作成
Widget button1 = XtVaCreateManagedWidget("button1",//ウィジット名
commandWidgetClass,//ボタンクラスを指定
form,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"テストボタン",//表示される文字
XtNhorizDistance, 50,//開始位置
XtNvertDistance,55,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
XtAddCallback(button1, XtNcallback,Button1Callback, NULL );//ボタンのコールバック関数を登録
XtRealizeWidget( top );
XtAppMainLoop( app_context );
}
■ダイアログボックスを日本語表示
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Shell.h>
char *resources[] = {
"*international: True",//国際化
"*fontSet: -*-*-*-*-*--18-*",//フォントの指定
"*preeditType: OverTheSpot,OffTheSpot,Root",//日本語入力の表示タイプ
"*inputMethod: kinput2",//入力のプログラム
NULL
};
Widget shell1,dialog1;
void Button1Callback( Widget w, XtPointer client, XtPointer called )
{
XtPopup( shell1, XtGrabNonexclusive );
//XtGrabNone XtGrabNonexclusive XtGrabExclusive
}
void dialogOkButton( Widget w, XtPointer client, XtPointer called )
{
XtPopdown(shell1);
}
main( int argc, char **argv )
{
XtAppContext app_context;
Widget top, form;
XtSetLanguageProc (NULL, NULL, NULL);
top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv,resources,
XtNx,200,
XtNy,200,
//XtNwidth,500,
//XtNheight,500,
NULL);
form = XtVaCreateManagedWidget("form",formWidgetClass,top,NULL);
//ボタンの作成
Widget button1 = XtVaCreateManagedWidget("button1",
commandWidgetClass,
form,
XtNlabel,"ダイアログを表示",
XtNhorizDistance, 5,//開始位置
XtNvertDistance,5,
XtNwidth,200,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
NULL);
XtAddCallback(button1, XtNcallback,Button1Callback,NULL );
//ダイアログを作成---------------------------------------------------
shell1 = XtVaCreatePopupShell( "Message", transientShellWidgetClass, top,XtNx,200,XtNy,200,NULL );
dialog1 = XtVaCreateManagedWidget( "dialog1", dialogWidgetClass, shell1,XtNlabel,"テストダイアログ", NULL );
XawDialogAddButton( dialog1, "はい", dialogOkButton, NULL );
XawDialogAddButton( dialog1, "いいえ", dialogOkButton, NULL );
XawDialogAddButton( dialog1, "キャンセル", dialogOkButton, NULL );
//------------------------------------------------------------------
XtRealizeWidget( top );
XtAppMainLoop( app_context );
}
■ポップアップウィンドウを表示
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
char *resources[] = {
"*international: True",//国際化
"*fontSet: -*-*-*-*-*--18-*",//フォントの指定
"*preeditType: OverTheSpot,OffTheSpot,Root",//日本語入力の表示タイプ
"*inputMethod: kinput2",//入力のプログラム
NULL
};
Widget top1,form1,button1;
Widget MessageTop,MessageForm,MessageLabel,MessageOkButton;
void Button1Callback( Widget w, XtPointer client, XtPointer called )
{
//XtPopup(MessageTop, XtGrabNonexclusive );//モーダル
XtPopup(MessageTop, XtGrabNone );//モードレス
}
void MessageOkButtonCallback( Widget w, XtPointer client, XtPointer called )
{
XtPopdown(MessageTop);//非表示
}
main(int argc, char **argv)
{
XtAppContext app_context;
XtSetLanguageProc (NULL, NULL, NULL);
XtToolkitInitialize();
app_context = XtCreateApplicationContext();
top1 = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv,resources,NULL);
form1 = XtVaCreateManagedWidget("form",formWidgetClass,top1,NULL);
button1 = XtVaCreateManagedWidget("button1",//ウィジット名
commandWidgetClass,
form1,
XtNlabel,"てすと",
//XtNhorizDistance, 50,
//XtNvertDistance,55,
XtNwidth,100,
XtNheight,20,
XtNborderWidth,1,
NULL);
XtAddCallback(button1, XtNcallback,Button1Callback, NULL );
XtRealizeWidget(top1);//top1の表示
//ポップアップウィンドウの作成----------------
MessageTop = XtVaCreatePopupShell( "メッセージ",
transientShellWidgetClass,top1,
//XtNx,200,XtNy,200,//サイズ
NULL );
MessageForm =XtVaCreateManagedWidget( "MessageForm",
formWidgetClass,MessageTop,
XtNorientation, XtorientVertical,//ウィジットの配置方法
NULL );
MessageLabel = XtVaCreateManagedWidget("MessageLabel",
labelWidgetClass,
MessageForm,
XtNlabel,"メッセージ",
XtNwidth, 200,//横幅
XtNborderWidth,0,//境界線
NULL);
MessageOkButton = XtVaCreateManagedWidget("MessageOkButton",
commandWidgetClass,
MessageForm,
XtNlabel,"了解",
XtNwidth, 66,//横幅
XtNhorizDistance,66,//開始位置
XtNfromVert,MessageLabel,XtNvertDistance, 2,
NULL);
XtAddCallback(MessageOkButton, XtNcallback,MessageOkButtonCallback, NULL );
//-----------------------------------------------
XtAppMainLoop(app_context);
}
▲トップページ
>
Linux と C