Задача — переслать сообщение от одной закладки (список документов) PropertySheet в другую (несколько разных форм для отображения разных типов документов).
В списке документов делаю:
void CDealListPage::OnDblclkListDeal(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION iPos=m_c_ListDeal.GetFirstSelectedItemPosition();
if(iPos==NULL) return;
int iItem=m_c_ListDeal.GetNextSelectedItem(iPos);
stIBCDocInfo di;
di.nID=m_c_ListDeal.GetItemData(iItem);
di.sKind=m_c_ListDeal.GetItemText(iItem,ldcKind);
di.sType=m_c_ListDeal.GetItemText(iItem,ldcType);
CDocumentPage *pDlg=(CDocumentPage*)QuerySiblings(MSG_SearchDocumentPage,LPARAM(&di));
if(!pDlg)
{
AfxMessageBox("Невозможно отобразить документ",MB_OK|MB_ICONINFORMATION);
return;
} pDlg->LoadData(di.nID);
*pResult = 0;
}
Сообщение PSM_QUERYSIBLINGS в PropertySheet посылается (я трассировал), но функция всегда возвращает 0.
Я пытался его перехватывать в закладке-форме таким способом:
mmd>BEGIN_MESSAGE_MAP(CDocumentPage, CPropertyPage) mmd> //{{AFX_MSG_MAP(CDocumentPage) mmd> //}}AFX_MSG_MAP mmd> ON_MESSAGE(PSM_QUERYSIBLINGS,OnQuerySiblings) mmd>END_MESSAGE_MAP() mmd>на на этот разборщик он даже не приходит.
Пришел. Опосля полного ребилда.
Сорри всем.
Re[2]: CPropertyPage::QuerySiblings() - поймать сообщение
Здравствуйте, mmd, Вы писали:
mmd>>BEGIN_MESSAGE_MAP(CDocumentPage, CPropertyPage) mmd>> //{{AFX_MSG_MAP(CDocumentPage) mmd>> //}}AFX_MSG_MAP mmd>> ON_MESSAGE(PSM_QUERYSIBLINGS,OnQuerySiblings) mmd>>END_MESSAGE_MAP() mmd>>на на этот разборщик он даже не приходит.
mmd>Пришел. Опосля полного ребилда. mmd>Сорри всем.
Все оказалось гораздо интересней — сообщение закладкой перехватывается, но только после того, как в этой закладке хоть раз побываешь (чтобы она загрузилась).
Если же она ни разу не активировалась, то она не имеет окна и, соответственно, не получает сообщений.
Придется принудительно после создания шита активировать все закладки. Занятно, однако.
Re[3]: CPropertyPage::QuerySiblings() - поймать сообщение
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, mmd, Вы писали:
mmd>>Придется принудительно после создания шита активировать все закладки. Занятно, однако.
SDB>PSP_PREMATURE не пробовали? В конструкторе каждой страницы.
Спасибо, это помогло.
Вот только этот флаг согласно доке начинает обрабатываеться только с версии 4.71.
А то у меня клиенты могут быть самые неожиданные
Re[5]: CPropertyPage::QuerySiblings() - поймать сообщение
Здравствуйте, mmd, Вы писали:
mmd>Вот только этот флаг согласно доке начинает обрабатываеться только с версии 4.71. mmd>А то у меня клиенты могут быть самые неожиданные
Ну уж 4-й ослик у всех должен быть. А на крайняк можно просто включить в дистрибутив соответствующую версию comctl32.dll. Я, например, клал 4.72 в Win95 и все прекрасно работало.