CPropertyPage::QuerySiblings() - поймать сообщение
От: mmd  
Дата: 18.03.03 15:36
Оценка:
Задача — переслать сообщение от одной закладки (список документов) 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.
Я пытался его перехватывать в закладке-форме таким способом:

BEGIN_MESSAGE_MAP(CDocumentPage, CPropertyPage)
//{{AFX_MSG_MAP(CDocumentPage)
//}}AFX_MSG_MAP
ON_MESSAGE(PSM_QUERYSIBLINGS,OnQuerySiblings)
END_MESSAGE_MAP()

на на этот разборщик он даже не приходит.
Re: CPropertyPage::QuerySiblings() - поймать сообщение
От: mmd  
Дата: 18.03.03 15:53
Оценка:
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  
Дата: 18.03.03 16:02
Оценка:
Здравствуйте, 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 Россия https://zarezky.spb.ru/
Дата: 19.03.03 05:34
Оценка:
Здравствуйте, mmd, Вы писали:

mmd>Придется принудительно после создания шита активировать все закладки. Занятно, однако.


PSP_PREMATURE не пробовали? В конструкторе каждой страницы.
- Искренне ваш, Поросенок Пафнутий
Re[4]: CPropertyPage::QuerySiblings() - поймать сообщение
От: mmd  
Дата: 19.03.03 08:59
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, mmd, Вы писали:


mmd>>Придется принудительно после создания шита активировать все закладки. Занятно, однако.


SDB>PSP_PREMATURE не пробовали? В конструкторе каждой страницы.

Спасибо, это помогло.

Вот только этот флаг согласно доке начинает обрабатываеться только с версии 4.71.
А то у меня клиенты могут быть самые неожиданные
Re[5]: CPropertyPage::QuerySiblings() - поймать сообщение
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 19.03.03 09:14
Оценка:
Здравствуйте, mmd, Вы писали:

mmd>Вот только этот флаг согласно доке начинает обрабатываеться только с версии 4.71.

mmd>А то у меня клиенты могут быть самые неожиданные

Ну уж 4-й ослик у всех должен быть. А на крайняк можно просто включить в дистрибутив соответствующую версию comctl32.dll. Я, например, клал 4.72 в Win95 и все прекрасно работало.
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.