プログラム研究所

ここに記載された事項に関して間違いなどがあるかもしれません。 だからちょこちょこ直したりする場合があります。あらかじめご了承ください。

CE関係
Windows95 98とCEでのプログラミングの違いなどについてです。
どんな CE

CEにも、いろいろあります。画面サイズやら、カラー数やら、ということでプログラムからどんなCEか知るための関数です。
rectW = GetSystemMetrics( SM_CXSCREEN ) ;	// 画面の幅
rectH = GetSystemMetrics( SM_CYSCREEN ) ;	// 画面の高さ
ncolor = GetDeviceCaps( hDC,COLORRES ) ;	// 何色か、返り値はビット数

ということでこれらの数値によって、プログラムの動作などを変更するなどしなくてはならないわけですが、
次々と新種が出てきている現在は、出来るだけ対応できるように心がけるといったところでしょうか。

乱数の違い

CE と 95 98 では、乱数を発生させる関数の記述が違っています。

int random()				// 共通で使えるようにランダム関数を用意
{
#ifdef _WIN32_WCE
	return (abs(Random()));		// CEのとき intで返すため絶対値にする
#else
	return (rand());		// 95 98のとき
#endif
}

のようにして両対応の記述にすると便利でしょう。
また、95 98 の場合は、
	srand((unsigned)time(NULL));
のように、乱数の初期化が必要です。

CEは、UNICODE

CE の API は UNICODE のみサポートですから、
CEのプログラムでは、UNICODEに対応する記述を使わなくてはなりません。
これにともない95や98用に書かれたソースコードをCE用に移植する際、
ソースファイルのchar型をTCHAR型に変更する必要があります。
文字列操作関数も
strcpy() → _tcscpy()
strcat() → _tcscat()
strlen() → _tcslen()
のように変更する必要があります。
ソースコード中のcharをTCHARにするとかは、置き換えとかで、簡単に変更できますが、
文字列のほうは、そう簡単にはいきません。
"TEST"; → TEXT("TEST");
のように記述する必要があります。
まぁ、1、2個の変更ならいいのですが、沢山あると直すのは、結構大変です。
そこで、だーとやってくれるのを作ってみました。
このように記述すれば、UNICODE と MBCSの両方の文字コードに対応できるプログラムになります。
C言語ソースファイルも付けましたので適当に使ってください。
漢字が入ったコードの場合も多分、OKにしたつもり。
実行方法
コンソールアプリですので、
filename1 変換元のファイル名
filename2 変換先のファイル名
DOS窓、またはBATファイルで
FILE filename1 >filename2

のようにすれば、標準出力されます。
実行ファイルとソースはこちらです。

C++関係
関数

2つの四角形が重なるか判定する関数です。APIにあったと思って探したのですが、 なかなか見つからなかったので作ってしまいました。
// 2つの四角形が重なるか
// I int	l1,t1,r1,b1;	比較する四角形の座標1(left,top,right,bottom)
// I int	l2,t2,r2,b2;	比較する四角形の座標2(left,top,right,bottom)
// O BOOL	戻り値	TRUE:重なる FALSE:重ならない

BOOL RectInRect(int l1,int t1,int r1,int b1,int l2,int t2,int r2,int b2)
{										
	BOOL ret = TRUE;			// 重なっている
	if(l1 > r2)	ret = FALSE;		// 外れている場合
	if(r1 < l2)	ret = FALSE;
	if(l2 > r1)	ret = FALSE;
	if(r2 < l1)	ret = FALSE;
	if(t1 > b2)	ret = FALSE;
	if(b1 < t2)	ret = FALSE;
	if(t2 > b1)	ret = FALSE;
	if(b2 < t1)	ret = FALSE;
	return(ret);
}

TOP PAGE