Re: CMultiDocTemplate dll проблема с сообщениями в строке ст
От: Pavel Dvorkin Россия  
Дата: 08.02.07 12:22
Оценка:
Здравствуйте, alexhack, Вы писали:

A>Не отображаются все подсказки типа tooltip, а также не выводятся сообщения в статусной строке, которые были созданы для меню или тулбара.

A>Почти 100% процентов это связано с тем что сам шаблон создается в dll в программу возвращается только указатель на CMultiDocTemplate, который регестрируется.

Попробуем поискать, благо исходники MFC под рукой. VC 7.1

Во-первых, поищем TOOLTIPTEXT. Ясно, что без нее не обойдется никак

Я буду многое из исходного кода опускать и заменять ...

winmdi.cpp
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)

там же OnToolTipText

// otherwise, handle it ourselves
return CFrameWnd::OnToolTipText(msg, pNMHDR, pResult);

Пойдем в CFrameWnd::OnToolTipText (winfrm.cpp)

ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)

BOOL CFrameWnd::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

// don't handle the message if no string resource found
if (AfxLoadString((UINT)nID, szFullText) == 0)
return FALSE;

Можно продолжить тем же способом и дальше, но хватит и этого. Ясно, что AfxLoadString из двух мест пытаться загружать не будет (если из двух, то почему не из всех DLL, которые тут могут быть . А загружает она не оттуда, откуда ты хочешь, судя по всему. Откуда именно она у тебя не загружает — можешь выяснить сам трассировкой, начиная с этого места.

Ну а решение простое. Имеем

BOOL CFrameWnd::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

Ее надо перекрыть в своей CMainFrame::OnToolTipText, вызвать родительскую и , если она вернула FALSE, попробовать обработать самому, действуя по тому же принципу. А может, вызывать AFX_MANAGE_STATE до вызова родительской и самому не обрабатывать. Поэкспериментируй — получится, если строка есть в ресурсах
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.