我在CPropertySheet
派生视图类中有一个属性表(CPropertyPage
派生类)及其页面(CView
派生类)。当属性页面发生变化时,我需要注意CView
派生类。
就我而言,处理PSN_SETACTIVE
通知无效。
问题是通过更改我需要从一个资源更新页面中的数据所需的页面。如果该资源不活动,那么我需要关闭视图并再次重新启动视图。
答案 0 :(得分:2)
CPropertySheet
未收到有关标签更改的信息。
PSN_SETACTIVE
和PSN_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
发送通知,您必须找到目标的句柄并传递消息。