實現messageboxprintf函式,該函式有許多引數並能像 printf 那樣編排它們的格式。
1)winmain 主函式#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)
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 ...