在WPF中使用SDL

實現目的

    SDL是一個非常優秀的跨平臺的開源 UI lib, 在視頻,遊戲等領域都有比較廣泛的利用。

    我爲了開發一套Windows端的網路哦攝像頭監控軟件,因此選用了wpf和sdl的組合。其中sdl負責視頻顯示,wpf負責界面元素和業務邏輯的開發。

實現原理

嵌入Window

    無論上層的框架如何變動,最後必定會調用CreateWindow()創建Window, 因此,我們採用將SDL嵌入創建好的Window中的方式實現窗口的集成。

消息循環

    SDL的主程序和Win32主程序一樣,都是如下類似的消息循環體。而WPF框架像其他Windows UI框架一樣,都已經幫我們寫好了主消息循環體。

    而且Windows也限制在其他非UI線程中操作UI元素,因此我們用一個Timer消息來輪詢SDL的消息。

while (SDL_PollEvent(&e)){
	//If user closes the window
	if (e.type == SDL_QUIT){
		quit = true;
	}
	//If user presses any key
	if (e.type == SDL_KEYDOWN){
		quit = true;
	}
	//If user clicks the mouse
	if (e.type == SDL_MOUSEBUTTONDOWN){
		quit = true;
	}
}

實現細節

軟件環境

    本文的代碼在 Windows8.1 + VS2013 + SDL1.2實現。

SDL在MFC中的實現

    首先我在MFC中驗證如何將SDL嵌入已經創建的Window中去。參考如下的鏈接便便實現了:

        http://blog.csdn.net/lights_joy/article/details/4049123ci'ci

    此demo的下載鏈接如下:

        http://download.csdn.net/detail/chenxiemin/8084343


SDL在WPF中的實現

    sdl嵌入wpf中的過程要稍微複雜一點。

    雖然我們可以獲得WPF中的Window Handler(博客地址http://blog.csdn.net/senophen/article/details/1566126)。

    但是因爲WPF會在創建的Window上蓋上一層,因此我們選擇使用WPF提供的 HwndHost類。參見 http://msdn.microsoft.com/en-us/library/ms742522(v=vs.110).aspx。

    此demo的下載鏈接如下:http://download.csdn.net/detail/chenxiemin/8089115



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章