Windows 程式設計基礎(三)

2021-10-04 13:40:18 字數 1523 閱讀 9884

實現messageboxprintf函式,該函式有許多引數並能像 printf 那樣編排它們的格式。

#include

#include

#include

int cdecl messageboxprintf

(tchar * szcaption, tchar * szformat,..

.); va_list parglist;

va_start

(parglist, szformat)

;_vsntprintf

(szbuffer,

sizeof

(szbuffer)

/sizeof

(tchar)

, szformat, parglist)

;va_end

(parglist)

;return

messagebox

(null

, szbuffer, szcaption,0)

;}int winapi winmain

(hinstance hinstance, hinstance hprevinstance,

pstr szcmdline,

int icmdshow)

1)winmain 主函式

2)getsystemmetrics函式只有乙個引數,稱之為【索引】,這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度、窗體顯示區域的寬度和高度、滾動條的寬度和高度。

用getsystemmetrics獲取螢幕的寬度和高度

int x, y;

x = getsystemmetrics(sm_cxscreen); //螢幕寬度

y = getsystemmetrics(sm_cyscreen); //螢幕高度

4)當我們無法列出傳遞函式的所有實參的型別和數目時,可以用省略號指定參數列

5)va_list 是乙個字元指標,可以理解為指向當前引數的乙個指標,取參必須通過這個指標進行。

在呼叫參數列之前,定義乙個 va_list 型別的變數,(假設va_list 型別變數被定義為ap);

然後應該對ap 進行初始化,讓它指向可變參數列裡面的第乙個引數,這是通過 va_start 來實現的,第乙個引數是 ap 本身,第二個引數是在變參表前面緊挨著的乙個變數,即「…」之前的那個引數;

然後是獲取引數,呼叫va_arg,它的第乙個引數是ap,第二個引數是要獲取的引數的指定型別,然後返回這個指定型別的值,並且把 ap 的位置指向變參表的下乙個變數位置;

獲取所有的引數之後,我們有必要將這個 ap 指標關掉,以免發生危險,方法是呼叫 va_end,他是輸入的引數 ap 置為 null,應該養成獲取完參數列之後關閉指標的習慣。說白了,就是讓我們的程式具有健壯性。通常va_start和va_end是成對出現。

va_arg 獲取可變引數的當前引數,返回指定型別並將指標指向下一引數。

6)_vsntprintf 與sprintf類似

不通:可以讀取函式省略的引數,設定到第乙個引數指定的空間。

Windows基礎窗體程式設計

direct2d基於windows窗體,因此必須了解一些基本的windows窗體程式設計 首先,最基本的,可以使用windows api寫乙個窗體 view code include typedef lresult message callback hwnd,wparam,lparam struct...

windows 黑客程式設計基礎技術

基礎技術 monday,february 3,2020 3 27 pm 1.介紹 研發時通常會使用第三方庫,但並非所有的第三方庫都會提供靜態庫,大多數會提供動態鏈結庫 dll。dll延遲載入優點是將必須的 dll檔案以資源檔案的形式插入到程式中。在正式呼叫到必須的dll之前,程式都可以正常執行。程式...

Windows網路程式設計基礎知識

1.winsock的初始化 include include include pragma comment lib,ws2 32.lib 使用winsock2.h時,須載入此項 using namespace std winsock2函式帶有wsa字首,除了wsastartup wsacleanup ...