#include "stdafx.h"

#pragma comment(lib,"SDL.lib")
#pragma comment(lib,"SDL2_image.lib")
#pragma comment(lib,"SDL_ttf.lib") #include <stdio.h>
#include <stdlib.h>
#include <string>
#include <Windows.h> #include "SDL.h"
#include "SDL_ttf.h" /* 屏幕分辩率 */
#define SCREEN_WIDTH 720
#define SCREEN_HEIGHT 480
#define SCREEN_BPP 32 const SDL_Color RGB_Black = { , , };
const SDL_Color RGB_Red = { , , };
const SDL_Color RGB_White = { , , };
const SDL_Color RGB_Yellow = { , , }; void ApplySurface(int x, int y, SDL_Surface* pSrc, SDL_Surface* pDest)
{
SDL_Rect rect; rect.x = x;
rect.y = y;
rect.w = pSrc->w;
rect.h = pSrc->h; SDL_BlitSurface(pSrc, NULL, pDest, &rect);
} char *localeToUTF8(char *src)
{
static char *buf = NULL;
wchar_t *unicode_buf;
int nRetLen; if(buf){
free(buf);
buf = NULL;
}
nRetLen = MultiByteToWideChar(CP_ACP,,src,-,NULL,);
unicode_buf = (wchar_t*)malloc((nRetLen+)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP,,src,-,unicode_buf,nRetLen);
nRetLen = WideCharToMultiByte(CP_UTF8,,unicode_buf,-,NULL,,NULL,NULL);
buf = (char*)malloc(nRetLen+);
WideCharToMultiByte(CP_UTF8,,unicode_buf,-,buf,nRetLen,NULL,NULL);
free(unicode_buf);
return buf;
} int main(int argc,char * argv[])
{
SDL_Surface *pScreen;
SDL_Surface *pBackground;
SDL_Surface *pText; SDL_Event myEvent; TTF_Font *font; char szEnglish[] = "Hello World!";
wchar_t wszChinese[] = L"世界,你好!"; /* 初始化 SDL */
if (SDL_Init(SDL_INIT_VIDEO) == -)
return ; /* 初始化窗口 */
pScreen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE | SDL_HWSURFACE);
if (NULL == pScreen)//检测是否初始化成功
return ; /* 初始化字体库 */
if (TTF_Init() == - )
return ; /* 设置窗口名字和图标 */
SDL_WM_SetCaption(localeToUTF8("测试SDL显示文字"), NULL); /* 打开simfang.ttf 字库,设字体为20号 */
font = TTF_OpenFont("C:\\Windows\\Fonts\\simhei.ttf", );
if (font == NULL)
{
return ;
} /* 显示背景 */
pBackground = SDL_LoadBMP(".\\22.bmp");
if (NULL != pBackground)
{
ApplySurface(, , pBackground, pScreen);
SDL_FreeSurface(pBackground);
} /* 设置字体样式(加粗|斜体)*/
TTF_SetFontStyle(font, TTF_STYLE_BOLD | TTF_STYLE_ITALIC); /* 显示英文 */
pText = TTF_RenderText_Solid(font, szEnglish, RGB_Red);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} pText = TTF_RenderText_Shaded(font,szEnglish,RGB_Red, RGB_White);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} pText = TTF_RenderText_Blended(font,szEnglish,RGB_Red);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} /* 显示中文 */
pText = TTF_RenderUNICODE_Solid(font, (const Uint16 *)wszChinese, RGB_Red);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} pText = TTF_RenderUNICODE_Shaded(font, (const Uint16 *)wszChinese, RGB_Red, RGB_White);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} pText = TTF_RenderUNICODE_Blended(font, (const Uint16 *)wszChinese, RGB_Red);
if (NULL != pText)
{
ApplySurface(, , pText, pScreen);
SDL_FreeSurface(pText);
} /* 将缓冲在界面显示出来 */
SDL_Flip(pScreen); /* 事件处理 */
int quit = ;
while (!quit)
{
if (SDL_PollEvent(&myEvent))
{
if (SDL_QUIT == myEvent.type)
{
quit = ;
}
}
} return ;
}

SDL本身并没有实际文字的功能,需要用到其扩展库SDL_ttf,下载地址:

http://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf.html

注意1:

TTF_OpenFont打开字体时,注意该字体是否支持汉字。
如果需要加载微软雅黑,其文件名是:msyhbd.ttf。这是因为C:\\Windows\\Fonts\\这个目录下我们看到的是“微软雅黑.ttf”这个文件。拷贝到桌面出来却是msyhbd.ttf跟msyh.ttf
注意2:
SDL_BlitSurface 不要使用,在以下配置环境中运行需要120ms
												

最新文章

  1. tomcat集群实例重复执行
  2. Windows Azure VM的两种shut down 方式
  3. SEVERE: Class [ com/mysema/query/dml/DeleteClause ] not found
  4. Web Host消息处理管道
  5. php学习之道:mysql SELECT FOUND_ROWS()与COUNT(*)使用方法差别
  6. CenOs 部署记录
  7. directdraw显示rgb555
  8. Python实现Singleton模式的几种方式
  9. c# 制作正方形图片
  10. PyTorch in Action: A Step by Step Tutorial
  11. osgi Quick Start
  12. ajax跨域名
  13. 【CDQ分治】[HNOI2010]城市建设
  14. 【socket编程】什么是socket编程
  15. 对于分类问题的神经网络最后一层的函数:sigmoid、softmax与损失函数
  16. 如何编写编译Robocup3D代码
  17. tcgetattr函数与tcsetattr函数控制终端
  18. VS Code直接调试Angular代码
  19. VC2010编译时提示:转换到 COFF 期间失败: 文件无效或损坏
  20. jetty启动(server-connector-handle-start-join)

热门文章

  1. 根据权限显示accordion
  2. C语言函数不能返回数组,但可以返回结构体
  3. centos8下gz,bz2,zip压缩解压缩
  4. 一个含有Fibonacci Number的级数
  5. 吴裕雄--天生自然Numpy库学习笔记:NumPy 广播(Broadcast)
  6. System.getProperty() 获取系统变量
  7. 标准类 (Java Bean)
  8. JQuery 移动端 上下 滑动 切换 插件 pageSlider
  9. cookie按钮点击倒计时
  10. 最全BT磁力搜索引擎,国外最受欢迎的BT-磁力网站(整理分享,每日不断更新...)