博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MFC中使用SDL2.0(SDL窗口嵌入到MFC中)
阅读量:5822 次
发布时间:2019-06-18

本文共 1932 字,大约阅读时间需要 6 分钟。

SDL2.0的下载可以参考这篇文章:。

 

    本例开发环境:win7 64位 +VS2012 + SDL2.0.3 (stable)

 

    第一步:新建MFC基于对话框的应用程序(此例工程命名为MFC_SDL),然后直接点击完成即可,如下图。

 

 

    第二步:删除“TODO:在此放置对话框控件”。添加Picture Control和Button到对话框中,修改Button的名字为显示图片。

 

 

    

  第三步:SDL相关头文件、lib库以及dll动态链接库的设置可以参考这篇文章:。

 

  第四步:打开MFC_SDLDlg.cpp文件,在程序中添加头文件

 

[cpp]   
 
 
  1. #include <SDL.h>  

 

 

  第五步:双击Button控件,转到鼠标点击响应程序。添加程序。程序如下:

 

[cpp]   
 
 
  1. void CMFC_SDLDlg::OnBnClickedButton1()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     //The window we'll be rendering to  
  5.     SDL_Window* gWindow = NULL;  
  6.     //The surface contained by the window  
  7.     SDL_Surface* gScreenSurface = NULL;  
  8.   
  9.     //The image we will load and show on the screen  
  10.     SDL_Surface* gHelloWorld = NULL;  
  11.   
  12.     //首先初始化  
  13.     if(SDL_Init(SDL_INIT_VIDEO)<0)  
  14.     {  
  15.         printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );  
  16.         return ;  
  17.     }  
  18.     //创建窗口  
  19.     gWindow=SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC)->GetSafeHwnd() ) );  
  20.     if(gWindow==NULL)  
  21.     {  
  22.         printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );  
  23.         return ;  
  24.     }  
  25.     //Use this function to get the SDL surface associated with the window.  
  26.     //获取窗口对应的surface  
  27.     gScreenSurface=SDL_GetWindowSurface(gWindow);  
  28.   
  29.     //加载图片  
  30.     gHelloWorld = SDL_LoadBMP("Hello_World.bmp");//加载图片  
  31.     if( gHelloWorld == NULL )  
  32.     {  
  33.         printf( "Unable to load image %s! SDL Error: %s\n", "Hello_World.bmp", SDL_GetError() );  
  34.         return ;  
  35.     }  
  36.     //Use this function to perform a fast surface copy to a destination surface.    
  37.     //surface的快速复制  
  38.     //              SDL_Surface* src ,const SDL_Rect* srcrect , SDL_Surface* dst ,  SDL_Rect* dstrect  
  39.     SDL_BlitSurface( gHelloWorld ,     NULL ,                     gScreenSurface ,          NULL);  
  40.     SDL_UpdateWindowSurface(gWindow);//更新显示copy the window surface to the screen  
  41.   
  42. }  

 

 

  第六步:运行程序,点击“显示图片”按钮,现象如下:

 

  从程序中可以看出,要将SDL窗口嵌入到MFC中很简单,只要将SDL原来创建窗口的函数:

 

[cpp]   
 
 
  1. SDL_Window* gWindow = SDL_CreateWindow("SHOW BMP",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);  

 

 

  改成下面的函数即可:

 

[cpp]   
 
 
  1. SDL_Window* gWindow=SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC)->GetSafeHwnd() ) );  

 

 

其中,IDC_STATIC为PictureControl的ID

你可能感兴趣的文章
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
关于Android四大组件的学习总结
查看>>
java只能的round,ceil,floor方法的使用
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
【CQOI2011】放棋子
查看>>
采用JXL包进行EXCEL数据写入操作
查看>>
一周总结
查看>>
将txt文件转化为json进行操作
查看>>
线性表4 - 数据结构和算法09
查看>>
C语言数据类型char
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
Binary Search Tree Iterator leetcode
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>