0

アプリケーションの設定を変更するためのダイアログウィンドウを作成したい。以下はAdobe Readerのスクリーンショットです。Spy++ を使用した後、次のように推測します。

右側では、すべてのコントロール (ボタン、コンボ ボックスなど) が GroupBox に属しています。

左側の TreeView コントロールの各カテゴリには、このカテゴリに関連するすべてのコントロールをグループ化する、対応する GroupBox があります。

ユーザーがさまざまなカテゴリから選択すると、1 つの GroupBox が非表示になり、別の GroupBox が表示されます。

しかし、以下のソース コード (xxx.rc、リソース ファイル) には、ダイアログ項目の「親」を指定できる場所がどこにもありませんでした。

「リソース ビュー」(コードとして表示されない) で xxx.rc を開いても、プロパティ ページでダイアログ項目の親を指定するオプションが見つかりません。

親 (私の場合は GroupBox) をダイアログ項目に割り当てる方法、またはダイアログ項目を .rc ファイルで単一のグループにグループ化する方法、つまりダイアログ項目を作成する方法を知りたいです。(.rcファイルを変更することでできると思います。)

GROUPBOX        "View",IDC_SECTION_VIEW,101,6,228,88
LTEXT           "Default &Layout:",IDC_DEFAULT_LAYOUT_LABEL,107,19,108,9
COMBOBOX        IDC_DEFAULT_LAYOUT,215,17,108,64,CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT           "Default &Zoom:",IDC_DEFAULT_ZOOM_LABEL,107,36,108,9
COMBOBOX        IDC_DEFAULT_ZOOM,215,34,108,149,CBS_DROPDOWN | WS_TABSTOP
CONTROL         "Show the &bookmarks sidebar when available",IDC_DEFAULT_SHOW_TOC,
                "Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,53,216,9
...
...
...

ここに画像の説明を入力

4

1 に答える 1

2

親を割り当てる方法を教えてください...

SetParentWindowsAPI。あなたHWNDはあなたのコントロールと想定される新しい親のハンドルを提供します。

リソーススクリプトでは、コントロールはダイアログ自体の子になりますが、実行時にこれを自由に変更して、関心のある階層にグループ化できます。

また、想定される子グループを個別のダイアログテンプレートに配置し、それを「複合コントロール」として使用することを検討することもできます。これは、個別にインスタンス化され、より高いレベルのダイアログの子になります。

UPD。この単純なプロジェクト(C ++ / ATL)を見てください:AtlChildDialog。特に、メインダイアログのWM_INITIDIALOGハンドラーで

ATLVERIFY(m_ChildDialog.Create(m_hWnd, (LPARAM) this));
ATLVERIFY(m_ChildDialog.MoveWindow(50, 50, 200, 150));
m_ChildDialog.m_EditWindow.SetWindowText(_T("Some Text"));
m_ChildDialog.ShowWindow(SW_SHOWNORMAL);
m_ChildDialog.SetFocus();

IDD_MAIN

IDD_CHILD

実行時にすべて一緒に:

実行時間

于 2012-12-25T14:49:25.687 に答える