如何在视图类中更改属性页时收到通知

时间:2016-06-23 16:02:19

标签: c++ mfc

我在CPropertySheet派生视图类中有一个属性表(CPropertyPage派生类)及其页面(CView派生类)。当属性页面发生变化时,我需要注意CView派生类。

就我而言,处理PSN_SETACTIVE通知无效。

enter image description here

问题是通过更改我需要从一个资源更新页面中的数据所需的页面。如果该资源不活动,那么我需要关闭视图并再次重新启动视图。

1 个答案:

答案 0 :(得分: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发送通知,您必须找到目标的句柄并传递消息。