Мне удалось создать собственный фильтр преобразования DirectShow, зарегистрировать его и экспортировать в DLL. Теперь он работает правильно как в GraphEdit, так и в тестовой программе C ++. Моя следующая цель - создать пользовательский интерфейс для управления основным параметром фильтра из тестового приложения или со страницы свойств в GraphEdit.
Следуя этим инструкциям , мой пользовательский интерфейс работает должным образом из тестовой программы C ++. Однако у меня возникают проблемы со страницей свойств: я продолжаю получать сообщение об ошибке «Запрошенная страница свойств не может быть отображена» в GraphEdit.
Во время отладки я обнаружил, что единственными вызываемыми методами (в моем классе страницы пользовательских свойств, производном от CBasePropertyPage) являются OnConnect()
и OnDisconnect()
- что странным образом (или нет?) Вызывается дважды. Между этими двумя методами выполняются некоторые вызовы методов CBasePropertyPage (файл cprop.cpp в базовых классах), и все выглядит нормально до:
STDMETHODIMP CBasePropertyPage::Activate(HWND hwndParent, LPCRECT pRect, BOOL fModal)
а точнее
m_hwnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(m_DialogId), hwndParent, DialogProc, (LPARAM) this);
Я всегда получаю m_hwnd
в 0, в результате чего метод возвращается с ошибкой. Я пытался добавить GetLastError()
сразу после этой инструкции, но она всегда возвращает 0, без ошибок. Более того, каждый параметр CreateDialogParam()
выглядит правильно инициализированным ...
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ :
На данный момент, чтобы хотя бы иметь рабочий пример, я использовал те же самые ресурсы / шаблоны, описанные в учебнике MSDN .
--- РЕДАКТИРОВАТЬ 2 --- :
Во время отладки я попытался удалить все элементы управления (кнопки, скроллеры) из ресурса Dialog. После этого ... все работает. CreateDialogParam()
возвращает правильное значение, вызывается OnActivate()
моего класса и так далее. В итоге я получаю страницу «Свойства фильтра» в GraphEdit, но пустую (кроме диалогового окна по умолчанию).
Но как только у меня появился контроль, например, командная кнопка MF, появляются предыдущие проблемы.
Существует ли какая-либо несовместимость между базовыми классами DirectShow и элементами управления, которые я использую? (И если да, то почему в предоставленном примере ничего не упоминается?) Есть ли более простой способ добавить элементы управления на страницу свойств?
(я определенно не эксперт с графическим интерфейсом и элементами управления Win32 ...)