2012-05-04 14 views
2

CPropertySheet/CPropertyPageから派生したBCGSoftクラスを使用して、CPropertySheetベースのモーダルダイアログをMFCで作成しました。ユーザーがCPropertyPageのいずれかで特定の操作を実行すると、異なるCPropertyPageでコントロールを有効/無効にしたいと思います。CPropertySheetでユーザーがクリックする前にCPropertyPageが作成されていることを確認する方法?

これは、ユーザーがすでにタブをクリックして2番目のCPropertyPageをインスタンス化したと仮定すると、うまくいきます。ただし、MFCは、ユーザーによってアクティブにされるまで、2番目のCPropertyPageの作成を遅延します。このシナリオでは、2番目のCPropertyPage内のコントロールは存在せず、MFCはエラーをスローします。

これを解決するには、CPropertySheetOnInitDialog()内の必要な機能を呼び出すことで、すべてCPropertyPageが存在することを確認します。誰かがこれを行う方法を説明してもらえますか?

答えて

1

CPropertyPage::SetActivePage()(実際にはCPropertyPageオブジェクト上にある)関数を呼び出すことは、このトリックを行います。

0

あなたのデータはUIとは別のものではないようです(悪いこと)。 UIからデータを分離するためにビジネスロジックを再設計することが最善です。そのため、UIなしでも初期データを設定できます。

OnInitDialogでset the active page to each page in a loopにする必要がある場合は、デフォルトのページをアクティブにします。

+0

私の場合、ビジネスロジックの要件ではなく、別のページでチェックボックスをチェックするのは純粋にユーザーインターフェイスの便利さです。データが変更または設定されていません。 2番目のページがアクティブになったときにデータレイヤーに新しいプロパティを追加できます(データレイヤーは既に存在し、2番目のページがロード/セーブされると読み込まれます)。データ層。このシナリオでは、2ページ目のチェックボックスをオンにしてチェックします。 –

0

コントロールをすぐに有効にしようとするのではなく、ページのOnActivateメソッドで行います。

関連する問題