我設法創建了一個自定義的DirectShow轉換過濾器,註冊它並將它導出到DLL中。它現在可以在GraphEdit和C++測試程序中正常工作。我的下一個目標是創建一個自定義界面,以便從測試應用程序或GraphEdit中的屬性頁面控制過濾器的主要參數。自定義Directshow過濾器的屬性頁
繼these instructions後,我從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 tutorial描述模板。
--- EDIT 2 ---:
在調試多一點點,我試圖刪除從對話框資源的每一個控制(按鈕,滾動條)。之後......一切正常。 CreateDialogParam()
返回正確的值,我們班的OnActivate()
被調用等。我最終在GraphEdit中獲得了「濾鏡屬性」頁面,但是爲空(除了默認的對話框窗口)。
但是,只要我有一個控制,例如一個MF命令按鈕,出現以前的問題。
DirectShow基類和我使用的控件之間是否有任何不兼容? (如果是這樣,爲什麼提供的示例中沒有提及任何內容?)有沒有更簡單的方法將控件添加到屬性頁面?
(我絕對不與圖形用戶界面專家和Win32控制...)
與MF命令按鈕你的意思是MFC?然後AfxWinInit可能未被調用(http://msdn.microsoft.com/en-us/library/w04bs753%28v=vs.80%29.aspx)。我建議不要使用MFC控件。 – wimh 2011-02-15 16:06:02