ちょっと動作環境がかわったぐらいで、動作が異常になるのは、バグと言えると思います。
自分の環境で動作したからといって、安心してしまうのは危険です。
少なくとも、以下の項目について、チェックすべきです。
注意 いくつかの項目は、アプリ実行中にも変更することが可能です。
システムフォントのサイズを変える
システムフォントのサイズは、Windows3.1のころから12ドット、16ドット、20ドット、
24ドットなどから選択可能でしたが、いまだに16ドットを仮定していて、
変更すると妙な動作になったりするWindowsアプリが時々あります。
具体的な症状としては、レイアウトが崩れる、文字が一部しか表示されない、
ダイアログボックスが画面からはみ出る等があります。
ちなみに、Windows95では、「小さいフォント」(16ドット)と
「大きいフォント」(20ドット)の2種類しか選択できませんが、
Windows3.1からフォントをコピーし、レジストリに手を加える
ことで、12ドットや24ドットのフォントを使うことが可能になります。
レジストリの書換えは、
キー 名前 データ
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows
CurrentVersion
fontsize
120 Description "大きいフォント"
96 Description "小さいフォント"
の部分に
144 Description "24ドットフォント"
System j27fix.fon "fixedfon.fon"
j27oem.fon "oemfonts.fon"
j27sys.fon "fonts.fon"
User
72 Description "12ドットフォント"
System j13fix.fon "fixedfon.fon"
j13oem.fon "oemfonts.fon"
j13sys.fon "fonts.fon"
User
を追加するだけで良かったと思います。(記憶があいまい)
画面の色数を変える
画面の色数は、16色、256色、32K色、64K色、TRUECOLORから選べるのは誰でも知ってますよね。
このうち16色はWindows95/98では実質「セーフモード」でしか使われませんが、
一応確認しましょう。256色ではパレットが使えますが、
他のアプリと同時起動した場合におかしな色になるソフトがあるようです。
また、昔のノートパソコンの、モノクロ液晶ディスプレイを使ってみるというのも、
一応確認しましょう。
ウィンドウ各パーツの色を変える
「画面のプロパティ」の「デザイン」で画面の配色を変えた時、
特に「ウィンドウ」(クライアント領域のこと。Windows3.1では「ウィンドウの背景」)
の色を変えたとき、文字が読めなくなったり、
まだら模様みたいになるアプリが、非常に多数存在します。
Windows 95付属の「システムモニター」等です。
(特に「ハイコントラストモード黒」を選択したとき)
これを防ぐには、
フォアグラウンドカラーとバックグラウンドカラーの両方とも「デザイン」の設定に従うか、
もしくは全く従わないかのどちらかにする必要があります。
中途半端に従うのが最もまずいわけです。ただし、全く従わないのはそれはそれで使いにくいので、
私としては、両方とも従う方をおすすめします。
タイトルバーやメニューのフォントサイズを変える(巨大にしてみる)
Windows 95/98では、タイトルバーやメニューバー等のサイズを個々に調整できますが、
それをやるとレイアウトが狂ってボタンが押せなくなるソフトも存在します。
(例:Windows95標準添付のアクセサリの「サウンドレコーダー」等。
メニューが複数行になると誤動作します。
こういったことを防ぐには、一度ウインドウを表示したあと、
タイトルバーとメニューバーの高さの合計を
GetWindowRect() と GetClientRect() を使って求め、MoveWindow()
で再度サイズ指定する必要があるようです。)
スクロールバーのサイズを変える(巨大にしてみる)
同じく、スクロールバーのサイズを変えると、
ダイアログボックスなどでよく使われるドロップダウンリストボックスやコンボボックスのドロップダウンボタン、スピンボックスのスピンボタン等もそれに引きずられて変わります。
このためコンボボックス内の文字等が読めなくなるアプリがあります。(非常に多い)
ハイコントラストモードをONにしてみる
あなたのソフトは、Windows 95の「ユーザー補助」の「ハイコントラスト」をOnにした状態で、
正しく動作するでしょうか? GetSystemMetrics()やGetTextMetrics()、GetSysColor()
等を呼び出して各種コントロールのサイズやシステムフォントのサイズ、
システムカラーなどを調べてそれに追随するように書けば、これをサポートできます。
動作途中での変更に対応するには、WM_SETTINGCHANGE(Win3.1ならWM_WININICHANGE)や、
WM_PAINTメッセージのタイミングでこれらの値を調べれば良いでしょう。
デバッグカーネルでエラーが出ないようにする
WindowsのSDKには、デバッグカーネルというのがついてるはずです。
これでエラーがでるのは、すなわちバグです。
プロなら、Bounds checkerやPurifyといった常駐デバッガでも確認しましょう。
次のページ
一つ上のページに戻る