プログラミング中に気付いたこと

Last Updated: 1996.9.14

(Windows 95 アプリケーションのプログラミングに関して)

このページ内のトピック一覧
  1. 最小化されたウィンドウの座標について(1996.9.14)
  2. 複数のソフトでヘルプを開きたい場合(1996.9.14)


1.最小化されたウィンドウの座標について

ソフトの終了時にアプリケーションウィンドウの位置を保存しておき、次回起動時にその位置にウィンドウを表示するという機能は、ユーザにとって非常にありがたいものです。しかし次の事実があるために、注意してプログラムを組まないと、ウィンドウが見えないばかりでなく、見えるようにすることすら困難な状態を引き起こしてしまいます。

「最小化された状態で取得されるウィンドウの位置は、通常の位置としては使用できない」

この対策としてプログラム側では、次のような方法でウィンドウの位置を取得すればいいでしょう。これは、ウィンドウが最小化されていない時に限り、ウィンドウの位置を取得するコードです。

if (!IsIconic(hWndMain)) GetWindowRect(hWndMain, &rcMain);

ちなみに私の環境では、最小化されたウィンドウの位置を取得すると(3000,3000)という座標が得られました。この位置にウィンドウが表示されると、経験の少ない一般ユーザはおそらく、自力で最小化前の位置までウィンドウを移動することはできないでしょう。画面から外れたウィンドウを画面上に戻すには、以下のような方法があります。

なおこのため最小化状態で終了しない方がいいソフトとして、私が見つけたところでは、(株)アスキーの柿木将棋U for Windows95があります。


2.複数のソフトでヘルプを開きたい場合

APIのWinHelp関数に渡すヘルプファイル名は、絶対パスで指定しない場合が多いと思います。ところがこの場合、既に別のソフトがこのようにして開いたヘルプファイルが存在していると、新しくヘルプを開くことができません。これはWinhlp32.exeの問題で、既にヘルプが開かれているソフトがあるフォルダから、新しいヘルプファイルを見つけようとするためです。この対策としては、ヘルプファイルを絶対パスで指定する方法、WinExec関数でヘルプファイル名をコマンドラインオプションに指定したWinhlp32.exeを呼び出す方法などが考えられます。


ここに掲載されている内容が事実に反する場合、是非お知らせ下さい。