Как это сделать?
Модальный диалог у меня расположен в 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 не нужно модернизировать изнутри, а хотелось бы снаружи
Здравствуйте, ShootNik, Вы писали:
SN>Как это сделать?
SN>Модальный диалог у меня расположен в DLL.
SN>Вызов происходит экспортируемой функией DoModal(HWND, LPARAM)
SetWindowLongPtr(hWnd,DWLP_DLGPROC,(LONG_PTR)dlg_proc );
А вообще ищи слово subclassing
Здравствуйте, 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 подскажите пожалуйста как это можно реализовать. там с переходникаи запутался, вроде получилось, а на раскрытии дерева программа валится(((
Мне удалось перехватить диалоговую процедуру. Теперь возникла проблема когда я щелкаю на пункт меню сообщения WM_COMMAND не генерится вообще((. Ресурс находится в exe. Модальный диалог находится в dll
Я разобрался. Тема снята