列舉"捕捉裝置"
如果你的應用程式只是單純得通過使用者首選裝置用來捕捉聲音,那就沒有必要來列舉可用的裝置。當你通過呼叫directsoundcapturecreate8或directsoundfullduplexcreate8方法來建立乙個裝置物件時,你可以宣告乙個預設裝置。更多資訊,請檢視
creating the capture device object。
列舉操作在以下情況下是必須的:
1.你的應用程式所需的效能並不是所有裝置都能滿提供。
2.你的應用程式需要2種或以上的裝置。
3.你希望提供使用者選擇裝置的功能。
列舉為了實現三個目的:
1.指明哪些硬體是可用的。
2.為每乙個裝置提供了乙個guid(全域性統一識別符號)。
3.允許你為每乙個列舉出來的裝置建立乙個臨時裝置物件,這樣你就可以獲取裝置的效能。
想要列舉裝置,你必須首先設定乙個**函式(在系統中這個函式將會在列舉每個裝置時被呼叫一次)。你可以在這個函式內執行任何操作,你也可以給這個函式隨意命名,但是你必須根據 dsenumcallback 的原型宣告它。如果想要繼續列舉裝置,那麼這個**函式必須返回true,否則返回false。比如,在找到乙個滿足你要求效能的裝置後。
乙個**函式的例子:
下面這個**函式將每個列舉出來的裝置名新增到核取方塊中,並且將它的guid儲存為資料項。前三個引數由裝置提供,第四個引數由directsoundenumerate函式傳入;這個引數能被用來傳遞任何32位的值,在本例中則是這個核取方塊的視窗控制代碼。在windows.h中定義的巨集被用來向核取方塊中新增字串和資料。
bool callback dsenumproc(lpguid lpguid,
lpctstr lpszdesc,
lpctstr lpszdrvname,
lpvoid lpcontext )
memcpy(lptemp, lpguid,
sizeof
(guid));
}combobox_addstring(hcombo, lpszdesc);
combobox_setitemdata(hcombo,
combobox_findstring(hcombo,
0, lpszdesc),
lptemp );
free(lptemp);
return
(true);}
列舉在包含核取方塊的對話方塊被初始化的時候啟動。假設 hcombo 是這個核取方塊的控制代碼而 hdlg 是這個對話的控制代碼。 if
(failed(directsoundenumerate((lpdsenumcallback)dsenumproc,
(void*)
&hcombo)))
波形捕捉 (2)建立捕捉裝置物件
建立 捕捉裝置物件 你可以通過呼叫directsoundcapturecreate8或directsoundfullduplexcreate8函式來建立乙個捕捉裝置物件。這兩個函式都獲取乙個指向idirectsoundcapture8 介面的指標。directsoundcapturecreate的l...
演算法基礎(1) 列舉
列舉在大家看來可能是乙個非常簡單的問題,不就是乙個遍歷演算法嘛,有什麼好說的,然而,在參加了北京大學mooc的演算法基礎後,我直接被震驚了。原來列舉演算法還能這麼玩!好吧,不說有的沒得沒得了,先來看第乙個例子 熄燈問題 這個問題的描述如下 乙個由按鈕組成的矩陣,其中每行有6個按鈕,共5行。每個按鈕的...
c 基礎筆記 1 列舉
定義列舉一般不用中文,就像sql的欄位名一樣,效率會有影響,下面就實現為列舉值添自定義中文說明,然後獲取。1.建立乙個類,既然要新增自定義屬性,就必須繼承attribute public class enumhelper attribute public string description 2.建...