Как получить дескриптор диалога в режиме редактирования?
От: Аноним  
Дата: 13.07.04 06:20
Оценка:
Пишу Active-X, и мне нужно получить дескриптор окна диалога, в котором находится этот Active-X на этапе редактирования диалога в MS Visual Studio 6.00. Как это сделать?
Нужно именно на этапе редактирования диалога, а не на этапе выполнения программы.
Re: Как получить дескриптор диалога в режиме редактирования?
От: Tom Россия http://www.RSDN.ru
Дата: 13.07.04 11:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишу Active-X, и мне нужно получить дескриптор окна диалога, в котором находится этот Active-X на этапе редактирования диалога в MS Visual Studio 6.00. Как это сделать?

А>Нужно именно на этапе редактирования диалога, а не на этапе выполнения программы.

Запросить у контейнера IOleWindow?
Народная мудрось
всем все никому ничего(с).
Re[2]: Как получить дескриптор диалога в режиме редактирован
От: Аноним  
Дата: 13.07.04 12:32
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Запросить у контейнера IOleWindow?


Хорошо, а тогда вопрос: когда это делать. Поясню.
После того, как Active-X вставлен на редактируемую в редакторе ресурсов страницу диалога, ему (Active-X-у) шлются какие-то сообщения. Какие?
После того, как я, например, мышкой изменю размер окна моего Active-X, я хочу, чтоб он получил дескриптор окна диалога. Как это сделать? Если я вставляю обработчик сообщения WM_SIZE, то оно просто к Active-X-у не доходит.
Re[3]: Как получить дескриптор диалога в режиме редактирован
От: Tom Россия http://www.RSDN.ru
Дата: 13.07.04 13:48
Оценка:
А>Хорошо, а тогда вопрос: когда это делать. Поясню.
А>После того, как Active-X вставлен на редактируемую в редакторе ресурсов страницу диалога, ему (Active-X-у) шлются какие-то сообщения. Какие?
А>После того, как я, например, мышкой изменю размер окна моего Active-X, я хочу, чтоб он получил дескриптор окна диалога. Как это сделать? Если я вставляю обработчик сообщения WM_SIZE, то оно просто к Active-X-у не доходит.

вероятно см IOleObject::SetSite и SetExtent (сам не проверял)
Народная мудрось
всем все никому ничего(с).
Re[2]: Этот способ не работает
От: Аноним  
Дата: 14.07.04 07:45
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Запросить у контейнера IOleWindow?


Вот код:

HRESULT CFa::OnDraw(ATL_DRAWINFO& di)
{
  TCHAR s[256];
  IOleClientSite *pS;
  IOleContainer  *pC;

  GetClientSite(&pS);
  wsprintf(s,_T("site:%X"),pS);
  TextOut(di.hdcDraw,0,20,s,lstrlen(s));

  wsprintf(s,_T("spsi:%X"),m_spInPlaceSite);
  TextOut(di.hdcDraw,0,60,s,lstrlen(s));

  pS->GetContainer(&pC);
  wsprintf(s,_T("cont:%X"),pC);
  TextOut(di.hdcDraw,0,80,s,lstrlen(s));

  return S_OK;
}


Вот что получается при выводе:
site:2378FCC
spsi:0
cont:0

Как получить контейнер или еще лучше дескриптор окна, в котором находится Active-X?
Нужно именно на этапе редактирования диалога в Visual C++.
Re[3]: Этот способ не работает
От: rus blood Россия  
Дата: 14.07.04 07:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как получить контейнер или еще лучше дескриптор окна, в котором находится Active-X?

А>Нужно именно на этапе редактирования диалога в Visual C++.

GetParent(), если есть окно твоего контрола.
Имею скафандр — готов путешествовать!
Re[4]: Этот способ не работает
От: Аноним  
Дата: 14.07.04 07:51
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>GetParent(), если есть окно твоего контрола.

GetParent() даже вызывать нельзя, т.к. m_hWnd равно NULL!!!
В том то и дело, что НА ЭТАПЕ РЕДАКТИРОВАНИЯ диалога m_hWnd==NULL!!! На этапе выпонения проблем никаких нет — все работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.