前一篇文章看了下第一个windows编程的案例,下面用这个案例修改一下,使用资源文件 String来显示字符串

#include <windows.h>
#include<tchar.h>
#include"resource.h"  //将资源文件的头文件导入进来,否则读取不到
#define MAXSIZE_BUF 256
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hprevInstance,LPSTR lpCmdLine,int nCmdshow)
{
    TCHAR apptitle[MAXSIZE_BUF];    //定义一个apptitle的变量,类型为TCHAR适应于ASCII以及UNICODE
    LoadString(hInstance, IDS_STRING, apptitle, MAXSIZE_BUF); //载入string字符串,参数为  :  句柄,资源文件的ID(解决方案--资源文件---右键----添加资源----stringTable),文件大小
    MessageBox(NULL, _T("第一个例子"), apptitle, MB_OK);
    return 0;
}

sprintf_s 及 swprintf_s
一个是ASCII版本,一个是UNICODE版本

#include <windows.h>
#include<stdio.h>
#define MAXSIZE_BUF 256
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hprevInstance,LPSTR lpCmdLine,int nCmdshow)
{
    int a = 11;
    wchar_t szBuffer[100];//申请一个内存空间_宽字符的,ASCII版本不是wchar_t,而是char,使用TCHARwindows会自动识别
    swprintf_s(szBuffer, 100, L"Hello World! %d", a);//在内存中格式化字符串,宽字符用L起头,ASCII版本则是sprintf_s
    MessageBox(NULL, szBuffer, L"Hello Unicode", MB_OK | MB_ICONINFORMATION);//输出标题为Hello Unicode的对话框,句柄为NULL,内容为szBuffer ,MessageBox在unicode版本中为MessageboxW,而在ASCII版本为MessageBoxA,但是直接输入Messagebox,windows会自动识别区分
    //使用TEXT文本宏,windows也会自动识别是否需要加L
    return 0;
}

swprintf_s 以及 sprintf_s适用于不同的编码,为了兼容性或者说可移植性,我们一般通用为:_stprintf_s
别忘了,需要包含#include<tchar.h>头文件
自动识别字符集的程序应该如下:

#include <windows.h>
#include<tchar.h>
#include<stdio.h>//不加此头文件则无法支持ASCII编码
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprevInstance, LPSTR lpCmdLine, int nCmdshow)
{
    int a = 11;
    TCHAR szBuffer[100]; //TCHAR会自动选择字符集
    _stprintf_s(szBuffer, 100, _T("Hello World! %d\n"),a); //_stprintf_s会自动选择字符集
    MessageBox(NULL, szBuffer, _T("Hello Unicode"), MB_OK | MB_ICONINFORMATION); //_T就是TEXT文本宏的简写,会自动选择字符集
    return 0;
}
//注意,VS2019默认字符集为UNICODE

发表回复

后才能评论