榪欎釜渚嬪瓙鏄ぇ灞卞摜鍝ュ湪浠栫殑BLOG涓璚indows API綺捐涓鏃ヤ竴緇冪殑渚嬪瓙銆?br>濂囨惂錛岃繖嬈$殑WinMain鍑芥暟鍙堜笉涓鏍蜂簡銆俉indows緙栫▼闅懼錛屽氨鏄洜涓哄畠閭d箞澶氬畯錛屽畠浼熷ぇ涔嬪涔熸槸鍥犱負(fù)瀹冪殑瀹忥紝鍙互灞忚斀紜歡灞傘佸瓧絎﹂泦瀵圭▼搴忕殑褰卞搷銆?br>涓鑸殑WinMain鍑芥暟鏄繖鏍峰啓鐨? int WINAPI WinMain(...)錛岄偅鐜板湪鐨勮繖縐嶅張鏄庢牱鍑烘潵鐨勫憿錛?br>APIENTRY鍦ㄧ▼搴忓氨鏄竴涓畯錛?define APIENTRY WINAPI錛岄偅涔堟垜浠氨鍙互涓嶇閭d釜鍓嶇紑浜嗐?br>浣犺偗瀹氭兂涓嶅埌鐨勬槸錛宊tWinMain涔熸槸涓涓畯銆傚畠鏄畾涔夊湪<tchar.h>涓殑銆備綘鍙互璇曡瘯灝?include <tchar.h>鍘繪帀錛屼綘鐨勭▼搴忚偗瀹氭壘涓嶅埌鍏ュ彛鐐廣?br>鍚屾牱鐨勶紝_T涔熸槸涓涓畯銆?br>榪欎袱涓畯鍏跺疄鏄負(fù)浜嗛傚簲U(kuò)NICODE鍜屼互鍓嶅崟瀛楃鐨勫簲鐢ㄧ▼搴忋?br>鐢變簬Windows榪欎袱涓狝PI鐨勫畾涔夋槸涓嶄竴鏍風(fēng)殑錛屽涓嬶細(xì)
UNICODE鐨勫畾涔夛細(xì)
#define _tWinMain wWinMain
鍗曞瓧絎︾殑瀹氫箟錛?br> #define _tWinMain WinMain
鍙緇忚繃榪欐牱鐨勫畯瀹氫箟鍚庯紝灝卞彲浠ラ傚簲涓嶅悓瀛楃瀹藉害鐨勫嚱鏁版帴鍙d簡銆?/p>
濂斤紝鐪嬪嚱鏁伴噷闈€?br>鍑芥暟閲岄潰絎竴鍙ュ張鏄竴涓畯錛屾檿...鎬庝箞鑰佹槸瀹?..涓嶈繃瑕佸湪Windows緙栫▼錛屽繀欏葷埍涓婂畠銆?br>榪欎釜瀹忎笌Windows API鏃犲叧錛孶NREFERENCED_PARAMETER 灞曞紑浼犻掔殑鍙傛暟鎴栬〃杈懼紡錛屽叾鐩殑鏄伩鍏嶇紪璇戝櫒鍏充簬鏈紩鐢ㄥ弬鏁扮殑璀﹀憡銆傚綋鐒朵綘涔熷彲浠ュ湪緙栬瘧鍣ㄥ睘鎬ч偅閲?br>淇敼緙栬瘧鐨勮鍛婄駭鍒?br>渚嬪瓙涓殑4鍙ュ畯錛屽氨鏄負(fù)浜嗗叧鎺夌紪璇戝櫒瀵筗inMain鍑芥暟4涓弬鏁版湭寮曠敤鐨勬姤閿欍傞伩鍏嶄簡鍑犱釜璀﹀憡鐨勪駭鐢燂紝鍛靛懙銆傘傘?/p>
GetDesktopWindow榪欎釜璇ヤ笉鏄畯浜嗗惂錛屽搱鍝堛傘傘?br>MSDN涓婅錛歍he GetDesktopWindow function returns a handle to the desktop window. The desktop window covers the entire screen.
The desktop window is the area on top of which other windows are painted.
榪欎釜鍑芥暟榪斿洖浜嗘闈㈢殑Handle錛屾闈㈠ぇ瀹墮兘鐭ラ亾鍚э紵
MessageBox鎯充笉鍒頒篃鏄竴涓畯錛屽畠鐨勫畾涔夋槸錛?br>#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
寰堟槑鏄炬槸涓轟簡鍏煎瀛楃闆嗗弬鏁拌屽畾涔夌殑銆傞毦閬揥indows API鍑芥暟鐨勫弬鏁版湁瀛楃涓茬殑錛岄兘鏄竴涓畯鍚楋紵
MessageBox鍙兘瑙佸緱寰堝錛屾渶鎬曠殑澶ф灝辨槸“璀﹀憡錛氬唴瀛樺嚭閿欙紝紼嬪簭閫鍑?#8221;浜嗐?br>榪欐槸MessageBox鍑芥暟鐨勫0鏄?br>int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
鍙傛暟涓hWnd鏄竴涓狧WND錛屽畠鏄繖涓狹essageBox灞炰簬鐨勭獥鍙g殑HWND,濡傛灉瀹冧負(fù)NULL,鍒橫essageBox涓嶅睘浜庝換浣曚竴涓獥鍙c?br>鍙傛暟浜宭pText鏄繖涓狹essageBox鏄劇ず鐨勬秷鎭唴瀹癸紝涓轟簡榪庡悎Microsoft鐨勫ソ鎰忥紝鎴戜滑閮藉簲璇ョ敤瀹忔潵浼犲叆鍙傛暟錛屾潵鍏煎瀛楃涓層?br>鍙傛暟涓塴pCaption鏄繖涓狹essageBox鐨勬爣棰樺唴瀹廣?br>鍙傛暟鍥泆Type鍒欐槸榪欎釜MessageBox鐨勭被鍨嬶紝瀹冨彲浠ユ敼鍙樻暣涓狹essageBox鐨勮涓哄拰鏍峰紡鍝︺傚畠鏄竴緇勭鍙鋒爣璇?flags),濡傦細(xì)MB_OK銆傚彲浠ョ敤"|"鎿嶄綔絎︽潵榪涜緇勫悎
榪斿洖鍊煎憿錛熷綋鐒舵槸浣犲湪MessageBox涓婄殑鎿嶄綔鍟︺傝繑鍥炲間竴鑸敤瀹忔潵琛ㄧず錛屽錛欼DABORT錛孖DOK銆?/p>
·鐗瑰埆璇存槑
1. 鍦ㄩ粯璁ゆ儏鍐典笅錛岄噰鐢╛_cdecl鏂瑰紡,鍥犳鍙互鐪佺暐.
2. WINAPI涓鑸敤浜庝慨楗板姩鎬侀摼鎺ュ簱涓鍑哄嚱鏁?br>3. CALLBACK浠呯敤浜庝慨楗板洖璋冨嚱鏁?br>4. 浣犲彲鑳藉凡緇忓彂鐜幫紝VC涓嬪拰BCB涓嬪WINAPI鐨勫畾涔変笉鍚岋紝閭d箞浣犺嚦灝戠悊瑙d簡
涓轟粈涔堜笉鑳界洿鎺ヤ粠BCB涓嬭皟鐢╒C鐨刣ll鐨勪竴涓師鍥犱簡銆?br>
涓嶆煡涓嶇煡閬擄紝涓鏌ュ悡涓璺籌紝鎬庝箞閭d箞澶氳鍒欑殑錛熸暣鐞嗕簡涓涓嬫濊礬錛屽叾瀹炲茍涓嶅鏉傘?br>VC榛樿鐨勬槸_cdecl鏂瑰紡錛學(xué)in32 API鍑芥暟鏄敤_stdcall鏂瑰紡鐨勶紝浠栦滑閮芥槸灝嗗嚱鏁板弬鏁頒粠鍙沖埌宸﹀叆鏍堢殑銆?br>_cdecl鏂瑰紡鐨勬瘡涓嚱鏁伴兘鏈夋竻鐞嗗爢鏍堢殑浠g爜錛屽彲浠ュ疄鐜板彲鍙樺弬鏁板垪琛紝浣嗗彲鎵ц鏂囦歡澶у皬姣旇緝澶с俖stdcall鏂瑰紡鏄皟鐢ㄨ呮竻鐞嗗爢鏍堢殑銆?br>_fastcall鐨勭壒鐐規(guī)槸瀹冨皢鍙傛暟宸﹁竟鐨勪袱涓弬鏁版斁鍦ㄥ瘎瀛樺櫒涓婏紝姣旇緝蹇傚叾浣欏弬鏁拌繕鏄湪鍫嗘爤涓紝鍫嗘爤榪樻槸鐢卞嚱鏁拌嚜宸辨竻闄ゃ?br>鍏跺畠?yōu)兏嶅お娓呮浜嗐?/p>
濂斤紝璇ョ湅鐪嬪嚱鏁扮殑鍙傛暟浜嗭紝hInstance鏄綋鍓嶅簲鐢ㄧ▼搴忓疄渚嬬殑Handle.
絎簩涓弬鏁癶PrevInstance搴旂敤紼嬪簭涓婁竴涓疄渚嬬殑Handle銆侻SDN璇達(dá)細(xì)濡傛灉浣犺鐭ラ亾搴旂敤紼嬪簭鏄惁鏈夊彟涓涓疄渚嬶紝寤鴻浣跨敤Mutex錛堜簰鏂ヤ綋錛夋潵瀹炵幇銆傛鏃訛紝鎴戞兂鍒頒簡
鍗曚緥妯″紡錛岀敤Mutex鏉ュ疄鐜板彧榪愯涓涓疄渚嬨?br>絎笁涓弬鏁發(fā)pCmdLine鏄竴涓瓧絎︿覆錛屾槸鍛戒護(hù)琛屽弬鏁般?br>絎洓涓弬鏁皀CmdShow鏄竴涓猧nt錛屾寚鏄嶹indow搴旇鎬庝箞鐜板疄錛學(xué)indows瀹氫箟浜嗕竴緋誨垪瀹忥紝鏉ュ府鍔╄蹇嗭紝浠W寮澶達(dá)紝濡傦細(xì)SW_SHOW
鏈鍚庢槸榪斿洖鍊鹼紝瀹冩槸涓涓猧nt銆?br>MSDN璇達(dá)細(xì)If the function succeeds, terminating when it receives a WM_QUIT message, it should return the exit value contained in that message's wParam parameter. If the function terminates before entering the message loop, it should return zero.
濡傛灉瀹冩垚鍔熺殑璇濓紝瀹冧細(xì)涓鐩磋繍琛岋紝鐭ラ亾鏀跺埌WM_QUIT娑堟伅錛屽畠搴旇榪斿洖娑堟伅鐨剋Param鍙傛暟鐨勯鍑哄箋傚鏋滃嚱鏁板湪榪涘叆娑堟伅寰幆鍓嶉鍑猴紝瀹冨簲璇ヨ繑鍥?銆?br>