> はじめまして、中瀬と申します。 はじめまして。 > Windows2000, VC++6.0で、MFCのサンプルのスクリーンセーバーを > もとにして、スクリーンセーバーを作っています。 > [画面のプロパティ] - [スクリーン セーバー]の > プレビュー・ウィンドウには表示されますが、 > [設定]ボタンをクリックしても、ダイアログが表示されません。 > ただし、[コマンド プロンプト]でスクリーンセーバーを > 実行すると、ダイアログが表示されます。 > もともとのMFCのサンプルのスクリーンセーバーでも > 同じ現象が生じます。 > どうしたらよいのでしょう。 > よろしくお願いします。
まず、スクリーンセーバーの基礎知識から。 スクリーンセーバーはコマンドライン引数によって スクリーンセーバーを起動するのか、設定ダイアログを出すのか を切り替えます。
参考
http://support.microsoft.com/support/kb/articles/Q182/3/83.ASP
で、これをふまえて、調査してみると、 設定ボタンを押したとき、__argv[1]を見てみると、 ”/c:[数値]”が入っている。 で、サンプルの引数をチェックしているところを見てみると、 MatchOption関数で
if (lstrcmpi(lpsz, lpszOption) == 0) return TRUE;
としている。 引数が「/c」だけだったら、問題ないのだが、 「/c:[数値]」のように、なっているとMatchOptionはTRUEを 返さないので、問題が生じる。
よってこの関数を修正すれば直ります。
簡単な修正は
//if (lstrcmpi(lpsz, lpszOption) == 0) // return TRUE; if (lpsz[0] == lpszOption[0]) return TRUE;
とすれば、一応正常に動作する。
上で紹介したサイトには「/c:[数値]」に関する説明が無い ことから、新しい仕様で昔からあるサンプルでは対応出来なかった のかも知れませんね。
|