windows程式設計(二)

2021-08-01 01:34:13 字數 1570 閱讀 6391

本期,我們來通過對話方塊來顯示自己的螢幕水平和豎直方向上的解析度。

#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 等待時間到以後執行緒還未退出...