2

スクリーン セーバーを作成しました (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)すると奇妙な動作をするだけなので、明らかに正しい機能ではありません。)

4

1 に答える 1