Возможно ли подменить диалоговую функцию
От: ShootNik  
Дата: 29.08.05 07:36
Оценка:
Как это сделать?


Модальный диалог у меня расположен в DLL.
Вызов происходит экспортируемой функией DoModal(HWND, LPARAM)


DLGPROC fn;

INT_PTR DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
   return fn(hWnd, uMsg, wParam, lParam);
}

void main()
{
   ...
   fn = DlgProc;
   DoModal(0, &fn);
}


В WM_INITDIALOG вроде бы можно делать подмену, тока вся эта система у меня не работает, как сделать правильно, смысл в том что диалог реализованный в DLL не нужно модернизировать изнутри, а хотелось бы снаружи
Re: Возможно ли подменить диалоговую функцию
От: eaa Украина  
Дата: 29.08.05 13:14
Оценка:
Здравствуйте, ShootNik, Вы писали:

SN>Как это сделать?



SN>Модальный диалог у меня расположен в DLL.

SN>Вызов происходит экспортируемой функией DoModal(HWND, LPARAM)


SetWindowLongPtr(hWnd,DWLP_DLGPROC,(LONG_PTR)dlg_proc );


А вообще ищи слово subclassing
Re[2]: Возможно ли подменить диалоговую функцию
От: ShootNik  
Дата: 29.08.05 15:15
Оценка:
Здравствуйте, eaa, Вы писали:

eaa>
eaa>SetWindowLongPtr(hWnd,DWLP_DLGPROC,(LONG_PTR)dlg_proc );
eaa>


eaa>А вообще ищи слово subclassing


Спасибо за ответ! С простым диалогом у мен я получилось! Я не понимаю как сабклассить((


Вот собственно идея
EXE

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
  return fn(hDlg, uMsg, wParam, lParam);
}
DLGPROC fn = DlgProc;
void main() 
{
  DoModal(0, &fn);
}


DLL ну чтоб воспользоваться ее конечно в h нужно вынести, для краткости не отразил этого

extern "C" __declspec(dllexport) DoModal(HWND hParent, DLGPROC *pfnDlg)
{
  
  DLGPROC fnNew = *pfnDlg;
  *pfnDlg = DlgProc;
  ::DialogBox(..., fnNew);
}

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
  /// 
}


А в ATL подскажите пожалуйста как это можно реализовать. там с переходникаи запутался, вроде получилось, а на раскрытии дерева программа валится(((
Re: Помогите с WM_COMMAND
От: ShootNik  
Дата: 31.08.05 05:40
Оценка:
Мне удалось перехватить диалоговую процедуру. Теперь возникла проблема когда я щелкаю на пункт меню сообщения WM_COMMAND не генерится вообще((. Ресурс находится в exe. Модальный диалог находится в dll
Re[2]: Помогите с WM_COMMAND
От: ShootNik  
Дата: 31.08.05 07:32
Оценка:
Я разобрался. Тема снята
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.