2016-06-23 19 views
-1

CView派生ビュー・クラスにプロパティ・シート(CPropertySheet派生クラス)とそのページ(CPropertyPage派生クラス)を持っています。プロパティページが変更されたときに、派生クラスCViewに通知する必要があります。プロパティ・ページがビュー・クラス内で変更されたときに通知を受け取る方法

私の場合、PSN_SETACTIVE通知の処理は機能しません。

enter image description here

の問題は、私は1つのリソースからのページのデータを更新する必要があるページを変更することです。そのリソースがアクティブでない場合は、ビューを閉じてビューを再開する必要があります。

答えて

2

CPropertySheetタブの変更に関する情報は表示されません。

PSN_SETACTIVEPSN_KILLACTIVEが代わりにCPropertyPageに送信されます。タブが選択/選択解除されているときは、各PropertyPageでこれらのメッセージを処理する必要があります。次のようにあなたがこれを扱うことができるMFCで

class CMyPropertyPage: public CPropertyPage 
{ 
    BOOL OnSetActive(); 
    BOOL OnKillActive(); 
    ... 
}; 

BOOL CMyPropertyPage:OnSetActive() 
{ 
    BOOL res = CPropertyPage::OnSetActive(); 
    TRACE("CMyPropertyPage tab selected\n"); 
    return res; 
} 

BOOL CMyPropertyPage:OnKillActive() 
{ 
    BOOL res = CPropertyPage::OnKillActive(); 
    TRACE("CMyPropertyPage tab unselected\n"); 
    return res; 
} 

も参照してください:
WinAPI property sheet
CPropertyPage::OnSetActive

CMyViewに通知を送信するには、ターゲットへのハンドルを見つける必要がありますし、メッセージを渡す。

+0

PSN_SETACTIVEは、CPropertySheetでも処理できます。あなたの解決策は正しいです。しかし、ある場合にはそれは機能しません。たとえば、このメソッドを処理している間は、ページを削除するか、プロパティシートにページを追加することはできません。また、現在のフレームも破棄できません。 –

+0

あなたは私の答えが馬鹿に見えるようにあなたの質問を完全に変えました。あなたは 'PSN_SETACTIVE'を望んでいないと書いています**後は** PSN_SETACTIVEを使う答えを出しました。あなたはあなたの質問を編集したことに言及していません。 'PSN_SETACTIVE'がなぜ間違っているのかを説明するドキュメントとともに、他の奇妙な要件を追加しました。 –

+0

あなたのソリューションは私には役立ちますが、私の問題には適していません –

関連する問題