本期,我們來通過對話方塊來顯示自己的螢幕水平和豎直方向上的解析度。
#include
#include
#include
//cdecl 是c declaration的縮寫(declaration,宣告),表示c語言預設的函式呼叫方法:所有引數從右到左依次入棧,
//這些引數由呼叫者清除,稱為手動清棧。被呼叫函式不會要求呼叫者傳遞多少引數,呼叫者傳遞過多或者過少的引數,
//甚至完全不同的引數都不會產生編譯階段的錯誤。
int cdecl messageboxprintf(tchar *szcaption,tchar *szformat,...) //capton標題;format版本、格式
//va_list的用法:(可變引數的函式)
//(1)首先在函式裡定義一具va_list型的變數,這個變數是指向引數的指標;
//(2)然後用va_start巨集初始化變數剛定義的va_list變數,使其指向第乙個可
//變引數的位址;
//(3)然後用va_arg返回可變的引數,va_arg的第二個引數是你要返回的引數
//的型別(如果函式有多個可變引數的,依次呼叫va_arg獲取各個引數);
//(4)最後用va_end巨集結束可變引數的獲取。使用va_list應該注意的問題:
// (1、可變引數的型別和個數完全由程式**控制,它並不能智慧型地識別不同引數的個數和型別;
// (2、如果我們不需要一一詳解每個引數,只需要將可變列表拷貝至某個緩衝,可用vsprintf函式;
// (3、因為編譯器對可變引數的函式的原型檢查不夠嚴格,對程式設計查錯不利.不利於我們寫出高質量的**;
//小結:可變引數的函式原理其實很簡單,而va系列是以巨集定義來定義的,實現跟堆疊相關。我們寫乙個可變引數的c函式時,有利也有弊,所以在不必要的場合,我們無需用
//到可變引數,如果在c++裡,我們應該利用c++多型性來實現可變引數的功能,盡量避免用c語言的方式來實現。
int winapi winmain(hinstance hinstance,hinstance hprevinstance,
pstr szcmdline,int icmdshow)
截圖結果為:
附:為了驗證_vsntprintf_s返回值是寫入到字元陣列szbuffer中的字元個數(不包含終止符),我們宣告兩個變數啊a和b,將messageboxprintf函式**修改為:
int cdecl messageboxprintf(tchar *szcaption,tchar *szformat,...)//capton標題;format版本、格式
return messagebox(null,szbuffer,szcaption,0);
}結果顯示為:
windows程式設計實驗二
1.在c 中,經常會使用 include 或者 include 來包含某些標頭檔案,這樣做減少了 的重複冗雜,是非常方便的,但是,不了解其中的奧秘的話,也是非常容易出錯的。所以我們就需要了解兩者不同呼叫的相同點和區別了。相同 這種使用方法是在編譯前將標頭檔案包含到.cpp檔案裡面,區別 includ...
Windows網路程式設計總結(二)
windows網路程式設計總結 二 1 winsokcet architecture 2 關於 acceptex 使用此函式時,要包含頭文 mswsock.h mswsock.lib 可在源程式中加入下面的語句,這樣在編譯時,將自動鏈結 mswsock.lib。pragma comment lib,...
windows併發程式設計API(二)
dword winapi waitforsingleobject in handle hhandle,in dword dwmilliseconds 等待執行緒執行 返回引數 wait abandoned wait object 0 執行緒退出 wait timeout 等待時間到以後執行緒還未退出...