/*--
003 编程大师 Win32 API 日常练习。
第三个示例是 SprintFc:控制台程序--- printf 输出字符串。
spritf 的函数。
c) www.bcdaren.com 编码高手。
#include
在控制台中使用 printf
int main()
int a= 12;
char szbuffer[100];
sprintf_s(szbuffer,100,"hello %d", a);格式化内存中的字符串。
printf(szbuffer);在控制台中使用 printf
puts(szbuffer);另一种输出方式。
return 0;
SPRITF 的函数:格式化数据并将其输出到字符串中。 Sprintfs 检查格式化字符串中格式化字符的有效性,并且 sprintfs 携带接收格式化字符串的缓冲区的大小。
sprintf s 函数不是将格式化的结果写入标准输出,而是将其存储在 szbuffer 缓冲区中。
函数原型:int sprintf s(
char *buffer,指向要写入的字符串的缓冲区的 char 类型指针。
size t sizeOfBuffer,缓冲区的大小。
const char *format [,格式化字符串。
argument] .可变参数列表,可以是任何类型的数据。
printf ("the sum of %i and %i is %i", 5, 3, 5+3) ;
该函数等效于:
char szbuffer [100] ;
sprintf (szbuffer, 100,"the sum of %i and %i is %i", 5, 3, 5+3) ;
puts (szbuffer) ;
结果:hello 12
hello 12
注意]这是一个控制台程序,请注意开关。
004 编程大师 Win32 API 日常练习。
第四个例子是 sprintfC:Sprintf S-ASCII 版本用于 Windows。
messagebox一个函数。
c) www.bcdaren.com 编码高手。
#include
包括 ANSI 字符。
*程序条目**
ASCII 代码版。
int winapi winmain(hinstance instance, hinstance hprevinstance, pstr szcmdline, int icmdshow)
int a = 12;
char szbuffer[100];
格式化字符串被存储,标准 C 版本。
sprintf_s(szbuffer, 100, "hello %d", a);
带 A 的 ASCII 版本
messagebox(null, szbuffer, "hello ascii", mb_ok | mb_iconinformation);
return 0;
messagebox一个函数。
winuserapi
intwinapi
messageboxa(
在 opt hwnd hwnd 中,它所属的窗口。
在 opt lpcstr lptext 中,文本消息。
在 opt lpcstr lpcaption 中,标题。
in_ uint utype);按钮、图标样式。
结果:图 1-31。
图1-31 备注]向 Windows 添加头文件h。
005编程大师Win32 API日常练习。
第 5 个示例是 SprintFC:在 Windows 中使用 swprintf s-unicode 版本。
MessageBoxW 函数。
c) www.bcdaren.com 编码高手。
#include
#include
Unicode 版本。
*程序条目**
int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int icmdshow)
int a = 12;
wchar_t szbuffer[100]; //wchar
在内存中格式化字符串,标准 C 版本。
swprintf_s(szbuffer, 100, l"hello %d", a);
messagebox(null, szbuffer, l"hello unicode",mb_ok | mb_iconinformation);用w
return 0;
注意:转到“定义”进行查看。
winuserapi
intwinapi
messageboxw(
in_opt_ hwnd hwnd,in_opt_ lpcwstr lptext,in_opt_ lpcwstr lpcaption,in_ uint utype);
结果:图 1-32。
图1-32006 Programming Expert的Win32 API每天都在练习。
第 6 个示例是 SprintFc:在 Windows 中使用 sprintf-generic 版本。
messagebox 函数。
stprintf 的宏。
tchar.h 头文件。
c) www.bcdaren.com 编码高手。
#include
#include
包括 Microsoft 提供的与 Unicode 宽字符版函数和 ASCII 字符函数兼容的头文件。
#include
通用版。 *程序条目**
int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int icmdshow)
int a = 12;
tchar szbuffer[100]; //wchar
stprintf_s(szbuffer, 100, text("hello %d"), a);在内存中格式化字符串,Microsoft 版本的 tcharh.
messagebox(null, szbuffer, text("hello tchar"), mb_ok |
mb_iconinformation);
return 0;
MessageBox 函数:右键单击 - 转到定义。
#ifdef unicode
#define messagebox messageboxw
#else#define messagebox messageboxa
#endif // !unicode
stprintf 的宏。
#define _stprintf_s swprintf_s
注意:SwprintF S 不是 C 语言的标准库函数,而是 SprintF S 的宽字符版本,因此无需参考 C 标准库头文件 stdioh
tchar.H 头文件:Microsoft 提供的与 Unicode 宽字符版函数和 ASCII 字符函数兼容的头文件。
tchar.H 头文件是 ANSI C 标准的一部分,其中定义的每个函数和宏都有一个下划线前缀。
tchar.h 为需要字符串参数的常见运行时函数(例如 printf、tcslen)提供了一系列替代名称。
这些函数称为泛型函数名称,它们可以引用函数的 Unicode 和非 Unicode 版本。
如果定义了名为 Unicode 的标识符和 tcharh 头文件包含在程序中,tcslen 定义为 wcslen:
#define _tcslen wcslen
如果未定义 unicoe,则 tcslen 定义为 strlen:
#define _tcslen strlen
等等,tcharH 还使用名为 tchar 的新数据类型解决了双字符数据类型的问题。 如果定义了 -unicode,则 tchar 为 wchar t:
typedef wchar_t tchar;
否则。 typedef char tchar;
如果定义了 Unicode 标识符,则按如下方式定义名为 t 的宏:
#define _t(x) l##x
使字母 l 和宏参数连接在一起,如果宏参数是"hello!",则 l x 为 l"hello!"。
如果未定义 Unicode 标识符,则 T 宏仅定义为:
#define _t(x) x
这两个宏的定义是相同的。
#define -t(x) _t(x)
#define _text(x) _t(x)
要使用的 Win32 控制台程序取决于所需的简洁程度或详细信息级别。 基本上,字符串文字必须按以下方式定义:在 t 或 text 宏中:
text("hello!")
如果定义了 Unicode 标识符,则字符串将解释为宽字符,如果未定义,则解释为 8 位字符串。
结果:图 1-33。
图1-33 备注]添加头文件 tcharh。
定义一个声明参数数组的 va list 指针变量。
va_list parglist ;
pargs,数组初始化为“...”里面有什么。
parglist = (char *)szformat + sizeof (szformat) ;
va_start (parglist, szformat) ;返回参数列表中的第一个参数。
第二个参数是缓冲区大小,第三个参数是 tchar 的数量。
vsnwprintf_s( szbuffer, 1024,sizeof (szbuffer) / sizeof (tchar),szformat, parglist) ;
释放 pargs 数组。
va_end (parglist) ;
return messagebox (null, szbuffer, szcaption, 0) ;通过窗口显示。
int winapi winmain ( hinstance hinstance, hinstance hprevinstance,pstr szcmdline, int icmdshow)
int cxscreen, cyscreen;
屏幕宽度 - 检索指定的系统指标或系统配置设置,第 4 章以进一步了解 习。
cxscreen = getsystemmetrics(sm_cxscreen);
cyscreen = getsystemmetrics(sm_cyscreen);屏幕高度。
messageboxprintf(text("screensize"),text("the screen is %i pixels wide by %i pixels high."),cxscreen, cyscreen);
return 0;
vsnwprintf s 函数:宽字符 vsprintf --c 标准库函数。 使用参数列表将格式化输出发送到字符串。
int vsprintf(
char *str,指向字符数组的指针。
const char *format, string, 包含要写入字符串 str 的文本。
VA list arg 表示可变参数的列表。
getSystemMetrics 函数:检索指定的系统指标或系统配置设置---以像素为单位。
int getsystemmetrics(
int nindex 要检索的系统指标或配置设置。
结果:图 1-34。
注意]添加头文件 stdioh。
图1-34