2011-02-14 55 views
2

我設法創建了一個自定義的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控制...)

+2

與MF命令按鈕你的意思是MFC?然後AfxWinInit可能未被調用(http://msdn.microsoft.com/en-us/library/w04bs753%28v=vs.80%29.aspx)。我建議不要使用MFC控件。 – wimh 2011-02-15 16:06:02

回答

1

貌似問題從我創建的屬性頁中控件的方式來了。我使用了一個簡單的「Formview」資源,但我試圖通過圖形資源查看器(或任何你想要調用它的方法)添加控件:右鍵單擊「插入ActiveX控件...」並使用「Microsoft Form 2.0」 。

將Formview資源與普通的舊Win32控件一起使用(初始化爲CreateWindowEx()並使用經典消息循環進行管理),一切正常。

非常感謝您的幫助!

相關問題