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 の 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 のようにすれば、標準出力されます。実行ファイルとソースはこちらです。
// 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); } |