スクリーン セーバーを作成しました (C#、それが重要な場合は .NET 4.0) が、いくつかの問題があります (ただし、より表面的なレベルで)。これらはおそらく簡単に解決できますが、私はほとんど Win32 API を使用したことがないので、それに関しては明らかなことを見落としがちです。
Q1: 小さなプレビュー ウィンドウを次のように設定しました。
SetParent(ハンドル、hwndParent); SetWindowLong(Handle, GWL_STYLE, new IntPtr(GetWindowLong(Handle, GWL_STYLE) | WS_CHILD)); 長方形のparentRect; GetClientRect(hwndParent, out ParentRect); サイズ = parentRect.Size;
wherehwndParent
は、2 番目のコマンド引数から解析されます。ここでの問題は、プレビュー ウィンドウがスクリーン セーバーの設定タブからフォーカスを奪うことです。素朴な試みとして、私は電話をかけSetFocus(hwndParent)
ましたが、それは何の効果もありませんでした。フォーカスをあるべき場所に保つ正しい方法は何ですか
Q2: フォームを作成する「通常の方法」で設定ダイアログを開くと、
Application.Run(新しい ConfigurationForm());
ダイアログは、コントロール パネル アプレットに対してモーダルになりません。これはどのように達成できますか?意図した親の HWND がコマンド引数で "/c:nnnnnnnn" として提供されることは理解しましたが、それは私が得た限りです。(使用SetParent(hwndParent)
すると奇妙な動作をするだけなので、明らかに正しい機能ではありません。)