在MFC中使用SDL2.0(SDL視窗嵌入到MFC中)
阿新 • • 發佈:2019-02-18
本例開發環境:win7 64位 +VS2012 + SDL2.0.3 (stable)
第一步:新建MFC基於對話方塊的應用程式(此例工程命名為MFC_SDL),然後直接點選完成即可,如下圖。
第二步:刪除“TODO:在此放置對話方塊控制元件”。新增Picture Control和Button到對話方塊中,修改Button的名字為顯示圖片。
第三步:SDL相關標頭檔案、lib庫以及dll動態連結庫的設定可以參考這篇文章:SDL2學習筆記1-環境搭建以及HelloSDL。
第四步:開啟MFC_SDLDlg.cpp檔案,在程式中新增標頭檔案
#include <SDL.h>
第五步:雙擊Button控制元件,轉到滑鼠點選響應程式。新增程式。程式如下:
void CMFC_SDLDlg::OnBnClickedButton1() { // TODO: 在此新增控制元件通知處理程式程式碼 //The window we'll be rendering to SDL_Window* gWindow = NULL; //The surface contained by the window SDL_Surface* gScreenSurface = NULL; //The image we will load and show on the screen SDL_Surface* gHelloWorld = NULL; //首先初始化 if(SDL_Init(SDL_INIT_VIDEO)<0) { printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() ); return ; } //建立視窗 gWindow=SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC)->GetSafeHwnd() ) ); if(gWindow==NULL) { printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() ); return ; } //Use this function to get the SDL surface associated with the window. //獲取視窗對應的surface gScreenSurface=SDL_GetWindowSurface(gWindow); //載入圖片 gHelloWorld = SDL_LoadBMP("Hello_World.bmp");//載入圖片 if( gHelloWorld == NULL ) { printf( "Unable to load image %s! SDL Error: %s\n", "Hello_World.bmp", SDL_GetError() ); return ; } //Use this function to perform a fast surface copy to a destination surface. //surface的快速複製 // SDL_Surface* src ,const SDL_Rect* srcrect , SDL_Surface* dst , SDL_Rect* dstrect SDL_BlitSurface( gHelloWorld , NULL , gScreenSurface , NULL); SDL_UpdateWindowSurface(gWindow);//更新顯示copy the window surface to the screen }
第六步:執行程式,點選“顯示圖片”按鈕,現象如下:
從程式中可以看出,要將SDL視窗嵌入到MFC中很簡單,只要將SDL原來建立視窗的函式:
SDL_Window* gWindow = SDL_CreateWindow("SHOW BMP",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
改成下面的函式即可:
SDL_Window* gWindow=SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC)->GetSafeHwnd() ) );
其中,IDC_STATIC為PictureControl的ID。