#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. 工具 - 正则Cheat sheet

  2. Java后台技术(TDDL)

    从PC客户端开发转项目经理已经有一段时间了,感觉还不错,平安这边的项目经理还需要对外,所以部门其他项目经理经常需要出差去见客户,我专门对内,部门所有的开发和测试每天做什么.接下来做什么我都必须了解,部 ...

  3. 调用webservice服务(通过反射的方式动态调用)

    调用 ";//系统类别 var jkxlh = "";//接口序列号 var jkid = "68W05";//接口id string WriteXm ...

  4. Spring Boot RestApi 测试教程 Mock 的使用

    测试 Spring Boot Web 的时候,我们需要用到 MockMvc,即系统伪造一个 mvc 环境.本章主要编写一个基于 RESTful API 正删改查操作的测试用例.本章最终测试用例运行结果 ...

  5. Vue 项目 在局域网内访问

    之前在百度上看到过很多中  关于局域网访问项目的方法, 在这里,个人推荐两种比较喜欢的方法 一.直接在项目的package.json文件中进行配置 ,代码如下 "scripts": ...

  6. Mac 系统添加右键功能菜单--新建 office,文档等

    Mac 系统自带右键功能键比较少,可以添加服务来拓展功能项.例如 Windows 系统右键可以新建 Word 文档,Excel 工作表等,Mac 默认没有,需要进行设置添加. 首先 F4 键进入 La ...

  7. DNS域名解析服务(重点)

    一 .DNS  系统的作用 1.DNS 服务器概述 DNS 系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名:与 IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务,即正 ...

  8. 基于Goolgle最新NavigationDrawer实现全屏水平平移

    常见实现App 上面侧边栏菜单之前使用SlidingMenu,现在发现Goolgle原生NavigationDrawer也挺好用.但是细心的开发者们发现NavigationDrawer没有类似Slid ...

  9. Maven笔记一

    简介:什么是maven Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理. 如图为项目构建的过程. 解决的项目的问题: 1.  如果有好几个项目,这好几个项目中,需要 ...

  10. nginx 网络层的优化

    TCP三次握手四次挥手 系统层的优化,主动建立连接时的重试次数 net.ipv4.tcp_syn_retries = 6 建立连接时本地端口可用范围:手动可以tiaoz net.ipv4.ip_loc ...