#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
												

SDL 显示汉字的更多相关文章

  1. 在wex5平台grid里面的gridselect下拉不能显示汉字问题

    当grid里面有gridSelect组件的时候,gridSelect里面的bind-ref是对应的数据库存入字段(int类型),bind-labelRef是对应的计算字段(视图里面的),而option ...

  2. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...

  3. 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)

    在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...

  4. 转 Mac 下自带的中文输入法不显示汉字提示问题

    原文 https://blog.csdn.net/moxi_wang/article/details/50721326 当时聊天的时候不知道那个手指头按错了什么键 导致Mac自带的中文输入法不能提示显 ...

  5. 使用Tslib在触摸屏上显示汉字【转】

    转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...

  6. activiti部署到linux后流程图不显示汉字的问题

    linux和windows的字体文件一般是不一样的,默认情况下,linux的java7中一般不支持中文,activiti的动态流程图中的汉字需要java调用汉字的字库,这里需要配置一下java的汉字字 ...

  7. emwin显示汉字使用vs studio仿真和使用keil编写烧录的不同

    我用emwin是在新唐的开发板上练习的,所有我就去官网下了开发板的资料,别的开发板应该也有对应的资料,这些软件网上应该很容易搜得到 然后用GUIBuilder构建一个界面,再用FontArchitec ...

  8. SDL显示文字

    前面教程里,我们只显示图片,没提到如何显示文字, SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字.ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它 ...

  9. Linux C语言解析.bmp格式图片并显示汉字

    bmp.h 文件 #ifndef __BMP_H__ #define __BMP_H__ #include <unistd.h> #include <stdio.h> #inc ...

随机推荐

  1. spring+mybatis报Cannot load JDBC driver

    今天做用maven搭建ssm框架的例子,在测试的时候一直报ava.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 这个异常,找 ...

  2. 算法复习 : 插入排序原理,记忆,时间复杂度 (7行java实现)

    最近啃了一遍吴伟民老师的<数据结构>,记录一些心得. 一种简洁的插入排序 : 1.重要概念 : 哨兵 1.在我们要排序的数组中,哨兵做为一个辅助的位置,一般是0下标的槽位做为哨兵 2.哨兵 ...

  3. Vue-footer始终置底

    需求:当页面高度不足一屏时需要footer固定显示在页面底部,而页面内容超过一屏时需要footer紧跟在页面内容的最后. 思路:通过获取 网页可见区域高度:document.body.clientHe ...

  4. 基于科大讯飞AIUI平台自定义语义库的开发

    说明:我写这篇文章的主要目的是因为我在做这块的时候遇到过一些坑,也是希望后来者能少走一些弯路. 科大讯飞AIUI开放平台地址 科大讯飞AIUI开放平台后处理地址 AIUI后处理开放平台协议 1. 科大 ...

  5. Dubbo教程:入门到实战

    Dubbox简介 Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护 ...

  6. Django框架之登录案例

    内容: (1)request.GET和request.POST (2)获取get方法提交和post方法提交的数据 一.登录案例 登录逻辑代码 def login(request): if reques ...

  7. Intellij IDEA中创建Package变成一级目录

    1.创建包,但是出来的却是一级目录 2.因为Compact Middle Packages默认勾选上了,取消掉即可

  8. Go语言经典库使用分析——高性能可扩展 HTTP 路由 httprouter(转载)

    转载自 飞雪无情的博客 Go语言(golang)的一个很大的优势,就是很容易的开发出网络后台服务,而且性能快,效率高.在开发后端HTTP网络应用服务的时候,我们需要处理很多HTTP的请求访问,比如常见 ...

  9. 15. 深入解析Pod对象(二):使用进阶

    15. 深入解析Pod对象(二):使用进阶 15.1 Projected Volume,投射数据卷 备注:Projected Volume 是 Kubernetes v1.11 之后的新特性 在 Ku ...

  10. 【SSM 】导出excel含图片

    ExprotRentUtils package com.kikyo.stat.utils; import java.awt.image.BufferedImage; import java.io.By ...