windows.h 中包含了 許多其他的標頭檔案
主要是 winuser.h 使用者介面
winbase.h kernel函式
windef.h 一些型別的define
winnt.h 支援 unicode形態定義
wingdi.h 包含圖形介面函式
應用程式的入口函式
int winapi winmain //winapi #define winapi _stdcall 標準呼叫約定 很多語言都是用的這種呼叫約定
(hinstance hinstance, //例項的控制代碼 用於唯一標示應用程式
hinstance hprevinstance, //先前例項的控制代碼在win 32 下為 0已經被摒棄
lpstr lpcmdline, //command line
int nshowcmd ); /窗體的顯示方式
unicode 是為了解決ascii不能表示所有語言的問題
wchar_t 原型 typedef wchar_t unsigned short ; //佔2個位元組也就是 16位 寬字 32位下
wchar_t * p=l"dsafafd" ; //l是long 告訴編譯器使用每乙個字元佔2個位元組
wchar_t c=l'p'; //定義寬位元組 字元 即使不加l那麼編譯器也預設將她設定為2個位元組
wcslen 求寬位元組字串的長度 不包括 '\0'
wprintf 是printf的寬字原版
對應就有wscanf 這個是再 wchar.h中定義的
但是 有時候 我們 的程式需要 單位元組 也需要雙位元組 那麼 wchar_t和char 的 混合就混亂了 由於處理的函式 不用我們希望有乙個可以同時處理他們的 型別
tcar 如果定義了 _unicode 識別字那麼就是 typedef wchar_t tchar 如果沒定義的 typedef char tchar
具體看 tchar.h原始檔
#define _t(x) __t(x)
#define _text(x) __t(x)
在tchar.h中這樣定義了 就是 說我們可以用 _t __t _text中的任意一種 。
對應求字元個數的函式 就是 _tcslen ()
如果定義了 _unicode 那麼就是 #define _tcslen wcslen 否則 #define _tcslen strlen
如果要使用_unicode 識別那麼 就在 project ->setting->c/c++ language -> preprocessor definition中加上 _unicode 那麼 系統的 就會預設使用_unicode 識別型別
在 winnt.h 中增加了新的 型別定義 ctype.h 中定義了 wchar_t 為unsigned int
typedef char char ;
typedef wchar_t wchar ;
實際上 messagebox這個函式 並不是真正的 訊息框原型
在winuser.h中我們找不到 messagebox的函式定義 也就是說沒有 messagebox的函式進入點 但是 我們發現
有 messageboxa 和 messageboxw 這兩個 函式 乙個表示單位元組 乙個表示寬字 我們在使用時直觀呼叫 messagebox就行了 因為
#ifdef unicode
#define messagebox messageboxw //如果定義了unicode 那麼 就是用messageboxw
#else
#define messagebox messageboxa
#endif // !unicode 非unicode 的時候呼叫的是messageboxa
這樣的好處是一旦定義了 unicode 那麼全都是unicode 表示 messageboxw否則就是 messageboxa
還有 windows定義了一組與 c語言字串處理函式相當的函式
ilength = lstrlen (pstring) ;
pstring = lstrcpy (pstring1, pstring2) ;
pstring = lstrcpyn (pstring1, pstring2, icount) ;
pstring = lstrcat (pstring1, pstring2) ;
icomp = lstrcmp (pstring1, pstring2) ;
icomp = lstrcmpi (pstring1, pstring2) ;
這些函式 其實和 tchar 一樣的用法 如果定義了unicode 就是 那麼這些函式將接受寬字串,否則只接受常規字串。
windows中不可以使用 printf 但是可以使用sprintf進行格式化文字
int sprintf (char * szbuffer, const char * szformat, ...)
{int ireturn ;va_list pargs ;
va_start (pargs, szformat) ;
ireturn = vsprintf (szbuffer, szformat, pargs) ;
va_end (pargs) ;
return ireturn ;
標準版 sprintf swprintf _stprintf
我們可以對寬字 單位元組的字元進行格式化
Windows 程式設計1 2章
windows.h 中包含了 許多其他的標頭檔案 主要是 winuser.h 使用者介面 winbase.h kernel函式 windef.h 一些型別的define winnt.h 支援 unicode形態定義 wingdi.h 包含圖形介面函式 應用程式的入口函式 int winapi win...
程式設計珠璣第12章
正文 如何生成0 n 1內的m個隨機整數 1 方法一 比如要從5個數里選出2個數,第乙個數的概率是2 5,第二個數的概率是1 4,然後是0 3 那麼現在已經很清楚了。可以寫 如下 for int i 0 i n i if rand n i m 2 方法二 可以用乙個set,每生成乙個隨機,就去set...
Windows 程式設計3 4章筆記
while getmessage msg,null,0,0 獲得訊息 後面2個引數為0會接受任何 win32訊息 return 0 lresult callback myproc hwnd hwnd,uint umsg,win32訊息的型別 wparam wparam,第乙個附加引數 lparam ...