I managed to create a custom DirectShow transform filter, register it, and export it in a DLL. It now works properly in both GraphEdit and a C++ test program. My next goal is to create a custom interface to control the filter's main parameter, from a test app or from a property page in GraphEdit.
Following these instructions, I got my custom interface working properly from the C++ test program. However, I'm facing difficulties with the property page : I keep getting the error message "The requested property page could not be displayed" in GraphEdit.
While debugging, I found that the only methods called (in my custom property page class, derived from CBasePropertyPage) are OnConnect()
and OnDisconnect()
- which is oddly (or not ?) called twice. Between these two methods, some calls are made to CBasePropertyPage methods (file cprop.cpp in baseclasses), and everything looks fine until :
STDMETHODIMP CBasePropertyPage::Activate(HWND hwndParent, LPCRECT pRect, BOOL fModal)
and more precisely
m_hwnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(m_DialogId), hwndParent, DialogProc, (LPARAM) this);
I always get m_hwnd
at 0, causing the method to return with an error. I tried to add GetLastError()
right after this instruction, but it always returns 0, no error. Moreover, every parameter of CreateDialogParam()
looks properly initialized...
Any help would be greatly appreciated !
EDIT :
For now, in order to at least have a working example, I've used the same resources/templates described in the MSDN tutorial.
---EDIT 2--- :
While debugging a little bit more, I tried deleting every single control (button, scroller) from the Dialog resource. After that... everything works. CreateDialogParam()
returns a correct value, my class's OnActivate()
is called and so on. I eventually get a "filter properties" page in GraphEdit, but empty (except from the default dialog window).
But as soon as I had a control, e.g. a MF command button, the previous problems appear.
Is there any kind of incompatibility between DirectShow base classes and the controls I use ? (And if so, why isn't the provided sample mentioning anything ?) Is there any simpler way to add controls to the property page ?
(I'm definitely not an expert with GUIs and Win32 controls...)
Looks like the problem came from the way I was creating the controls for the Property Page. I use a simple "Formview" resource, but I was trying to add the controls through the graphical resource viewer (or whatever you want to call it) : right click, "Insert ActiveX Control..." and using "Microsoft Form 2.0".
Using a Formview resource with plain old Win32 controls (initialized with CreateWindowEx()
and managed with a classic message loop), everything went ok.
Thanks a lot for your help !