Windows 程式設計1 2章

2021-08-26 07:36:17 字數 2679 閱讀 9200

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 ...