○日本語化


■ウィンドウ全体を日本語化します

@日本語化のためのリソースを準備します

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