/*--
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