锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜欧美视频,亚洲在线第一页,亚洲国产成人精品久久 http://m.shnenglu.com/cppblog/category/2192.html鏃?闄?椋?鍏?灝?鍦?鎴?蹇?寮?鍧?/description>zh-cn Tue, 20 May 2008 00:29:33 GMT Tue, 20 May 2008 00:29:33 GMT 60 銆奦C++鍔ㄦ侀摼鎺ュ簱娣卞叆嫻呭嚭銆嬪涔犵瑪璁頒箣Non-MFC DLL(闈?MFC 鍔ㄦ佸簱) http://m.shnenglu.com/cppblog/archive/2007/02/05/18356.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Mon, 05 Feb 2007 12:20:00 GMT http://m.shnenglu.com/cppblog/archive/2007/02/05/18356.html http://m.shnenglu.com/cppblog/comments/18356.html http://m.shnenglu.com/cppblog/archive/2007/02/05/18356.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/18356.html http://m.shnenglu.com/cppblog/services/trackbacks/18356.html 闈欐侀摼鎺ュ簱涓庡姩鎬侀摼鎺ュ簱鎬諱綋鍖哄埆錛?br />聽 聽聽聽聽聽聽聽 闈欐侀摼鎺ュ簱涓庡姩鎬侀摼鎺ュ簱閮芥槸鍏變韓浠g爜鐨勬柟寮忥紝濡傛灉閲囩敤闈欐侀摼鎺ュ簱錛屽垯鏃犺浣犳効涓嶆効鎰忥紝lib 涓殑鎸囦護閮藉叏閮ㄨ鐩存帴鍖呭惈鍦ㄦ渶緇堢敓鎴愮殑 EXE 鏂囦歡涓簡銆備絾鏄嫢浣跨敤 DLL錛岃 DLL 涓嶅繀琚寘鍚湪鏈緇?EXE 鏂囦歡涓紝EXE 鏂囦歡鎵ц鏃跺彲浠モ滃姩鎬佲濆湴寮曠敤鍜屽嵏杞借繖涓笌 EXE 鐙珛鐨?DLL 鏂囦歡銆傞潤鎬侀摼鎺ュ簱鍜屽姩鎬侀摼鎺ュ簱鐨勫彟澶栦竴涓尯鍒湪浜庨潤鎬侀摼鎺ュ簱涓笉鑳藉啀鍖呭惈鍏朵粬鐨勫姩鎬侀摼鎺ュ簱鎴栬呴潤鎬佸簱錛岃屽湪鍔ㄦ侀摼鎺ュ簱涓繕鍙互鍐嶅寘鍚叾浠栫殑鍔ㄦ佹垨闈欐侀摼鎺ュ簱銆傞潤鎬侀摼鎺ュ簱涓庨潤鎬侀摼鎺ュ簱璋冪敤瑙勫垯鎬諱綋姣旇緝濡備笅銆?/p>
瀵逛簬闈欐侀摼鎺ュ簱(姣旇緝綆鍗?錛?br />棣栧厛錛岄潤鎬侀摼鎺ュ簱鐨勪嬌鐢ㄩ渶瑕佸簱鐨勫紑鍙戣呮彁渚涚敓鎴愬簱鐨?h澶存枃浠跺拰.lib鏂囦歡銆?br /> 鐢熸垚搴撶殑.h澶存枃浠朵腑鐨勫0鏄庢牸寮忓涓嬶細 extern "C" 鍑芥暟榪斿洖綾誨瀷 鍑芥暟鍚?鍙傛暟琛?; 鍦ㄨ皟鐢ㄧ▼搴忕殑.cpp婧愪唬鐮佹枃浠朵腑濡備笅錛?br />#include "..\lib.h" #pragma comment(lib,"..\\debug\\libTest.lib") //鎸囧畾涓庨潤鎬佸簱涓璧烽摼鎺?br /> 絎簩錛屽洜涓洪潤鎬侀摼鎺ュ簱鏄皢鍏ㄩ儴鎸囦護閮藉寘鍚叆璋冪敤紼嬪簭鐢熸垚鐨凟XE鏂囦歡涓傚洜姝ゅ鏋滅敤鐨勬槸闈欐侀摼鎺ュ簱錛岄偅涔堜篃灝變笉瀛樺湪鈥滃鍑烘煇涓嚱鏁版彁渚涚粰鐢ㄦ埛浣跨敤鈥濈殑鎯呭喌錛岃鎯崇敤灝卞緱鍏ㄨ錛佽涓嶅氨閮藉埆瑕侊紒:)
瀵逛簬鍔ㄦ侀摼鎺ュ簱錛?br />鍔ㄦ侀摼鎺ュ簱鐨勪嬌鐢ㄩ渶瑕佸簱鐨勫紑鍙戣呮彁渚涚敓鎴愮殑.lib鏂囦歡鍜?dll鏂囦歡銆傛垨鑰呭彧鎻愪緵dll鏂囦歡銆?br />棣栧厛鎴戜滑蹇呴』鍏堟敞鎰忓埌DLL鍐呯殑鍑芥暟鍒嗕負涓ょ錛? (1)DLL 瀵煎嚭鍑芥暟錛屽彲渚涘簲鐢ㄧ▼搴忚皟鐢紱 (2)DLL 鍐呴儴鍑芥暟錛屽彧鑳藉湪 DLL 紼嬪簭浣跨敤錛屽簲鐢ㄧ▼搴忔棤娉曡皟鐢ㄥ畠浠?br />鍥犳璋冪敤紼嬪簭鑻ユ兂璋冪敤DLL涓殑鏌愪釜鍑芥暟灝辮浠ユ煇縐嶅艦寮忔垨鏂瑰紡鎸囨槑瀹冨埌搴曟兂璋冪敤鍝竴涓嚱鏁般?/p>
鍥犳榪欓噷琛嶇敓鍑轟袱涓棶棰橈細 絎竴錛氬浣曡皟鐢紵鍗寵皟鐢ㄧ殑鏂瑰紡 絎簩錛氫笉鍚岃皟鐢ㄦ柟寮忓搴旂殑搴撶殑鐢熸垚榪囩▼鍜岃皟鐢ㄨ鍒?/p>
鎴戦愭灞曞紑闂銆?br />絎竴錛屽瓨鍦ㄤ袱縐嶈皟鐢ㄦ柟寮忊斺斿姩鎬佽皟鐢ㄥ拰闈欐佽皟鐢?br />絎簩錛屼袱縐嶈皟鐢ㄦ柟寮忕殑搴撶殑鐢熸垚榪囩▼鍜岃皟鐢ㄨ鍒?br />1銆夊姩鎬佽皟鐢?br /> 鐢熸垚搴撶殑.h澶存枃浠朵腑鐨勫0鏄庢牸寮忓涓嬶細 extern "C" 鍑芥暟榪斿洖綾誨瀷 __declspec(dllexport) 鍑芥暟鍚?鍙傛暟琛?; 鍦ㄨ皟鐢ㄧ▼搴忕殑.cpp婧愪唬鐮佹枃浠朵腑鎸夊涓嬫祦紼嬭皟鐢細 鍦╩ain鍑芥暟浠g爜鐨勫紑濮嬪 瀹氫箟闇瑕佺殑DLL妯″潡鐨勫彞鏌勫拰姝LL妯″潡妯″潡涓渶瑕佽皟鐢ㄧ殑鍑芥暟鐨勫嚱鏁版寚閽堛?br />瀹氫箟濂藉悗绱ф帴鐫灝辨槸鏍囧噯鐨勪笁閮ㄦ洸錛?br />鍙栧緱闇瑕佺殑DLL妯″潡------>榪斿洖妯″潡鍙ユ焺 LoadLibrary("DLL妯″潡璺緞") 鍙栧緱闇瑕佺殑鍑芥暟鍦板潃鈥斺斺?gt;榪斿洖鍑芥暟鎸囬拡GetProcAddress(妯″潡鍙ユ焺錛?鍑芥暟鍚?) 浠庡唴瀛樹腑鍗歌澆DLL妯″潡鈥斺斺?gt;FreeLibrary(妯″潡鍙ユ焺) 2>闈欐佽皟鐢?br />鍦ㄨ皟鐢ㄧ▼搴忕殑.cpp婧愪唬鐮佹枃浠朵腑鎸夊涓嬫祦紼嬭皟鐢細 #include......... 鍛婅瘔緙栬瘧鍣ㄤ笌 DLL 鐩稿搴旂殑.lib 鏂囦歡鎵鍦ㄧ殑璺緞鍙婃枃浠跺悕 #pragma comment(lib,"璺緞鍜屾枃浠跺悕") extern "C" 鍑芥暟榪斿洖綾誨瀷 _declspec(dllimport) 鍑芥暟鍚?鍙傛暟琛?鍒嗗彿 int main() { .............. } 鏈畬錛屽緟緇?......
]]> 杞創錛歏C++涓浜庡鐞嗘秷鎭殑瀛︿範鎬葷粨 http://m.shnenglu.com/cppblog/archive/2006/07/20/10248.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 03:25:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10248.html http://m.shnenglu.com/cppblog/comments/10248.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10248.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/10248.html http://m.shnenglu.com/cppblog/services/trackbacks/10248.html Message Map
struct AFX_MSGMAP //娑堟伅鏄犲皠琛?br />{ AFX_MSGMAP* pBaseMessageMap; //鍩虹被娑堟伅鏄犲皠琛ㄧ殑鎸囬拡錛?br />AFX_MSGMAP_ENTRY* lpEntries; //娑堟伅鍏ュ彛琛ㄧ殑鎸囬拡錛?br />};
struct AFX_MSGMAP_ENTRY //娑堟伅鏄犲皠鍏ュ彛琛?br />{ UINT nMessage; //娑堟伅錛?br />UINT nCode; //鎺т歡鐨勯氱煡鐮佹垨WM_NOTIFY鐨勯氱煡鐮?br />UINT nID; //鎺т歡鐨処D錛?0鏃朵負 Window 娑堟伅) UINT nLastID; //鏈鍚庝竴涓帶浠剁殑ID錛?br />UINT nSig; //淇″彿綾誨瀷錛?br />AFX_PMSG pfn; //娑堟伅鍑芥暟鐨勬寚閽堬紱 };
typedef void (CCmdTarget::*AFX_PMSG)(void); //娑堟伅鏄犲皠鍑芥暟錛?/p>
涓銆佹秷鎭槧灝勫浘 1銆丏ECLARE_MESSAGE_MAP() 灞曞紑錛?br />static AFX_MSGMAP_ENTRY _messageEntries[] //娑堟伅鏄犲皠鍏ュ彛琛? static AFX_MSGMAP messageMap錛?//娑堟伅鏄犲皠琛紱 virtual AFX_MSGMAP* GetMessageMap() const錛?/榪斿洖娑堟伅鏄犲皠 琛ㄧ殑鎸囬拡錛?/p>
2銆丅EGIN_MESSAGE_MAP(class_name,base_class_name) 鈶犮佸畾涔塆etMessageMap()鍑芥暟錛屼唬鐮佸涓嬶細 { return &class_name::messageMap錛泒 鈶°佸垵濮嬪寲娑堟伅鏄犲皠琛紝浠g爜濡備笅錛?br />AFX_MSGMAP class_name::messageMap={ &(base_class_name::messageMap)錛?br />&(class_name::_messageEntries) } 鈶€佸垵濮嬪寲娑堟伅鍏ュ彛琛?br />AFX_MSGMAP_ENTRY class_name::_messageEntries[]={ //鍦ㄨ繖閲屾坊鍔犳秷鎭拰鏄犲皠鍑芥暟錛?/p>
3銆丒ND_MESSAGE_MAP() {0,0,0,0,AfxSig_end,(AFX_PMSG)0} } 錛?//璇ユ嫭鍙峰拰鈶㈢浉瀵瑰簲錛?/p>
浜屻佹秷鎭被鍨?br />1銆佸懡浠ゆ秷鎭?WM_COMMAND) 鎵鏈夋淳鐢熻嚜 CCmdTarget 鐨勭被閮芥湁璧勬牸鎺ュ彈WM_COMMAND銆?/p>
2銆乄indow娑堟伅(WM_xxx) 鎵鏈夋淳鐢熻嚜 CWnd 鐨勭被閮芥湁璧勬牸鎺ュ彈 WM_xxx銆?/p>
3銆佹帶浠舵秷鎭?WM_NOTIFY) 鎺т歡鍚戝叾鐖剁獥鍙i氱煡娑堟伅銆?/p>
涓夈佹秷鎭鐞?br />1銆乄M_xxx 娑堟伅澶勭悊 紿楀彛綾?鑷韓)澶勭悊鈫掑熀綾誨鐞嗏啋CWnd鈭稤efWindowProc()澶勭悊錛?br />鍏舵墍瀵瑰簲鐨勫畯涓鑸負鍦ㄦ秷鎭?WM_ 鍓嶉潰鍔犱笂 ON_銆?/p>
2銆佸懡浠ゆ秷鎭鐞?br />鍛戒護娑堟伅鏉ヨ嚜鍛戒護鐢ㄦ埛鎺ュ彛瀵硅薄(鑿滃崟銆佸姞閫熼敭鎴栧伐鍏鋒爮鎸夐挳)鍙戝嚭鐨刉M_COMMAND娑堟伅錛?br />銏犮乄M_COMMAND娑堟伅 鍏舵墍鍖呭惈鐨勭被鍨嬪拰瀵瑰簲鐨勫畯濡備笅錛?br />鈶犮丱N_COMMAND(ID,pfn) 鏍囧噯鐨勫懡浠ゆ秷鎭紱
鈶°丱N_COMMAND_EX(ID,pfn) 澶氫釜瀵硅薄瀵瑰悓涓涓懡浠?ID 鐨勫鐞嗭紱 鍏跺嚱鏁扮殑鍘熷瀷濡備笅錛?br />afx_msg BOOL pfn(UINT nID) 璇存槑錛?br />褰撹繑鍥?TRUE 鏃惰〃紺哄凡緇忓鐞嗭紝涓嶇敤鍦ㄦ秷鎭鐞嗛摼涓戶緇鐞嗚鍛戒護錛涗負 FALSE 鏃惰〃紺虹戶緇湪娑堟伅澶勭悊閾句腑澶勭悊璇ュ懡浠ゃ?br />娉ㄦ剰錛?br />鍏朵竴錛氬湪澶氬璞″鐞嗕腑涓瀹氳浣跨敤璇ュ畯錛?br />鍏朵簩錛歱fn(UINT nID)(娑堟伅澶勭悊鍑芥暟)榪斿洖鍊煎皢鍏剁被鍨媣oid鏀規垚BOOL錛岃屼笖蹇呴』涓篎ALSE錛?br />鍏朵笁錛氬涓璞$殑澶勭悊鏄敱楂樺眰鍚戜綆灞傜殑榪囩▼錛氬嵆瑙嗗浘綾燴啋涓繪鏋剁獥鍙g被鈫掑簲鐢ㄧ▼搴忕被錛?/p>
鈶€丱N_COMMAND_RANGE(nID,nLastID,pfn) 澶氫釜鍛戒護 ID 鎻愪緵鐩稿悓鐨勫鐞嗭紱 娉ㄦ剰錛?br />鍏朵竴錛氱‘淇漬ID銆乶LastID鐨勫煎湪 Resource.h 涓槸榪炵畫鐨勩?br />鍏朵簩錛氫竴鑸湪鍑芥暟 pfn(UINT nID) 涓姞鍏ュ弬鏁幫紝鐢ㄦ潵紜畾閭d竴涓寜閽偣鍑匯?/p>
銏°丆N_UPDATE_COMMAND_UI娑堟伅 褰撹彍鍗曢」銆佸伐鍏鋒爮鎸夐挳絳塠鍛戒護鐢ㄦ埛鎺ュ彛瀵硅薄]瑕佹洿鏂板叾鐘舵佹椂鎵瀵瑰簲鐨勬秷鎭紝瀹冩墍鍖呭惈鐨勭被鍨嬪拰瀵瑰簲鐨勫畯濡備笅錛?br />鈶犮丱N_UPDATE_COMMAND_UI(ID,pfn) 鍏朵腑鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg void pfn(CCmdUI* pCmdUI)
鈶°丱N_UPDATE_COMMAND_UI_RANGE(nID,nLastID,pfn) 璇ュ嚱鏁板彲浠ュ鐞嗕竴緇刐鍛戒護鐢ㄦ埛鎺ュ彛瀵硅薄]鐨勫瑙傦紱 鍏朵腑鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg void pfn(CCmdUI* pCmdUI) 閲嶈錛?br />CCmdUI 涓殑 m_nID 鎴愬憳琛ㄧず涓嶅悓鐨?ID錛屽洜姝ゅ彲浠ュ埄鐢ㄥ畠鏉ヨ繘琛屽尯鍒鐞嗐?/p>
3銆佹帶浠剁殑閫氱煡娑堟伅 浠庢帶浠跺拰瀛愮獥鍙e彂閫佸埌鐖剁獥鍙g殑WM_COMMAND閫氱煡娑堟伅(鍗沖湪鍙戦佸懡浠ゆ秷鎭腑鍔犲叆鎺т歡鐨勯氱煡鐮?銆?br />娉ㄦ剰錛氬湪 Window9x 鏂版帶浠朵腑涓嶅啀浼犻乄M_COMMAND閫氱煡娑堟伅錛岃屾槸鍙戦?WM_NOTIFY 娑堟伅錛屼絾涓轟簡鍏煎錛屾棫鏈夌殑鎺т歡榪樻槸浼犻乄M_COMMAND娑堟伅銆?br />渚嬪錛?br />CEdit鎺т歡鍚戠埗紿楀彛鍙戦?EN_CHANGE 閫氱煡浠g爜鐨刉M_COMMAND娑堟伅銆?br />娉ㄦ剰錛氭鏋跺儚浼犻佸叾瀹?WM_ 娑堟伅涓鏍蜂紶閫侀氱煡娑堟伅錛屼絾鏈変竴涓緥澶栵紝鍗崇敱 [鎸夐挳] 鎺т歡鍙戦佺殑 BN_CLICKED 閫氱煡娑堟伅錛岃浣滀負鍛戒護娑堟伅鐗瑰埆澶勭悊銆?br />銏犮乄M_COMMAND 鍏舵墍瀵瑰簲鐨勫畯濡備笅錛?br />鈶犮丱N_CONTROL(閫氱煡鐮? nID,fn) 鈶°丱N_CONTROL_RANGE(閫氱煡鐮? nFirstID,nEndID,fn) 娉ㄦ剰錛?br />榪欎袱涓畯鐨勫簲鐢ㄥ拰 ON_COMMAND銆丱N_COMMAND_RANGE鐩稿悓錛屾墍涓嶅悓鐨勬槸鍦ㄥ畯鍓嶉潰鍔犲叆[閫氱煡鐮乚銆?br />娉ㄦ剰錛氬彲浠ユ牴鎹笉鍚岀殑鎺т歡鐨刐閫氱煡鐮乚媧劇敓鍑虹壒瀹氱殑瀹忥紝鍏舵墍媧劇敓鐨勫畯涓鑸負鍦?[閫氱煡鐮乚 鍓嶉潰鍔犱笂 ON_銆?br />銏°乄M_NOTIFY 鍏舵墍瀵瑰簲鐨勫畯濡備笅錛?br />鈶犮丱N_NOTIFY(閫氱煡鐮? nID,fn) 鍏朵腑鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg void fn(NMHDR* pNotifyStruct,LRESULT* result) 鍏朵腑緇撴瀯錛?br />typedef struct tagNMHDR { HWND hwndFrom; //鍙戦侀氱煡娑堟伅鐨勬帶浠剁殑鍙ユ焺錛?br />UINT idFrom; //鍙戦侀氱煡娑堟伅鐨勬帶浠剁殑 ID錛?br />UINT code; //閫氱煡鐮侊紱 } NMHDR;
鈶°丱N_NOTIFY_EX(閫氱煡鐮? nID,fn) 琛ㄧず涓涓秷鎭湪澶氫釜瀵硅薄鐨勬垚鍛樺嚱鏁頒腑榪涜澶勭悊銆?br />鍏朵腑鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg BOOL fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result) 璇存槑錛?br />瀹冨繀欏昏繑鍥?BOOL 綾誨瀷鐨勬暟鍊鹼紝鍏舵剰涔夊拰 ON_COMMAND_EX 鐩稿悓銆?/p>
鈶€丱N_NOTIFY_RANGE(閫氱煡鐮? nFirstID,nEnd,fn) 琛ㄧず澶氫釜鎺т歡鐨勯氱煡娑堟伅鍦ㄥ悓涓涓嚱鏁頒腑榪涜澶勭悊銆?br />鍏朵腑鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg void fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result) 璇存槑錛?br />鍏舵剰涔夊拰ON_COMMAND_RANGE鐩稿悓銆?/p>
4銆佸弽灝勬秷鎭鐞?br />鐖剁獥鍙e湪澶勭悊鎺т歡紿楀彛鐨勯氱煡娑堟伅WM_CTLCOLOR銆乄M_COMMAND銆乄M_NOTIFY鏃訛紝浼氭妸璇ユ秷鎭漿鍖栦負鍙嶅皠娑堟伅錛屽茍杞氦緇欐帶浠跺瓙紿楀彛澶勭悊錛屽彧鏈夊湪鎺т歡瀛愮獥浣撲笉澶勭悊璇ユ秷鎭椂錛岀埗紿楀彛鎵嶆湁鏈轟細澶勭悊銆?br />娉ㄦ剰錛氬湪綾葷殑灞炴у璇濇涓殑娑堟伅欏甸潰鍙煡鍙嶅皠娑堟伅(鍓嶉潰鏈?="鏍囧織) 鈶犮乄M_CTLCOLOR_REFLECT鍙嶅皠娑堟伅 鍏舵墍瀵瑰簲鐨勫畯濡備笅錛?br />ON_WM_CTLCOLOR_REFLECT() 鍙嶅皠娑堟伅鍑芥暟鐨勫師鍨嬶細 HBRUSH class_name鈭稢tlColor(CDC* pDC,UINT nCtlColor) { return NULL; } 璇ュ嚱鏁扮敤鏉ラ噸緗帶浠剁殑欏旇壊錛涙敞鎰忥細蹇呴』 return CBrush鎵嶆湁鏁堛?/p>
5銆佽嚜瀹氫箟鐨勭獥鍙f秷鎭?br />鑷畾涔夌獥鍙f秷鎭殑娑堟伅鏍囧織閮藉ぇ浜嶹M_USER(鑷沖皯鏄疻M_USER+100錛屽洜涓鴻澶氭帶浠墮兘浣跨敤榪欎竴鑼冨洿鐨刉M_USER娑堟伅) 浣跨敤鑷畾涔夌殑娑堟伅鍒嗕負浜屾錛?br />鈶犮佸湪 Resource.h 涓畾涔夋秷鎭爣璁?br />#define WM_MYMSG (WM_USER+1000)
鈶°佸湪娑堟伅鏄犲皠琛ㄤ腑鍔犲叆娑堟伅鏄犲皠瀹?br />BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,fn) END_MESSAGE_MAP() 璇存槑錛?br />鍏跺搴旂殑瀹忎負 ON_MESSAGE()錛屽叾鎴愬憳鍑芥暟鐨勫師鍨嬩負錛?br />afx_msg LRESULT fn(WPARAM,LPARAM)
6銆佺櫥璁版秷鎭?br />鈶犮佸湪緋葷粺涓敞鍐屽茍鑾峰彇涓涓櫥璁版秷鎭殑娑堟伅鏍囪 UINT RegisterWindowMessage(LPCTSTR) 璇存槑錛?br />閫氳繃 API 鍑芥暟鏉ユ敞鍐屾秷鎭爣璁幫紝鍏朵腑 LPCTSTR 涓虹敤鎴風殑浠繪剰瀛楃涓層備緥濡傦細 UINT WM_MYMSG=RegisterWindowMessage("MYMSG"); 鍏朵腑 WM_MYMSG 鏄嚜瀹氫箟鏃犵鍙鋒暣鍨嬬殑娑堟伅鏍囪銆?/p>
鈶°佸湪娑堟伅鏄犲皠琛ㄤ腑鍔犲叆娑堟伅鏄犲皠瀹?br />BEGIN_MESSAGE_MAP()
ON_REGISTERED_MESSAGE(WM_MYMSG,fn) END_MESSAGE_MAP() 璇存槑錛?br />鍏跺搴旂殑瀹忎負 ON_REGISTERED_MESSAGE()錛屽叾鎴愬憳鍑芥暟鐨勫師鍨嬩負錛?br />afx_msg LRESULT fn(WPARAM,LPARAM) 娉ㄦ剰錛氱櫥璁版秷鎭彲浠ュ疄鐜拌法榪涚▼鐨勬暟鎹氳銆?/p>
7銆佺嚎紼嬫秷鎭?br />鍙湁緇ф壙鑷狢WinThread綾繪墠鑳藉厑璁稿鐞嗙嚎紼嬫秷鎭?br />鈶犮佸畾涔夌嚎紼嬬殑娑堟伅鏍囪 鏈変袱縐嶆柟娉曪細 (1)銆佷嬌鐢ㄨ嚜瀹氫箟鐨勬秷鎭爣璁幫紝鍗籌細WM_USER錛?br />(2)銆佷嬌鐢ㄧ櫥璁扮殑娑堟伅鏍囪錛屽嵆錛歊egisterWindowMessage錛?/p>
鈶°佸湪CWinThread緇ф壙綾葷殑娑堟伅鏄犲皠琛ㄤ腑娣誨姞瀹?br />ON_THREAD_MESSAGE(娑堟伅鏍囪,fn) //鑷畾涔夌殑娑堟伅錛?br />ON_REGISTERED_THREAD_MESSAGE(娑堟伅鏍囪,fn) //鐧昏鐨?//娑堟伅 鈶€佸叾鍑芥暟鐨勫師鍨嬪涓嬶細 afx_msg void fn(WPARAM wPARAM,LPARAM lParam)
鈶c佸紩鍙戠嚎紼嬫秷鎭?br />綰跨▼娑堟伅鐨勫紩鍙戝繀欏昏皟鐢?CWinThread 綾葷殑PostThreadMessage灝嗘秷鎭姇閫掑埌綰跨▼娑堟伅闃熷垪涓?br />娉ㄦ剰錛氬彲浠ラ氳繃 AfxGetApp() 鍑芥暟鑾峰彇涓涓叏灞鐨勫簲鐢ㄥ璞°?br />PostThreadMessage(UINT,WPARAM,LPARAM)
8銆乄M_COPYDATA 鎿嶄綔緋葷粺緇存姢涓鍧楀唴瀛樻潵綆$悊 WM_COPYDATA 娑堟伅錛岃娑堟伅涓昏鐢ㄤ簬璺ㄨ繘紼嬩紶閫掓暟鎹紝浼犻掔殑鏁版嵁閲忚揪鍒?232銆?br />鈶犮佸畾涔変竴涓?COPYDATASTRUCT 鏁版嵁緇撴瀯 typedef struct tagCOPYDATASTRUCT { DWORD dwData; //鑷畾涔夌殑鐗規畩鏁版嵁錛?br />DWORD cbData; //浠ュ瓧鑺備負鍗曚綅鐨?lpData 鐨勫ぇ灝忥紱 PVOID lpData; //浼犻佺殑鏁版嵁鍐呭瓨鍧楃殑鎸囬拡錛?br />} COPYDATASTRUCT;
鈶°佸叾鎵瀵瑰簲鐨勫畯 ON_WM_COPYDATA()
鈶€佸叾鎵瀵瑰簲鐨勫嚱鏁扮殑鍘熷瀷 afx_msg BOOL OnCopyData(CWnd*,COPYDATASTRUCT*) 璇存槑錛?br />CWnd*錛氬彂閫佽娑堟伅鐨勭獥鍙g殑鎸囬拡錛?/p>
9銆佹姇閫掑拰鍙戦佹秷鎭?br />閫氳繃鍚戜竴涓獥浣撴姇閫掓垨鍙戦佹秷鎭紝鍙互闂存帴鍦伴┍鍔ㄧ獥浣撶殑娑堟伅榪囩▼銆?br />鎶曢?PostMessage)錛氬皢娑堟伅鏀懼埌綰跨▼鐨勬秷鎭槦鍒椾腑錛岀劧鍚庝笉絳夌嚎紼嬪鐞嗚娑堟伅灝辯洿鎺ヨ繑鍥炲埌璋冪敤鏂廣?br />鍙戦?SendMessage)錛氬綋涓涓嚎紼嬪悜鐩爣綰跨▼鍙戦佹秷鎭椂錛岃綰跨▼瑕佷竴鐩寸瓑寰咃紝鐩村埌鐩爣綰跨▼澶勭悊浜嗚娑堟伅涓烘銆?br />鈶犮佹姇閫掓秷鎭?br />BOOL CWnd鈭稰ostMessage(UINT,WPARAM=0,LPARAM=0) 璇存槑錛?br />CWnd錛氱洰鏍囩獥鍙o紱 璇ュ嚱鏁板皢涓鏉℃秷鎭斁鍏ュ埌搴旂敤紼嬪簭鐨勬秷鎭槦鍒楋紝鐒跺悗涓嶇瓑紿楀彛澶勭悊灝辯洿鎺ヨ繑鍥炪?/p>
鈶°佸彂閫佹秷鎭?br />LRESULT CWnd鈭稴endMessage(UINT,WPARAM=0,LPARAM=0) 璇存槑錛?br />CWnd錛氱洰鏍囩獥鍙o紱 璇ュ嚱鏁板皢涓鏉℃秷鎭斁鍏ュ埌搴旂敤紼嬪簭鐨勬秷鎭槦鍒楋紝絳夊緟紿楀彛澶勭悊鍚庢墠榪斿洖銆?br />涓轟簡閬垮厤綰跨▼闄峰叆姘鎬箙絳夊緟鐘舵侊紝鍙互鐢⊿endMessageTimeout浠f浛SendMessage錛?br />LRESULT SendMessageTimeout(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR) 璇存槑錛?br />HWND錛氱獥鍙e彞鏌勶紱 UINT錛氭秷鎭彂閫佺殑閫夐」錛屼負SMTO_BLOCK鏃訛紝鍙互闃叉綰跨▼鏃?闄愮瓑寰咃紝鍗蟲牴鎹竴瀹氱殑瓚呮椂鍊艱繑鍥炪?br />UINT錛氳秴鏃訛紝浠ユ縐掍負鍗曚綅錛?br />PDWORD_PTR錛氳繑鍥炲鹼紱 娉ㄦ剰錛欳Wnd娌℃湁瀵硅鍑芥暟鐨勫寘瑁呫?/p>
鈶€佹姇閫掑拰鍙戦佹秷鎭?br />BOOL CWnd鈭稴endNotifyMessage(UINT,WPARAM,LPARAM) 璇存槑錛?br />CWnd錛氱洰鏍囩獥鍙o紱 璇ユ秷鎭叿鏈塖endMessage鍜孭ostMessage涓ょ鍔熻兘錛?br />褰撶洰鏍囩獥鍙e拰鍙戦佺獥鍙d負鍚屼竴涓嚎紼嬫椂錛屽垯鐩稿綋浜嶴endMessage鐨勫姛鑳斤紱鍚﹀垯褰撲笉涓哄悓涓涓嚎紼嬫椂錛屽垯涓篜ostMessage鐨勫姛鑳姐?/p>
6-1銆佹姇閫掑拰鍙戦?WM_XXX 娑堟伅 鍦ㄥ彂閫佹爣鍑嗙殑 WINDOW 娑堟伅鏃訛紝鍙灝嗚娑堟伅鐨?ID銆亀Param銆乴Param鍙傛暟鏀懼湪 SendMessage()鍜孭ostMessage()鍑芥暟鐨勭浉搴斾綅緗嵆鍙?/p>
6-2銆佹姇閫掑拰鍙戦佸懡浠ゆ秷鎭拰鎺т歡鐨勯氱煡娑堟伅 鍦ㄦ姇閫掑拰鍙戦佸懡浠ゆ秷鎭椂錛屾秷鎭殑 ID涓?WM_COMMADN錛岃屽浜庝笉鍚岀殑鑿滃崟欏廣佸姞閫熼敭銆佹帶浠跺垯wParam銆乴Param鐨勫彇鍊間笉鍚屻?br />wParam鍒嗘垚浣庛侀珮涓ら儴鍒嗭紝浣庨儴鍒嗕負鑿滃崟欏廣佸姞閫熼敭銆佹帶浠剁殑ID銆傞珮閮ㄥ垎鍒欙細 鑿滃崟欏癸細0錛涘姞閫熼敭錛?錛涙帶浠訛細閫氱煡鐮?br />lParam錛氬綋鎺т歡鏃舵槸鎺т歡鐨勫彞鏌勶紝鍚﹀垯涓?NULL銆?/p>
瀵逛簬wParam鍙傛暟鍙互閲囩敤鑷畾涔夊畯錛?br />WPARAM MAKEWPARAM(WORD wLow,WORD wHigh)
6-3銆佹姇閫掑拰鍙戦佽嚜瀹氫箟鐨勭獥鍙f秷鎭?br />鍦ㄦ姇閫掑拰鍙戦佽嚜瀹氫箟鐨勭獥鍙f秷鎭椂錛屽弬鏁?wParam銆乴Param 娌℃湁鐗瑰埆鐨勬兜涔夛紝鍙拰鏅氬嚱鏁扮殑褰㈠弬涓鏍瘋繘琛屾暟鎹殑浼犻掋?br />娉ㄦ剰錛?br />PostMessage 鍜?SendMessage 鏄笉鍚岀殑錛屽墠鑰呮姇閫掑悗灝辮繑鍥烇紝鑰屽悗鑰呭繀欏葷瓑鍒版秷鎭鐞嗗悗鍐嶈繑鍥烇紱鎵浠ュ湪鍙傛暟鏄?[灞閮╙ 鎴?[涓存椂]鏃訛紝浣跨敤PostMessage鍑芥暟浼氬紩鍙戦敊璇?闄ら潪鍙傛暟浣跨敤 鎸囬拡錛屽垯鍙伩鍏嶉敊璇?錛岃屽繀欏諱嬌鐢⊿endMessage鍑芥暟銆?br />6-4銆佹姇閫掑拰鍙戦佹敞鍐岀殑紿楀彛娑堟伅 鍜?6-3 鍩烘湰涓鏍鳳紝浣嗗畠瑕佺壒鍒敞鎰忕殑闂鏄細鍦ㄨ法榪涚▼鐨勫鐞嗘秷鎭椂錛屽鏋滃皢娑堟伅PostMessage銆丼endMessage鍒版煇涓繘紼?A錛屽垯蹇呴』鍦ㄨ繘紼?B 涓幏鍙栬繘紼?A 鐨勭獥鍙g被鍚嶏紝騫墮氳繃紿楀彛綾誨悕鑾峰彇紿楀彛鐨勬寚閽堬紝鏈鍚庡啀鏍規嵁鎸囬拡璋冪敤 PostMessage銆丼endMessage 鍑芥暟銆?br />娉ㄦ剰錛氬湪鑾峰彇紿楀彛鐨勬寚閽堟椂錛屽彲浠ユ牴鎹獥鍙g被鍚嶆垨紿楀彛鐨勬爣棰樸?/p>
6-5銆佹姇閫掑拰鍙戦乄M_COPYDATA娑堟伅 SendMessage(娑堟伅鏍囪,WPARAM,LPARAM) 鍏朵腑錛?br />娑堟伅鏍囪錛歐M_COPYDATA錛?br />WPARAM錛氬彂閫佽娑堟伅鐨勭獥鍙e彞鏌勶紱 LPARAM錛欳OPYDATASTRUCT緇撴瀯鐨勬寚閽堬紝鍏堥氳繃(LPVOID)榪涜杞崲錛屽啀閫氳繃(LPARAM)榪涜杞崲錛屽涓嬪艦寮忥細 (LPARAM)(LPVOID)&cds
]]>杞創錛歏C甯哥敤鏁版嵁綾誨瀷浣跨敤杞崲璇﹁В http://m.shnenglu.com/cppblog/archive/2006/07/20/10247.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 03:24:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10247.html http://m.shnenglu.com/cppblog/comments/10247.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10247.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/10247.html http://m.shnenglu.com/cppblog/services/trackbacks/10247.html 鎴戜滑鍏堝畾涔変竴浜涘父瑙佺被鍨嬪彉閲忓熶互璇存槑
int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="紼嬩僵鍚?; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2;
涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓?
鐭暣鍨?int) itoa(i,temp,10);///灝唅杞崲涓哄瓧絎︿覆鏀懼叆temp涓?鏈鍚庝竴涓暟瀛楄〃紺哄崄榪涘埗 itoa(i,temp,2); ///鎸変簩榪涘埗鏂瑰紡杞崲 闀挎暣鍨?long) ltoa(l,temp,10); 嫻偣鏁?float,double) 鐢╢cvt鍙互瀹屾垚杞崲,榪欐槸MSDN涓殑渚嬪瓙: int decimal, sign; char *buffer; double source = 3.1415926535; buffer = _fcvt( source, 7, &decimal, &sign ); 榪愯緇撴灉:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 decimal琛ㄧず灝忔暟鐐圭殑浣嶇疆,sign琛ㄧず絎﹀彿:0涓烘鏁幫紝1涓鴻礋鏁? CString鍙橀噺 str = "2008鍖椾含濂ヨ繍"; buf = (LPSTR)(LPCTSTR)str; BSTR鍙橀噺 BSTR bstrValue = ::SysAllocString(L"紼嬪簭鍛?); char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); AfxMessageBox(buf); delete(buf); CComBSTR鍙橀噺 CComBSTR bstrVar("test"); char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf); delete(buf);
_bstr_t鍙橀噺 _bstr_t綾誨瀷鏄BSTR鐨勫皝瑁咃紝鍥犱負宸茬粡閲嶈澆浜?鎿嶄綔絎︼紝鎵浠ュ緢瀹規槗浣跨敤 _bstr_t bstrVar("test"); const char *buf = bstrVar;///涓嶈淇敼buf涓殑鍐呭 AfxMessageBox(buf);
閫氱敤鏂規硶(閽堝闈濩OM鏁版嵁綾誨瀷) 鐢╯printf瀹屾垚杞崲 char聽 buffer[200]; char聽 c = '1'; int聽聽 i = 35; long聽 j = 1000; float f = 1.7320534f; sprintf( buffer, "%c",c); sprintf( buffer, "%d",i); sprintf( buffer, "%d",j); sprintf( buffer, "%f",f);
浜屻佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨? strcpy(temp,"123");
鐭暣鍨?int) i = atoi(temp); 闀挎暣鍨?long) l = atol(temp); 嫻偣(double) d = atof(temp); CString鍙橀噺 CString name = temp; BSTR鍙橀噺 BSTR bstrValue = ::SysAllocString(L"紼嬪簭鍛?); ...///瀹屾垚瀵筨strValue鐨勪嬌鐢? SysFreeString(bstrValue);
CComBSTR鍙橀噺 CComBSTR綾誨瀷鍙橀噺鍙互鐩存帴璧嬪? CComBSTR bstrVar1("test"); CComBSTR bstrVar2(temp);
_bstr_t鍙橀噺 _bstr_t綾誨瀷鐨勫彉閲忓彲浠ョ洿鎺ヨ祴鍊? _bstr_t bstrVar1("test"); _bstr_t bstrVar2(temp);
涓夈佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString 浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪:
鏁存暟(int) str.Format("%d",i); 嫻偣鏁?float) str.Format("%f",i); 瀛楃涓叉寚閽?char *)絳夊凡緇忚CString鏋勯犲嚱鏁版敮鎸佺殑鏁版嵁綾誨瀷鍙互鐩存帴璧嬪? str = username; 瀵逛簬Format鎵涓嶆敮鎸佺殑鏁版嵁綾誨瀷錛屽彲浠ラ氳繃涓婇潰鎵璇寸殑鍏充簬鍏跺畠鏁版嵁綾誨瀷杞寲鍒癱har *鐨勬柟娉曞厛杞埌char *錛岀劧鍚庤祴鍊肩粰CString鍙橀噺銆?
鍥涖丅STR銆乢bstr_t涓嶤ComBSTR
CComBSTR 鏄疉TL瀵笲STR鐨勫皝瑁咃紝_bstr_t鏄疌++瀵笲STR鐨勫皝瑁?BSTR鏄?2浣嶆寚閽?浣嗗茍涓嶇洿鎺ユ寚鍚戝瓧涓茬殑緙撳啿鍖恒? char *杞崲鍒癇STR鍙互榪欐牱: BSTR b=_com_util::ConvertStringToBSTR("鏁版嵁");///浣跨敤鍓嶉渶瑕佸姞涓奵omutil.h鍜宑omsupp.lib SysFreeString(bstrValue); 鍙嶄箣鍙互浣跨敤 char *p=_com_util::ConvertBSTRToString(b); delete p; 鍏蜂綋鍙互鍙傝冧竴錛屼簩孌佃惤閲岀殑鍏蜂綋璇存槑銆?
CComBSTR涓巁bstr_t瀵瑰ぇ閲忕殑鎿嶄綔絎﹁繘琛屼簡閲嶈澆錛屽彲浠ョ洿鎺ヨ繘琛?,!=,==絳夋搷浣滐紝鎵浠ヤ嬌鐢ㄩ潪甯告柟渚褲? 鐗瑰埆鏄痏bstr_t,寤鴻澶у浣跨敤瀹冦?
浜斻乂ARIANT 銆乢variant_t 涓?COleVariant
VARIANT鐨勭粨鏋勫彲浠ュ弬鑰冨ご鏂囦歡VC98\Include\OAIDL.H涓叧浜庣粨鏋勪綋tagVARIANT鐨勫畾涔夈? 瀵逛簬VARIANT鍙橀噺鐨勮祴鍊鹼細棣栧厛緇檝t鎴愬憳璧嬪鹼紝鎸囨槑鏁版嵁綾誨瀷錛屽啀瀵硅仈鍚堢粨鏋勪腑鐩稿悓鏁版嵁綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓句釜渚嬪瓙錛? VARIANT va; int a=2001; va.vt=VT_I4;///鎸囨槑鏁村瀷鏁版嵁 va.lVal=a; ///璧嬪?
瀵逛簬涓嶉┈涓婅祴鍊肩殑VARIANT錛屾渶濂藉厛鐢╒oid VariantInit(VARIANTARG FAR* pvarg);榪涜鍒濆鍖?鍏舵湰璐ㄦ槸灝唙t璁劇疆涓篤T_EMPTY,涓嬭〃鎴戜滑鍒椾婦vt涓庡父鐢ㄦ暟鎹殑瀵瑰簲鍏崇郴:
Byte bVal;聽 // VT_UI1. Short iVal;聽 // VT_I2. long lVal;聽 // VT_I4. float fltVal;聽 // VT_R4. double dblVal;聽 // VT_R8. VARIANT_BOOL boolVal;聽 // VT_BOOL. SCODE scode;聽 // VT_ERROR. CY cyVal;聽 // VT_CY. DATE date;聽 // VT_DATE. BSTR bstrVal;聽 // VT_BSTR. DECIMAL FAR* pdecVal聽 // VT_BYREF|VT_DECIMAL. IUnknown FAR* punkVal;聽 // VT_UNKNOWN. IDispatch FAR* pdispVal;聽 // VT_DISPATCH. SAFEARRAY FAR* parray;聽 // VT_ARRAY|*. Byte FAR* pbVal;聽 // VT_BYREF|VT_UI1. short FAR* piVal;聽 // VT_BYREF|VT_I2. long FAR* plVal;聽 // VT_BYREF|VT_I4. float FAR* pfltVal;聽 // VT_BYREF|VT_R4. double FAR* pdblVal;聽 // VT_BYREF|VT_R8. VARIANT_BOOL FAR* pboolVal;聽 // VT_BYREF|VT_BOOL. SCODE FAR* pscode;聽 // VT_BYREF|VT_ERROR. CY FAR* pcyVal;聽 // VT_BYREF|VT_CY. DATE FAR* pdate;聽 // VT_BYREF|VT_DATE. BSTR FAR* pbstrVal;聽 // VT_BYREF|VT_BSTR. IUnknown FAR* FAR* ppunkVal;聽 // VT_BYREF|VT_UNKNOWN. IDispatch FAR* FAR* ppdispVal;聽 // VT_BYREF|VT_DISPATCH. SAFEARRAY FAR* FAR* pparray;聽 // VT_ARRAY|*. VARIANT FAR* pvarVal;聽 // VT_BYREF|VT_VARIANT. void FAR* byref;聽 // Generic ByRef. char cVal;聽 // VT_I1. unsigned short uiVal;聽 // VT_UI2. unsigned long ulVal;聽 // VT_UI4. int intVal;聽 // VT_INT. unsigned int uintVal;聽 // VT_UINT. char FAR * pcVal;聽 // VT_BYREF|VT_I1. unsigned short FAR * puiVal;聽 // VT_BYREF|VT_UI2. unsigned long FAR * pulVal;聽 // VT_BYREF|VT_UI4. int FAR * pintVal;聽 // VT_BYREF|VT_INT. unsigned int FAR * puintVal;聽 //VT_BYREF|VT_UINT.
_variant_t鏄疺ARIANT鐨勫皝瑁呯被錛屽叾璧嬪煎彲浠ヤ嬌鐢ㄥ己鍒剁被鍨嬭漿鎹紝鍏舵瀯閫犲嚱鏁頒細鑷姩澶勭悊榪欎簺鏁版嵁綾誨瀷銆? 浣跨敤鏃墮渶鍔犱笂#include 渚嬪錛? long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i;
COleVariant鐨勪嬌鐢ㄤ笌_variant_t鐨勬柟娉曞熀鏈竴鏍鳳紝璇峰弬鑰冨涓嬩緥瀛愶細 COleVariant v3 = "瀛楃涓?, v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal;
鍏佸叾瀹冧竴浜汣OM鏁版嵁綾誨瀷
鏍規嵁ProgID寰楀埌CLSID HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid); CLSID clsid; CLSIDFromProgID( L"MAPI.Folder",&clsid);
鏍規嵁CLSID寰楀埌ProgID WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID); 渚嬪鎴戜滑宸茬粡瀹氫箟浜?CLSID_IApplication,涓嬮潰鐨勪唬鐮佸緱鍒癙rogID LPOLESTR pProgID = 0; ProgIDFromCLSID( CLSID_IApplication,&pProgID); ...///鍙互浣跨敤pProgID CoTaskMemFree(pProgID);//涓嶈蹇樿閲婃斁
涓冦丄NSI涓嶶nicode Unicode縐頒負瀹藉瓧絎﹀瀷瀛椾覆,COM閲屼嬌鐢ㄧ殑閮芥槸Unicode瀛楃涓層?
灝咥NSI杞崲鍒癠nicode (1)閫氳繃L榪欎釜瀹忔潵瀹炵幇錛屼緥濡? CLSIDFromProgID( L"MAPI.Folder",&clsid); (2)閫氳繃MultiByteToWideChar鍑芥暟瀹炵幇杞崲,渚嬪: char *szProgID = "MAPI.Folder"; WCHAR szWideProgID[128]; CLSID clsid; long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID)); szWideProgID[lLen] = '\0'; (3)閫氳繃A2W瀹忔潵瀹炵幇,渚嬪: USES_CONVERSION; CLSIDFromProgID( A2W(szProgID),&clsid); 灝哢nicode杞崲鍒癆NSI (1)浣跨敤WideCharToMultiByte,渚嬪: // 鍋囪宸茬粡鏈変簡涓涓猆nicode 涓?wszSomeString... char szANSIString [MAX_PATH]; WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); (2)浣跨敤W2A瀹忔潵瀹炵幇,渚嬪: USES_CONVERSION; pTemp=W2A(wszSomeString); 鍏佸叾瀹?
瀵規秷鎭殑澶勭悊涓垜浠粡甯擱渶瑕佸皢WPARAM鎴朙PARAM絳?2浣嶆暟鎹紙DWORD)鍒嗚В鎴愪袱涓?6浣嶆暟鎹紙WORD),渚嬪錛? LPARAM lParam; WORD loValue = LOWORD(lParam);///鍙栦綆16浣? WORD hiValue = HIWORD(lParam);///鍙栭珮16浣?
瀵逛簬16浣嶇殑鏁版嵁(WORD)鎴戜滑鍙互鐢ㄥ悓鏍風殑鏂規硶鍒嗚В鎴愰珮浣庝袱涓?浣嶆暟鎹?BYTE),渚嬪: WORD wValue; BYTE loValue = LOBYTE(wValue);///鍙栦綆8浣? BYTE hiValue = HIBYTE(wValue);///鍙栭珮8浣?
涓や釜16浣嶆暟鎹紙WORD錛夊悎鎴?2浣嶆暟鎹?DWORD,LRESULT,LPARAM,鎴朩PARAM) LONG MAKELONG( WORD wLow, WORD wHigh ); WPARAM MAKEWPARAM( WORD wLow, WORD wHigh ); LPARAM MAKELPARAM( WORD wLow, WORD wHigh ); LRESULT MAKELRESULT( WORD wLow, WORD wHigh );
涓や釜8浣嶇殑鏁版嵁(BYTE)鍚堟垚16浣嶇殑鏁版嵁(WORD) WORD MAKEWORD( BYTE bLow, BYTE bHigh );
浠嶳(red),G(green),B(blue)涓夎壊寰楀埌COLORREF綾誨瀷鐨勯鑹插? COLORREF RGB( BYTE byRed,BYTE byGreen,BYTE byBlue ); 渚嬪COLORREF bkcolor = RGB(0x22,0x98,0x34);
浠嶤OLORREF綾誨瀷鐨勯鑹插煎緱鍒癛GB涓変釜棰滆壊鍊? BYTE Red = GetRValue(bkcolor); ///寰楀埌綰㈤鑹? BYTE Green = GetGValue(bkcolor); ///寰楀埌緇塊鑹? BYTE Blue = GetBValue(bkcolor); ///寰楀埌鍏伴鑹?
涔濄佹敞鎰忎簨欏? 鍋囧闇瑕佷嬌鐢ㄥ埌ConvertBSTRToString姝ょ被鍑芥暟,闇瑕佸姞涓婂ご鏂囦歡comutil.h,騫跺湪setting涓姞鍏omsupp.lib鎴栬呯洿鎺ュ姞涓?pragma comment( lib, "comsupp.lib" ) 銆?br />
]]> 杞創錛氭繁搴﹁В鏋怴C涓殑娑堟伅錛堜笅錛?/title> http://m.shnenglu.com/cppblog/archive/2006/07/20/10246.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 03:23:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10246.html http://m.shnenglu.com/cppblog/comments/10246.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10246.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/10246.html http://m.shnenglu.com/cppblog/services/trackbacks/10246.html 銆銆 娑堟伅鐨勬帴鏀朵富瑕佹湁錛撲釜鍑芥暟錛欸etMessage銆丳eekMessage銆乄aitMessage銆? 銆銆銆 GetMessage鍘熷瀷濡備笅錛欱OOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); 銆銆 璇ュ嚱鏁扮敤鏉ヨ幏鍙栦笌hWnd鍙傛暟鎵鎸囧畾鐨勭獥鍙g浉鍏崇殑涓攚MsgFilterMin鍜寃MsgFilterMax鍙傛暟鎵緇欏嚭鐨勬秷鎭艱寖鍥村唴鐨勬秷鎭傞渶瑕佹敞鎰忕殑鏄紝濡傛灉hWnd涓篘ULL錛屽垯GetMessage鑾峰彇灞炰簬璋冪敤璇ュ嚱鏁板簲鐢ㄧ▼搴忕殑浠諱竴紿楀彛鐨勬秷鎭紝濡傛灉wMsgFilterMin鍜寃MsgFilterMax閮芥槸錛愶紝鍒橤etMessage灝辮繑鍥炴墍鏈夊彲寰楀埌鐨勬秷鎭傚嚱鏁拌幏鍙栦箣鍚庡皢鍒犻櫎娑堟伅闃熷垪涓殑闄M_PAINT娑堟伅涔嬪鐨勫叾浠栨秷鎭紝鑷充簬WM_PAINT鍒欏彧鏈夊湪鍏跺鐞嗕箣鍚庢墠琚垹闄ゃ? 銆銆 PeekMessage鍘熷瀷濡備笅錛欱OOL PeekMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg錛夛紱 銆銆 璇ュ嚱鏁扮敤浜庢煡鐪嬪簲鐢ㄧ▼搴忕殑娑堟伅闃熷垪錛屽鏋滃叾涓湁娑堟伅灝卞皢鍏舵斁鍏pMsg鎵鎸囩殑緇撴瀯涓紝涓嶈繃錛屼笌GetMessage涓嶅悓鐨勬槸錛孭eekMessage鍑芥暟涓嶄細絳夊埌鏈夋秷鎭斁鍏ラ槦鍒楁椂鎵嶈繑鍥炪傚悓鏍鳳紝濡傛灉hWnd涓篘ULL錛屽垯PeekMessage鑾峰彇灞炰簬璋冪敤璇ュ嚱鏁板簲鐢ㄧ▼搴忕殑浠諱竴紿楀彛鐨勬秷鎭紝濡傛灉hWnd=-1錛岄偅涔堝嚱鏁板彧榪斿洖鎶奾Wnd鍙傛暟涓篘ULL鐨凱ostAppMessage鍑芥暟閫佸幓鐨勬秷鎭傚鏋渨MsgFilterMin鍜寃MsgFilterMax閮芥槸錛愶紝鍒橮eekMessage灝辮繑鍥炴墍鏈夊彲寰楀埌鐨勬秷鎭傚嚱鏁拌幏鍙栦箣鍚庡皢鍒犻櫎娑堟伅闃熷垪涓殑闄M_PAINT娑堟伅涔嬪鐨勫叾浠栨秷鎭紝鑷充簬WM_PAINT鍒欏彧鏈夊湪鍏跺鐞嗕箣鍚庢墠琚垹闄ゃ? 銆銆 WaitMessage鍘熷瀷濡備笅錛欱OOL VaitMessage();褰撲竴涓簲鐢ㄧ▼搴忔棤浜嬪彲鍋氭椂錛岃鍑芥暟灝卞皢鎺у埗鏉冧氦緇欏彟澶栫殑搴旂敤紼嬪簭錛屽悓鏃跺皢璇ュ簲鐢ㄧ▼搴忔寕璧鳳紝鐩村埌涓涓柊鐨勬秷鎭鏀懼叆搴旂敤紼嬪簭鐨勯槦鍒椾箣涓墠榪斿洖銆? 銆銆 娑堟伅鐨勫鐞? 銆銆 鎺ヤ笅鏉ユ垜浠皥涓涓嬫秷鎭殑澶勭悊錛岄鍏堟垜浠潵鐪嬩竴涓媀C涓殑娑堟伅娉碉細 銆銆 while(GetMessage(&msg, NULL, 0, 0)) { if(!TranslateAccelerator(msg.hWnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } 銆銆 棣栧厛錛孏etMessage浠庤繘紼嬬殑涓葷嚎紼嬬殑娑堟伅闃熷垪涓幏鍙栦竴涓秷鎭茍灝嗗畠澶嶅埗鍒癕SG緇撴瀯錛屽鏋滈槦鍒椾腑娌℃湁娑堟伅錛屽垯GetMessage鍑芥暟灝嗙瓑寰呬竴涓秷鎭殑鍒版潵浠ュ悗鎵嶈繑鍥炪?濡傛灉浣犲皢涓涓獥鍙e彞鏌勪綔涓虹浜屼釜鍙傛暟浼犲叆GetMessage錛岄偅涔堝彧鏈夋寚瀹氱獥鍙g殑鐨勬秷鎭彲浠ヤ粠闃熷垪涓幏寰椼侴etMessage涔熷彲浠ヤ粠娑堟伅闃熷垪涓繃婊ゆ秷鎭彧鎺ュ彈娑堟伅闃熷垪涓惤鍦ㄨ寖鍥村唴鐨勬秷鎭傝繖鏃跺欏氨瑕佸埄鐢℅etMessage錛廝eekMessage鎸囧畾涓涓秷鎭繃婊ゅ櫒銆傝繖涓繃婊ゅ櫒鏄竴涓秷鎭爣璇嗙鐨勮寖鍥存垨鑰呮槸涓涓獥浣撳彞鏌勶紝鎴栬呬袱鑰呭悓鏃舵寚瀹氥傚綋搴旂敤紼嬪簭瑕佹煡鎵句竴涓悗鍏ユ秷鎭槦鍒楃殑娑堟伅鏄緢鏈夌敤銆俉M_KEYFIRST 鍜?WM_KEYLAST 甯擱噺鐢ㄤ簬鎺ュ彈鎵鏈夌殑閿洏娑堟伅銆?WM_MOUSEFIRST 鍜?WM_MOUSELAST 甯擱噺鐢ㄤ簬鎺ュ彈鎵鏈夌殑榧犳爣娑堟伅銆? 銆銆 鐒跺悗TranslateAccelerator鍒ゆ柇璇ユ秷鎭槸涓嶆槸涓涓寜閿秷鎭茍涓旀槸涓涓姞閫熼敭娑堟伅錛屽鏋滄槸錛屽垯璇ュ嚱鏁板皢鎶婂嚑涓寜閿秷鎭漿鎹㈡垚涓涓姞閫熼敭娑堟伅浼犻掔粰紿楀彛鐨勫洖璋冨嚱鏁般傚鐞嗕簡鍔犻熼敭涔嬪悗錛屽嚱鏁癟ranslateMessage灝嗘妸涓や釜鎸夐敭娑堟伅WM_KEYDOWN鍜學M_KEYUP杞崲鎴愪竴涓猈M_CHAR錛屼笉榪囬渶瑕佹敞鎰忕殑鏄紝娑堟伅WM_KEYDOWN,WM_KEYUP浠嶇劧灝嗕紶閫掔粰紿楀彛鐨勫洖璋冨嚱鏁般? 銆銆 澶勭悊瀹屼箣鍚庯紝DispatchMessage鍑芥暟灝嗘妸姝ゆ秷鎭彂閫佺粰璇ユ秷鎭寚瀹氱殑紿楀彛涓凡璁懼畾鐨勫洖璋冨嚱鏁般傚鏋滄秷鎭槸WM_QUIT錛屽垯GetMessage榪斿洖錛愶紝浠庤岄鍑哄驚鐜綋銆傚簲鐢ㄧ▼搴忓彲浠ヤ嬌鐢≒ostQuitMessage鏉ョ粨鏉熻嚜宸辯殑娑堟伅寰幆銆傞氬父鍦ㄤ富紿楀彛鐨刉M_DESTROY娑堟伅涓皟鐢ㄣ? 銆銆 涓嬮潰鎴戜滑涓句竴涓父瑙佺殑灝忎緥瀛愭潵璇存槑榪欎釜娑堟伅娉電殑榪愮敤錛? 銆銆 if (::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,WM_KEYLAST, PM_REMOVE)) { if (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)錛庯紟錛? } 銆銆 榪欓噷鎴戜滑鎺ュ彈鎵鏈夌殑閿洏娑堟伅錛屾墍浠ュ氨鐢╓M_KEYFIRST 鍜?WM_KEYLAST浣滀負鍙傛暟銆傛渶鍚庝竴涓弬鏁板彲浠ユ槸PM_NOREMOVE 鎴栬?PM_REMOVE錛岃〃紺烘秷鎭俊鎭槸鍚﹀簲璇ヤ粠娑堟伅闃熷垪涓垹闄ゃ? 銆銆 鎵浠ヨ繖孌靛皬浠g爜灝辨槸鍒ゆ柇鏄惁鎸変笅浜咵sc閿紝濡傛灉鏄氨榪涜澶勭悊銆? 紿楀彛榪囩▼ 銆銆 紿楀彛榪囩▼鏄竴涓敤浜庡鐞嗘墍鏈夊彂閫佸埌榪欎釜紿楀彛鐨勬秷鎭殑鍑芥暟銆備換浣曚竴涓獥鍙g被閮芥湁涓涓獥鍙h繃紼嬨傚悓涓涓被鐨勭獥鍙d嬌鐢ㄥ悓鏍風殑紿楀彛榪囩▼鏉ュ搷搴旀秷鎭?緋葷粺鍙戦佹秷鎭粰紿楀彛榪囩▼灝嗘秷鎭暟鎹綔涓哄弬鏁頒紶閫掔粰浠栵紝娑堟伅鍒版潵涔嬪悗錛屾寜鐓ф秷鎭被鍨嬫帓搴忚繘琛屽鐞嗭紝鍏朵腑鐨勫弬鏁板垯鐢ㄦ潵鍖哄垎涓嶅悓鐨勬秷鎭紝紿楀彛榪囩▼浣跨敤鍙傛暟浜х敓鍚堥傝涓恒? 銆銆 涓涓獥鍙h繃紼嬩笉緇忓父蹇界暐娑堟伅錛屽鏋滀粬涓嶅鐞嗭紝瀹冧細灝嗘秷鎭紶鍥炲埌鎵ц榛樿鐨勫鐞嗐傜獥鍙h繃紼嬮氳繃璋冪敤DefWindowProc鏉ュ仛榪欎釜澶勭悊銆傜獥鍙h繃紼嬪繀欏籸eturn涓涓間綔涓哄畠鐨勬秷鎭鐞嗙粨鏋溿傚ぇ澶氭暟紿楀彛鍙鐞嗗皬閮ㄥ垎娑堟伅鍜屽皢鍏朵粬鐨勯氳繃DefWindowProc浼犻掔粰緋葷粺鍋氶粯璁ょ殑澶勭悊銆傜獥鍙h繃紼嬭鎵鏈夊睘浜庡悓涓涓被鐨勭獥鍙e叡浜紝鑳戒負涓嶅悓鐨勭獥鍙e鐞嗘秷鎭備笅闈㈡垜浠潵鐪嬩竴涓嬪叿浣撶殑瀹炰緥錛? 銆銆銆 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 銆銆銆 { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt; GetClientRect(hWnd, &rt); DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); 銆銆銆 } 銆銆 return 0; 銆銆銆 } 銆銆 娑堟伅鍒嗘祦鍣? 銆銆 閫氬父鐨勭獥鍙h繃紼嬫槸閫氳繃涓涓猻witch璇彞鏉ュ疄鐜扮殑錛岃繖涓簨鎯呭緢鐑︼紝鏈夋病鏈夋洿綆渚跨殑鏂規硶鍛紵鏈夛紝閭e氨鏄秷鎭垎嫻佸櫒錛屽埄鐢ㄦ秷鎭垎嫻佸櫒錛屾垜浠彲浠ユ妸switch璇彞鍒嗘垚鏇村皬鐨勫嚱鏁幫紝姣忎竴涓秷鎭兘瀵瑰簲涓涓皬鍑芥暟錛岃繖鏍峰仛鐨勫ソ澶勫氨鏄娑堟伅鏇村鏄撶鐞嗐?br /> 聽聽聽聽聽聽聽聽聽 涔嬫墍浠ヨ縐頒負娑堟伅鍒嗘祦鍣紝灝辨槸鍥犱負瀹冨彲浠ュ浠諱綍娑堟伅榪涜鍒嗘祦銆備笅闈㈡垜浠仛涓涓嚱鏁板氨寰堟竻妤氫簡錛? 銆銆 void MsgCracker(HWND hWnd,int id,HWND hWndCtl,UINT codeNotify) { switch(id) { case ID_A: if(codeNotify==EN_CHANGE)... break; case ID_B: if(codeNotify==BN_CLICKED)... break; .... } } 銆銆 鐒跺悗鎴戜滑淇敼涓涓嬬獥鍙h繃紼嬶細 銆銆 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker); HANDLE_MSG(hWnd,WM_DESTROY,MsgCracker); default: return DefWindowProc(hWnd, message, wParam, lParam); 銆銆銆 } 銆銆 return 0; 銆銆銆 } 銆銆 鍦╓indowsX.h涓畾涔変簡濡備笅鐨凥ANDLE_MSG瀹忥細 銆銆銆 #define HANDLE_MSG(hwnd,msg,fn) \ switch(msg): return HANDLE_##msg((hwnd),(wParam),(lParam),(fn)); 銆銆 瀹為檯涓婏紝HANDLE_WM_XXXX閮芥槸瀹忥紝渚嬪錛欻ANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);灝嗚杞崲鎴愬涓嬪畾涔夛細 銆銆銆 #define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn)\ ((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0L); 銆銆 濂戒簡錛屼簨鎯呭埌浜嗚繖涓姝ワ紝搴旇涓鍒囬兘鏄庢湕浜嗐? 銆銆 涓嶈繃錛屾垜浠彂鐜板湪windowsx.h閲岄潰榪樻湁涓涓畯錛欶ORWARD_WM_XXXX錛屾垜浠繕鏄偅WM_COMMAND涓轟緥錛岃繘琛屽垎鏋愶細 銆銆銆 #define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \ (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl)) 銆銆 鎵浠ュ疄闄呬笂錛孎ORWARD_WM_XXXX灝嗘秷鎭弬鏁拌繘琛屼簡閲嶆柊鏋勯狅紝鐢熸垚浜唚Param && lParam錛岀劧鍚庤皟鐢ㄤ簡鎴戜滑瀹氫箟鐨勫嚱鏁般? MFC娑堟伅鐨勫鐞嗗疄鐜版柟寮? 銆銆 鍒濈湅MFC涓殑鍚勭娑堟伅錛屼互鍙婂湪澶磋剳涓牴娣辮拏鍥虹殑C++鐨勫獎鍝嶏紝鎴戜滑鍙兘寰堣嚜鐒剁殑灝變細鎯沖埌鍒╃敤C++鐨勪笁澶х壒鎬т箣涓錛氳櫄鎷熸満鍒舵潵瀹炵幇娑堟伅鐨勪紶閫掞紝浣嗘槸緇忚繃鍒嗘瀽錛屾垜浠湅鍒頒簨鎯呭茍涓嶆槸鎯蟲垜浠兂璞$殑閭f牱錛屽湪MFC涓秷鎭槸閫氳繃涓縐嶆墍璋撶殑娑堟伅鏄犲皠鏈哄埗鏉ュ鐞嗙殑銆? 銆銆 涓轟粈涔堝憿錛熷湪娼樼埍姘戣佸笀緲昏瘧鐨勩奦isual C++鎶鏈唴騫曘嬶紙絎?鐗堬級涓粰鍑轟簡璇︾粏鐨勫師鍥犺鏄庯紝鎴戝啀綆瑕佺殑璇翠竴閬嶃傚湪CWnd綾諱腑澶х害鏈?10涓秷鎭紝榪樻湁鍏跺畠鐨凪FC鐨勭被鍛紝綆楄搗鏉ユ秷鎭お澶氫簡錛屽湪C++涓紼嬪簭涓敤鍒扮殑姣忎竴涓淳鐢熺被閮借鏈変竴涓獀table錛屾瘡涓涓櫄鍑芥暟鍦╲table涓兘瑕佸崰鐢ㄤ竴涓?瀛楄妭澶у皬鐨勫叆鍙e湴鍧錛岃繖鏍蜂竴鏉ワ紝瀵逛簬姣忎釜鐗瑰畾綾誨瀷鐨勭獥鍙f垨鎺т歡錛屽簲鐢ㄧ▼搴忛兘闇瑕佷竴涓?40KB澶у皬鐨勮〃鏉ユ敮鎸佽櫄鎷熸秷鎭帶浠跺嚱鏁般? 銆銆 濡傛灉璇翠笂闈㈢殑紿楀彛鎴栨帶浠跺彲浠ュ媺寮哄疄鐜扮殑璇濓紝閭d箞瀵逛簬鑿滃崟鍛戒護娑堟伅鍙婃寜閽懡浠ゆ秷鎭憿錛熷洜涓轟笉鍚岀殑搴旂敤紼嬪簭鏈変笉鍚岀殑鑿滃崟鍜屾寜閽紝鎴戜滑鎬庝箞澶勭悊鍛紵鍦∕FC搴撶殑榪欑娑堟伅鏄犲皠緋葷粺灝遍伩鍏嶄簡浣跨敤澶х殑vtable錛屽茍涓旇兘澶熷湪澶勭悊甯歌Windows娑堟伅鐨勫悓鏃跺鐞嗗悇縐嶅悇鏍風殑搴旂敤紼嬪簭鐨勫懡浠ゆ秷鎭? 銆銆 璇寸櫧浜嗭紝MFC涓殑娑堟伅鏈哄埗鍏跺疄璐ㄦ槸涓寮犲法澶х殑娑堟伅鍙婂叾澶勭悊鍑芥暟鐨勪竴涓瀵瑰簲琛紝鐒跺悗鍔犱笂鍒嗘瀽澶勭悊榪欏紶琛ㄧ殑搴旂敤妗嗘灦鍐呴儴鐨勪竴浜涚▼搴忎唬鐮?榪欐牱灝卞彲浠ラ伩鍏嶅湪SDK緙栫▼涓敤鍒扮殑綣佺悙鐨凜ASE璇彞銆? 銆銆 MFC鐨勬秷鎭槧灝勭殑鍩虹被CCmdTarget 銆銆 濡傛灉浣犳兂璁╀綘鐨勬帶浠惰兘澶熻繘琛屾秷鎭槧灝勶紝灝卞繀欏諱粠CCmdTarget綾諱腑媧劇敓銆侰CmdTarget綾繪槸MFC澶勭悊鍛戒護娑堟伅鐨勫熀紜銆佹牳蹇冦侻FC涓鴻綾昏璁′簡璁稿鎴愬憳鍑芥暟鍜屼竴浜涙垚鍛樻暟鎹紝鍩烘湰涓婃槸涓轟簡瑙e喅娑堟伅鏄犲皠闂鐨勶紝鎵鏈夊搷搴旀秷鎭垨浜嬩歡鐨勭被閮戒粠瀹冩淳鐢燂紝渚嬪錛氬簲鐢ㄧ▼搴忕被銆佹鏋剁被銆佹枃妗g被銆佽鍥劇被鍜屽悇縐嶅悇鏍風殑鎺т歡綾葷瓑絳夛紝榪樻湁寰堝銆? 銆銆 涓嶈繃榪欎釜綾婚噷闈㈡湁錛掍釜鍑芥暟瀵規秷鎭槧灝勯潪甯擱噸瑕侊紝涓涓槸闈欐佹垚鍛樺嚱鏁癉ispatchCmdMsg錛屽彟涓涓槸铏氬嚱鏁癘nCmdMsg銆? 銆銆 DispatchCmdMsg涓撻棬渚汳FC鍐呴儴浣跨敤錛岀敤鏉ュ垎鍙慦indows娑堟伅銆侽nCmdMsg鐢ㄦ潵浼犻掑拰鍙戦佹秷鎭佹洿鏂扮敤鎴風晫闈㈠璞$殑鐘舵併? 銆銆 CCmdTarget瀵筄nCmdMsg鐨勯粯璁ゅ疄鐜幫細鍦ㄥ綋鍓嶅懡浠ょ洰鏍?this鎵鎸?鐨勭被鍜屽熀綾葷殑娑堟伅鏄犲皠鏁扮粍閲屾悳绱㈡寚瀹氬懡浠ゆ秷鎭殑娑堟伅澶勭悊鍑芥暟銆? 銆銆 榪欓噷浣跨敤铏氭嫙鍑芥暟GetMessageMap寰楀埌鍛戒護鐩爣綾葷殑娑堟伅鏄犲皠鍏ュ彛鏁扮粍_messageEntries錛岀劧鍚庡湪鏁扮粍閲屽尮閰嶅懡浠ゆ秷鎭疘D鐩稿悓銆佹帶鍒墮氱煡浠g爜涔熺浉鍚岀殑娑堟伅鏄犲皠鏉$洰銆傚叾涓璆etMessageMap鏄櫄鎷熷嚱鏁幫紝鎵浠ュ彲浠ョ‘璁ゅ綋鍓嶅懡浠ょ洰鏍囩殑紜垏綾匯? 銆銆 濡傛灉鎵懼埌浜嗕竴涓尮閰嶇殑娑堟伅鏄犲皠鏉$洰錛屽垯浣跨敤DispachCmdMsg璋冪敤榪欎釜澶勭悊鍑芥暟錛? 銆銆 濡傛灉娌℃湁鎵懼埌錛屽垯浣跨敤_GetBaseMessageMap寰楀埌鍩虹被鐨勬秷鎭槧灝勬暟緇勶紝鏌ユ壘錛岀洿鍒版壘鍒版垨鎼滃浜嗘墍鏈夌殑鍩虹被錛堝埌CCmdTarget錛変負姝紱 銆銆 濡傛灉鏈鍚庢病鏈夋壘鍒幫紝鍒欒繑鍥濬ASLE銆? 銆銆 姣忎釜浠嶤CmdTarget媧劇敓鐨勫懡浠ょ洰鏍囩被閮藉彲浠ヨ鐩朞nCmdMsg錛屽埄鐢ㄥ畠鏉ョ‘瀹氭槸鍚﹀彲浠ュ鐞嗘煇鏉″懡浠わ紝濡傛灉涓嶈兘錛屽氨閫氳繃璋冪敤涓嬩竴鍛戒護鐩爣鐨凮nCmdMsg錛屾妸璇ュ懡浠ら佺粰涓嬩竴涓懡浠ょ洰鏍囧鐞嗐傞氬父錛屾淳鐢熺被瑕嗙洊OnCmdMsg鏃?錛岃璋冪敤鍩虹被鐨勮瑕嗙洊鐨凮nCmdMsg銆? 銆銆 鍦∕FC妗嗘灦涓紝涓浜汳FC鍛戒護鐩爣綾昏鐩栦簡OnCmdMsg錛屽妗嗘灦紿楀彛綾昏鐩栦簡璇ュ嚱鏁幫紝瀹炵幇浜哅FC鐨勬爣鍑嗗懡浠ゆ秷鎭彂閫佽礬寰勩傚繀瑕佺殑璇濓紝搴旂敤紼嬪簭涔熷彲浠ヨ鐩朞nCmdMsg錛屾敼鍙樹竴涓垨澶氫釜綾諱腑鐨勫彂閫佽瀹氾紝瀹炵幇涓庢爣鍑嗘鏋跺彂閫佽瀹氫笉鍚岀殑鍙戦佽礬寰勩備緥濡傦紝鍦ㄤ互涓嬫儏鍐靛彲浠ヤ綔榪欐牱鐨勫鐞嗭細鍦ㄨ鎵撴柇鍙戦侀『搴忕殑綾諱腑鎶婂懡浠や紶緇欎竴涓潪MFC榛樿瀵硅薄錛涘湪鏂扮殑闈為粯璁ゅ璞′腑鎴栧湪鍙兘瑕佷紶鍑哄懡浠ょ殑鍛戒護鐩爣涓? 銆銆 娑堟伅鏄犲皠鐨勫唴瀹? 銆銆 閫氳繃ClassWizard涓烘垜浠敓鎴愮殑浠g爜錛屾垜浠彲浠ョ湅鍒幫紝娑堟伅鏄犲皠鍩烘湰涓婂垎涓?澶ч儴鍒嗭細 銆銆 鍦ㄥご鏂囦歡(.h)涓湁涓涓畯DECLARE_MESSAGE_MAP()錛屼粬琚斁鍦ㄤ簡綾葷殑鏈熬錛屾槸涓涓猵ublic灞炴х殑錛涗笌涔嬪搴旂殑鏄湪瀹炵幇閮ㄥ垎錛?cpp)澧炲姞浜嗕竴绔犳秷鎭槧灝勮〃錛屽唴瀹瑰涓嬶細 BEGIN_MESSAGE_MAP(褰撳墠綾? 褰撳墠綾葷殑鍩虹被) file://{{AFX_MSG_MAP(CMainFrame) 銆 娑堟伅鐨勫叆鍙i」 file://}}AFX_MSG_MAP END_MESSAGE_MAP() 銆銆 浣嗘槸浠呮槸榪欎袱欏硅繕榪滀笉瓚充互瀹屾垚涓鏉℃秷鎭紝瑕佹槸涓涓秷鎭伐浣滐紝蹇呴』鏈変互涓?涓儴鍒嗗幓鍗忎綔錛? 1.鍦ㄧ被鐨勫畾涔変腑鍔犲叆鐩稿簲鐨勫嚱鏁板0鏄庯紱 銆 2.鍦ㄧ被鐨勬秷鎭槧灝勮〃涓姞鍏ョ浉搴旂殑娑堟伅鏄犲皠鍏ュ彛欏癸紱 銆 3.鍦ㄧ被鐨勫疄鐜頒腑鍔犲叆鐩稿簲鐨勫嚱鏁頒綋錛? 銆銆 娑堟伅鐨勬坊鍔? 銆銆 鏈変簡涓婇潰鐨勮繖浜涘彧鏄綔涓哄熀紜錛屾垜浠帴涓嬫潵灝卞仛鎴戜滑鏈鐔熸倝銆佹渶甯哥敤鐨勫伐浣滐細娣誨姞娑堟伅銆侻FC娑堟伅鐨勬坊鍔犱富瑕佹湁2縐嶆柟娉曪細鑷姩/鎵嬪姩錛屾垜浠氨浠ヨ繖2縐嶆柟娉曚負渚嬶紝璇翠竴涓嬪浣曟坊鍔犳秷鎭? 銆銆 1銆佸埄鐢–lass Wizard瀹炵幇鑷姩娣誨姞 銆銆 鍦ㄨ彍鍗曚腑閫夋嫨View-->Class Wizard錛屼篃鍙互鐢ㄥ崟鍑婚紶鏍囧彸閿紝閫夋嫨Class Wizard錛屽悓鏍峰彲浠ユ縺媧籆lass Wizard銆傞夋嫨Message Map鏍囩錛屼粠Class name緇勫悎妗嗕腑閫夊彇鎴戜滑鎯寵娣誨姞娑堟伅鐨勭被銆傚湪Object IDs鍒楄〃妗嗕腑錛岄夊彇綾葷殑鍚嶇О銆傛鏃訛紝 Messages鍒楄〃妗嗘樉紺鴻綾葷殑澶у鏁?鑻ヤ笉鏄叏閮ㄧ殑璇?鍙噸杞芥垚鍛樺嚱鏁板拰紿楀彛娑堟伅銆傜被閲嶈澆鏄劇ず鍦ㄥ垪琛ㄧ殑涓婇儴錛屼互瀹為檯铏氭瀯鎴愬憳鍑芥暟鐨勫ぇ灝忓啓瀛楁瘝鏉ヨ〃紺恒傚叾浠栦負紿楀彛娑堟伅錛屼互澶у啓瀛楁瘝鍑虹幇錛屾弿榪頒簡瀹為檯紿楀彛鎵鑳藉搷搴旂殑娑堟伅ID銆傞変腑鎴戜滑鍚戞坊鍔犵殑娑堟伅錛屽崟鍑籄dd Function鎸夐挳錛孋lass Wizard鑷姩灝嗚娑堟伅娣誨姞榪涙潵銆? 銆銆 鏈夋椂鍊欙紝鎴戜滑鎯寵娣誨姞鐨勬秷鎭湰搴旇鍑虹幇鍦∕essage鍒楄〃涓紝鍙槸灝辨槸鎵句笉鍒幫紝鎬庝箞鍔烇紵涓嶈鐫鎬ワ紝鎴戜滑鍙互鍒╃敤Class Wizard涓奀lass Info鏍囩浠ユ墿灞曟秷鎭垪琛ㄣ傚湪璇ラ〉涓紝鎵懼埌Message Filter緇勫悎妗嗭紝閫氳繃瀹冨彲浠ユ敼鍙橀欏典腑Messages鍒楄〃妗嗕腑鐨勯夐」銆傝繖閲岋紝鎴戜滑閫夋嫨Window錛屼粠鑰屾樉紺烘墍鏈夌殑紿楀彛娑堟伅錛屼竴鎶婃儏鍐典笅錛屼綘鎯寵娣誨姞鐨勬秷鎭氨鍙互鍦∕essage鍒楄〃妗嗕腑鍑虹幇浜嗭紝濡傛灉榪樻病鏈夛紝閭e氨鎺ョ潃寰涓嬬湅錛氾級 銆銆 2銆佹墜鍔ㄥ湴娣誨姞娑堟伅澶勭悊鍑芥暟 銆銆 濡傛灉鍦∕essages鍒楄〃妗嗕腑浠嶇劧鐪嬩笉鍒版垜浠兂瑕佺殑娑堟伅錛岄偅涔堣娑堟伅鍙兘鏄緋葷粺蹇界暐鎺夋垨鑰呮槸浣犺嚜宸卞垱寤虹殑錛屽湪榪欑鎯呭喌涓嬶紝灝卞繀欏昏嚜宸辨墜宸ユ坊鍔犮傛牴鎹垜浠墠闈㈡墍璇寸殑娑堟伅宸ヤ綔鐨?涓儴浠訛紝鎴戜滑涓涓榪涜澶勭悊錛? 銆銆 1) 鍦ㄧ被鐨? h鏂囦歡涓坊鍔犲鐞嗗嚱鏁扮殑澹版槑錛岀揣鎺ュ湪//}}AFX_MSG琛屼箣鍚庡姞鍏ュ0鏄庯紝娉ㄦ剰錛氫竴瀹氳浠fx_msg寮澶淬? 銆銆 閫氬父錛屾坊鍔犲鐞嗗嚱鏁板0鏄庣殑鏈濂界殑鍦版柟鏄簮浠g爜涓瑿lass Wizard緇存姢鐨勮〃涓嬮潰錛屼絾鏄湪瀹冩爣璁板叾棰嗗煙鐨勶經锝涳綕锝濇嫭寮у闈€傝繖浜涙嫭寮т腑鐨勪換浣曚笢瑗塊兘灝嗕細琚獵lass Wizard閿姣併? 銆銆 2) 鎺ョ潃錛屽湪鐢ㄦ埛綾葷殑.cpp鏂囦歡涓壘鍒?/}}AFX_MSG_MAP琛岋紝绱ф帴鍦ㄥ畠涔嬪悗鍔犲叆娑堟伅鍏ュ彛欏廣傚悓鏍鳳紝涔熸槸鏀懼湪{ {} }鐨勫闈? 銆銆 3) 鏈鍚庯紝鍦ㄨ鏂囦歡涓坊鍔犳秷鎭鐞嗗嚱鏁扮殑瀹炰綋 ]]> 杞創錛氭繁搴﹁В鏋怴C涓殑娑堟伅(涓? http://m.shnenglu.com/cppblog/archive/2006/07/20/10245.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 03:20:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10245.html http://m.shnenglu.com/cppblog/comments/10245.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10245.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/10245.html http://m.shnenglu.com/cppblog/services/trackbacks/10245.html
闃熷垪娑堟伅鍜岄潪闃熷垪娑堟伅 聽聽聽浠庢秷鎭殑鍙戦侀斿緞鏉ョ湅錛屾秷鎭彲浠ュ垎鎴?縐嶏細闃熷垪娑堟伅鍜岄潪闃熷垪娑堟伅銆傛秷鎭槦鍒楃敱鍙互鍒嗘垚緋葷粺娑堟伅闃熷垪鍜岀嚎紼嬫秷鎭槦鍒椼傜郴緇熸秷鎭槦鍒楃敱Windows緇存姢錛岀嚎紼嬫秷鎭槦鍒楀垯鐢辨瘡涓狦UI綰跨▼鑷繁榪涜緇存姢錛屼負閬垮厤緇檔on-GUI鐜版垚鍒涘緩娑堟伅闃熷垪錛屾墍鏈夌嚎紼嬩駭鐢熸椂騫舵病鏈夋秷鎭槦鍒楋紝浠呭綋綰跨▼絎竴嬈¤皟鐢℅DI鍑芥暟鏁扮郴緇熺粰綰跨▼鍒涘緩涓涓秷鎭槦鍒椼傞槦鍒楁秷鎭佸埌緋葷粺娑堟伅闃熷垪錛岀劧鍚庡埌綰跨▼娑堟伅闃熷垪錛涢潪闃熷垪娑堟伅鐩存帴閫佺粰鐩殑紿楀彛榪囩▼銆?br />聽聽聽聽 瀵逛簬闃熷垪娑堟伅錛屾渶甯歌鐨勬槸榧犳爣鍜岄敭鐩樿Е鍙戠殑娑堟伅錛屼緥濡俉M_MOUSERMOVE,WM_CHAR絳夋秷鎭紝榪樻湁涓浜涘叾瀹冪殑娑堟伅錛屼緥濡傦細WM_PAINT銆乄M_TIMER鍜學M_QUIT銆傚綋榧犳爣銆侀敭鐩樹簨浠惰瑙﹀彂鍚庯紝鐩稿簲鐨勯紶鏍囨垨閿洏椹卞姩紼嬪簭灝變細鎶婅繖浜涗簨浠惰漿鎹㈡垚鐩稿簲鐨勬秷鎭紝鐒跺悗杈撻佸埌緋葷粺娑堟伅闃熷垪錛岀敱Windows緋葷粺鍘昏繘琛屽鐞嗐俉indows緋葷粺鍒欏湪閫傚綋鐨勬椂鏈猴紝浠庣郴緇熸秷鎭槦鍒椾腑鍙栧嚭涓涓秷鎭紝鏍規嵁鍓嶉潰鎴戜滑鎵璇寸殑MSG娑堟伅緇撴瀯紜畾娑堟伅鏄琚佸線閭d釜紿楀彛錛岀劧鍚庢妸鍙栧嚭鐨勬秷鎭佸線鍒涘緩紿楀彛鐨勭嚎紼嬬殑鐩稿簲闃熷垪錛屼笅闈㈢殑浜嬫儏灝辮鐢辯嚎紼嬫秷鎭槦鍒楁搷蹇冧簡錛學indows寮濮嬪繖鑷繁鐨勪簨鎯呭幓浜嗐傜嚎紼嬬湅鍒拌嚜宸辯殑娑堟伅闃熷垪涓湁娑堟伅錛屽氨浠庨槦鍒椾腑鍙栧嚭鏉ワ紝閫氳繃鎿嶄綔緋葷粺鍙戦佸埌鍚堥傜殑紿楀彛榪囩▼鍘誨鐞嗐?br />聽聽聽聽 涓鑸潵璁詫紝緋葷粺鎬繪槸灝嗘秷鎭疨ost鍦ㄦ秷鎭槦鍒楃殑鏈熬銆傝繖鏍蜂繚璇佺獥鍙d互鍏堣繘鍏堝嚭鐨勯『搴忔帴鍙楁秷鎭傜劧鑰?WM_PAINT鏄竴涓緥澶栵紝鍚屼竴涓獥鍙g殑澶氫釜 WM_PAINT琚悎騫舵垚涓涓?WM_PAINT 娑堟伅, 鍚堝茍鎵鏈夌殑鏃犳晥鍖哄煙鍒頒竴涓棤鏁堝尯鍩熴傚悎騫禬M_PAIN鐨勭洰鐨勬槸涓轟簡鍑忓皯鍒鋒柊紿楀彛鐨勬鏁般?br />聽聽聽 闈為槦鍒楁秷鎭皢浼氱粫榪囩郴緇熼槦鍒楀拰娑堟伅闃熷垪錛岀洿鎺ュ皢娑堟伅鍙戦佸埌紿楀彛榪囩▼錛屻傜郴緇熷彂閫侀潪闃熷垪娑堟伅閫氱煡紿楀彛錛岀郴緇熷彂閫佹秷鎭氱煡紿楀彛銆?渚嬪,褰撶敤鎴鋒縺媧諱竴涓獥鍙g郴緇熷彂閫乄M_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR銆傝繖浜涙秷鎭氱煡紿楀彛瀹冭嬋媧諱簡銆傞潪闃熷垪娑堟伅涔熷彲浠ョ敱褰撳簲鐢ㄧ▼搴忚皟鐢ㄧ郴緇熷嚱鏁頒駭鐢熴備緥濡?褰撶▼搴忚皟鐢⊿etWindowPos緋葷粺鍙戦乄M_WINDOWPOSCHANGED娑堟伅銆備竴浜涘嚱鏁頒篃鍙戦侀潪闃熷垪娑堟伅錛屼緥濡備笅闈㈡垜浠璋堝埌鐨勫嚱鏁般?br />聽聽聽聽 聽聽聽聽 娑堟伅鐨勫彂閫?/font> 聽聽聽聽 浜嗚В浜嗕笂闈㈢殑榪欎簺鍩虹鐞嗚涔嬪悗錛屾垜浠氨鍙互榪涜涓涓嬬畝鍗曠殑娑堟伅鍙戦佷笌鎺ユ敹銆?br />聽聽聽聽 鎶婁竴涓秷鎭彂閫佸埌紿楀彛鏈?縐嶆柟寮忥細鍙戦併佸瘎閫佸拰騫挎挱銆?br />聽聽聽聽 鍙戦佹秷鎭殑鍑芥暟鏈塖endMessage銆丼endMessageCallback銆丼endNotifyMessage銆丼endMessageTimeout錛涘瘎閫佹秷鎭殑鍑芥暟涓昏鏈塒ostMessage銆丳ostThreadMessage銆丳ostQuitMessage錛涘箍鎾秷鎭殑鍑芥暟鎴戠煡閬撶殑鍙湁BroadcastSystemMessage銆丅roadcastSystemMessageEx銆?br />聽聽聽聽 SendMessage鐨勫師鍨嬪涓嬶細LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)錛岃繖涓嚱鏁頒富瑕佹槸鍚戜竴涓垨澶氫釜紿楀彛鍙戦佷竴鏉℃秷鎭紝涓鐩寸瓑鍒版秷鎭澶勭悊涔嬪悗鎵嶄細榪斿洖銆備笉榪囬渶瑕佹敞鎰忕殑鏄紝濡傛灉鎺ユ敹娑堟伅鐨勭獥鍙f槸鍚屼竴涓簲鐢ㄧ▼搴忕殑涓閮ㄥ垎錛岄偅涔堣繖涓獥鍙g殑紿楀彛鍑芥暟灝辮浣滀負涓涓瓙紼嬪簭椹笂琚皟鐢紱濡傛灉鎺ユ敹娑堟伅鐨勭獥鍙f槸琚彟澶栫殑綰跨▼鎵鍒涘緩鐨勶紝閭d箞紿楀彛緋葷粺灝卞垏鎹㈠埌鐩稿簲鐨勭嚎紼嬪茍涓旇皟鐢ㄧ浉搴旂殑紿楀彛鍑芥暟錛岃繖鏉℃秷鎭笉浼氳鏀捐繘鐩爣搴旂敤紼嬪簭闃熷垪涓傚嚱鏁扮殑榪斿洖鍊兼槸鐢辨帴鏀舵秷鎭殑紿楀彛鐨勭獥鍙e嚱鏁拌繑鍥烇紝榪斿洖鐨勫煎彇鍐充簬琚彂閫佺殑娑堟伅銆?br />聽聽聽聽 PostMessage鐨勫師鍨嬪涓嬶細BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)錛岃鍑芥暟鎶婁竴鏉℃秷鎭斁緗埌鍒涘緩hWnd紿楀彛鐨勭嚎紼嬬殑娑堟伅闃熷垪涓紝璇ュ嚱鏁頒笉絳夋秷鎭澶勭悊灝遍┈涓婂皢鎺у埗榪斿洖銆傞渶瑕佹敞鎰忕殑鏄紝濡傛灉hWnd鍙傛暟涓篐WND_BROADCAST錛岄偅涔堬紝娑堟伅灝嗚瀵勯佺粰緋葷粺涓殑鎵鏈夌殑閲嶅彔紿楀彛鍜屽脊鍑虹獥鍙o紝浣嗘槸瀛愮獥鍙d笉浼氭敹鍒拌娑堟伅錛涘鏋渉Wnd鍙傛暟涓篘ULL錛屽垯璇ュ嚱鏁扮被浼間簬灝哾wThreadID鍙傛暟璁劇疆鎴愬綋鍓嶇嚎紼嬬殑鏍囧織鏉ヨ皟鐢≒ostThreadMEssage鍑芥暟銆?br />銆銆銆浠庝笂闈㈢殑榪欙紥涓叿鏈変唬琛ㄦх殑鍑芥暟錛屾垜浠彲浠ョ湅鍑烘秷鎭殑鍙戦佹柟寮忓拰瀵勯佹柟寮忕殑鍖哄埆鎵鍦細琚彂閫佺殑娑堟伅鏄惁浼氳绔嬪嵆澶勭悊錛屽嚱鏁版槸鍚︾珛鍗寵繑鍥炪傝鍙戦佺殑娑堟伅浼氳绔嬪嵆澶勭悊錛屽鐞嗗畬姣曞悗鍑芥暟鎵嶄細榪斿洖錛涜瀵勯佺殑娑堟伅涓嶄細琚珛鍗沖鐞嗭紝浠栬鏀懼埌涓涓厛榪涘厛鍑虹殑闃熷垪涓紝涓鐩寸瓑鍒板簲鐢ㄧ▼搴忕┖綰跨殑鏃跺欐墠浼氳澶勭悊錛屼笉榪囧嚱鏁版斁緗秷鎭悗绔嬪嵆榪斿洖銆?br />銆銆銆瀹為檯涓婏紝鍙戦佹秷鎭埌涓涓獥鍙e鐞嗚繃紼嬪拰鐩存帴璋冪敤紿楀彛澶勭悊榪囩▼涔嬮棿騫舵病鏈夊お澶х殑鍖哄埆錛屼粬浠洿鎺ョ殑鍞竴鍖哄埆灝卞湪浜庝綘鍙互瑕佹眰鎿嶄綔緋葷粺鎴幏鎵鏈夎鍙戦佺殑娑堟伅錛屼絾鏄笉鑳藉鎴幏瀵圭獥鍙e鐞嗚繃紼嬬殑鐩存帴璋冪敤銆?br />銆銆銆浠ュ瘎閫佹柟寮忓彂閫佺殑娑堟伅閫氬父鏄笌鐢ㄦ埛杈撳叆浜嬩歡鐩稿搴旂殑錛屽洜涓鴻繖浜涗簨浠朵笉鏄崄鍒嗙揣榪紝鍙互榪涜緙撴參鐨勭紦鍐插鐞嗭紝渚嬪榧犳爣銆侀敭鐩樻秷鎭細琚瘎閫侊紝鑰屾寜閽瓑娑堟伅鍒欎細琚彂閫併?br />銆銆銆騫挎挱娑堟伅鐢ㄥ緱姣旇緝灝戯紝BroadcastSystemMessage鍑芥暟鍘熷瀷濡備笅錛?br />聽聽聽聽聽 long BroadcastSystemMessage(DWORD dwFlags,LPDWORD lpdwRecipients,UINT uiMessage,WPARAM wParam,LPARAM lParam);璇ュ嚱鏁板彲浠ュ悜鎸囧畾鐨勬帴鏀惰呭彂閫佷竴鏉℃秷鎭紝榪欎簺鎺ユ敹鑰呭彲浠ユ槸搴旂敤紼嬪簭銆佸彲瀹夎鐨勯┍鍔ㄧ▼搴忋佺綉緇滈┍鍔ㄧ▼搴忋佺郴緇熺駭鍒殑璁懼椹卞姩娑堟伅鍜屼粬浠殑浠繪剰緇勫悎銆傞渶瑕佹敞鎰忕殑鏄紝濡傛灉dwFlags鍙傛暟鏄疊SF_QUERY騫朵笖鑷沖皯涓涓帴鏀惰呰繑鍥炰簡BROADCAST_QUERY_DENY錛屽垯榪斿洖鍊間負錛愶紝濡傛灉娌℃湁鎸囧畾BSF_QUERY錛屽垯鍑芥暟灝嗘秷鎭彂閫佺粰鎵鏈夋帴鏀惰咃紝騫朵笖蹇界暐鍏惰繑鍥炲箋?
銆銆銆娑堟伅鐨勬帴鏀?/font> 銆銆 娑堟伅鐨勬帴鏀朵富瑕佹湁錛撲釜鍑芥暟錛欸etMessage銆丳eekMessage銆乄aitMessage銆?br />銆銆銆GetMessage鍘熷瀷濡備笅錛欱OOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax);璇ュ嚱鏁扮敤鏉ヨ幏鍙栦笌hWnd鍙傛暟鎵鎸囧畾鐨勭獥鍙g浉鍏崇殑涓攚MsgFilterMin鍜寃MsgFilterMax鍙傛暟鎵緇欏嚭鐨勬秷鎭艱寖鍥村唴鐨勬秷鎭傞渶瑕佹敞鎰忕殑鏄紝濡傛灉hWnd涓篘ULL錛屽垯GetMessage鑾峰彇灞炰簬璋冪敤璇ュ嚱鏁板簲鐢ㄧ▼搴忕殑浠諱竴紿楀彛鐨勬秷鎭紝濡傛灉wMsgFilterMin鍜寃MsgFilterMax閮芥槸錛愶紝鍒橤etMessage灝辮繑鍥炴墍鏈夊彲寰楀埌鐨勬秷鎭傚嚱鏁拌幏鍙栦箣鍚庡皢鍒犻櫎娑堟伅闃熷垪涓殑闄M_PAINT娑堟伅涔嬪鐨勫叾浠栨秷鎭紝鑷充簬WM_PAINT鍒欏彧鏈夊湪鍏跺鐞嗕箣鍚庢墠琚垹闄ゃ?br />銆銆銆PeekMessage鍘熷瀷濡備笅錛欱OOL PeekMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg錛夛紱璇ュ嚱鏁扮敤浜庢煡鐪嬪簲鐢ㄧ▼搴忕殑娑堟伅闃熷垪錛屽鏋滃叾涓湁娑堟伅灝卞皢鍏舵斁鍏pMsg鎵鎸囩殑緇撴瀯涓紝涓嶈繃錛屼笌GetMessage涓嶅悓鐨勬槸錛孭eekMessage鍑芥暟涓嶄細絳夊埌鏈夋秷鎭斁鍏ラ槦鍒楁椂鎵嶈繑鍥炪傚悓鏍鳳紝濡傛灉hWnd涓篘ULL錛屽垯PeekMessage鑾峰彇灞炰簬璋冪敤璇ュ嚱鏁板簲鐢ㄧ▼搴忕殑浠諱竴紿楀彛鐨勬秷鎭紝濡傛灉hWnd=-1錛岄偅涔堝嚱鏁板彧榪斿洖鎶奾Wnd鍙傛暟涓篘ULL鐨凱ostAppMessage鍑芥暟閫佸幓鐨勬秷鎭傚鏋渨MsgFilterMin鍜寃MsgFilterMax閮芥槸錛愶紝鍒橮eekMessage灝辮繑鍥炴墍鏈夊彲寰楀埌鐨勬秷鎭傚嚱鏁拌幏鍙栦箣鍚庡皢鍒犻櫎娑堟伅闃熷垪涓殑闄M_PAINT娑堟伅涔嬪鐨勫叾浠栨秷鎭紝鑷充簬WM_PAINT鍒欏彧鏈夊湪鍏跺鐞嗕箣鍚庢墠琚垹闄ゃ?br />銆銆銆WaitMessage鍘熷瀷濡備笅錛欱OOL VaitMessage();褰撲竴涓簲鐢ㄧ▼搴忔棤浜嬪彲鍋氭椂錛岃鍑芥暟灝卞皢鎺у埗鏉冧氦緇欏彟澶栫殑搴旂敤紼嬪簭錛屽悓鏃跺皢璇ュ簲鐢ㄧ▼搴忔寕璧鳳紝鐩村埌涓涓柊鐨勬秷鎭鏀懼叆搴旂敤紼嬪簭鐨勯槦鍒椾箣涓墠榪斿洖銆?/p>聽聽聽聽聽 娑堟伅鐨勫鐞?/font> 銆銆銆鎺ヤ笅鏉ユ垜浠皥涓涓嬫秷鎭殑澶勭悊錛岄鍏堟垜浠潵鐪嬩竴涓媀C涓殑娑堟伅娉碉細 銆銆銆while(GetMessage(&msg, NULL, 0, 0)) 聽聽聽聽聽 { 聽if(!TranslateAccelerator(msg.hWnd, hAccelTable, &msg)) 聽聽聽聽聽聽聽聽 { 聽聽聽 TranslateMessage(&msg); 聽聽聽 DispatchMessage(&msg); 聽聽聽聽聽聽聽聽 } 聽聽聽聽聽 }
聽聽聽聽聽 棣栧厛錛孏etMessage浠庤繘紼嬬殑涓葷嚎紼嬬殑娑堟伅闃熷垪涓幏鍙栦竴涓秷鎭茍灝嗗畠澶嶅埗鍒癕SG緇撴瀯錛屽鏋滈槦鍒椾腑娌℃湁娑堟伅錛屽垯GetMessage鍑芥暟灝嗙瓑寰呬竴涓秷鎭殑鍒版潵浠ュ悗鎵嶈繑鍥炪?濡傛灉浣犲皢涓涓獥鍙e彞鏌勪綔涓虹浜屼釜鍙傛暟浼犲叆GetMessage錛岄偅涔堝彧鏈夋寚瀹氱獥鍙g殑鐨勬秷鎭彲浠ヤ粠闃熷垪涓幏寰椼侴etMessage涔熷彲浠ヤ粠娑堟伅闃熷垪涓繃婊ゆ秷鎭彧鎺ュ彈娑堟伅闃熷垪涓惤鍦ㄨ寖鍥村唴鐨勬秷鎭傝繖鏃跺欏氨瑕佸埄鐢℅etMessage錛廝eekMessage鎸囧畾涓涓秷鎭繃婊ゅ櫒銆傝繖涓繃婊ゅ櫒鏄竴涓秷鎭爣璇嗙鐨勮寖鍥存垨鑰呮槸涓涓獥浣撳彞鏌勶紝鎴栬呬袱鑰呭悓鏃舵寚瀹氥傚綋搴旂敤紼嬪簭瑕佹煡鎵句竴涓悗鍏ユ秷鎭槦鍒楃殑娑堟伅鏄緢鏈夌敤銆俉M_KEYFIRST 鍜?WM_KEYLAST 甯擱噺鐢ㄤ簬鎺ュ彈鎵鏈夌殑閿洏娑堟伅銆?WM_MOUSEFIRST 鍜?WM_MOUSELAST 甯擱噺鐢ㄤ簬鎺ュ彈鎵鏈夌殑榧犳爣娑堟伅銆? 銆銆銆鐒跺悗TranslateAccelerator鍒ゆ柇璇ユ秷鎭槸涓嶆槸涓涓寜閿秷鎭茍涓旀槸涓涓姞閫熼敭娑堟伅錛屽鏋滄槸錛屽垯璇ュ嚱鏁板皢鎶婂嚑涓寜閿秷鎭漿鎹㈡垚涓涓姞閫熼敭娑堟伅浼犻掔粰紿楀彛鐨勫洖璋冨嚱鏁般傚鐞嗕簡鍔犻熼敭涔嬪悗錛屽嚱鏁癟ranslateMessage灝嗘妸涓や釜鎸夐敭娑堟伅WM_KEYDOWN鍜學M_KEYUP杞崲鎴愪竴涓猈M_CHAR錛屼笉榪囬渶瑕佹敞鎰忕殑鏄紝娑堟伅WM_KEYDOWN,WM_KEYUP浠嶇劧灝嗕紶閫掔粰紿楀彛鐨勫洖璋冨嚱鏁般偮犅犅犅? 銆銆銆澶勭悊瀹屼箣鍚庯紝DispatchMessage鍑芥暟灝嗘妸姝ゆ秷鎭彂閫佺粰璇ユ秷鎭寚瀹氱殑紿楀彛涓凡璁懼畾鐨勫洖璋冨嚱鏁般傚鏋滄秷鎭槸WM_QUIT錛屽垯GetMessage榪斿洖錛愶紝浠庤岄鍑哄驚鐜綋銆傚簲鐢ㄧ▼搴忓彲浠ヤ嬌鐢≒ostQuitMessage鏉ョ粨鏉熻嚜宸辯殑娑堟伅寰幆銆傞氬父鍦ㄤ富紿楀彛鐨刉M_DESTROY娑堟伅涓皟鐢ㄣ?br />銆銆銆涓嬮潰鎴戜滑涓句竴涓父瑙佺殑灝忎緥瀛愭潵璇存槑榪欎釜娑堟伅娉電殑榪愮敤錛?br />銆銆銆if (::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,WM_KEYLAST, PM_REMOVE)) 聽聽聽聽聽 { 聽聽聽聽聽聽聽聽聽 if (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)錛庯紟錛?br />聽聽聽聽聽 } 聽 銆銆榪欓噷鎴戜滑鎺ュ彈鎵鏈夌殑閿洏娑堟伅錛屾墍浠ュ氨鐢╓M_KEYFIRST 鍜?WM_KEYLAST浣滀負鍙傛暟銆傛渶鍚庝竴涓弬鏁板彲浠ユ槸PM_NOREMOVE 鎴栬?PM_REMOVE錛岃〃紺烘秷鎭俊鎭槸鍚﹀簲璇ヤ粠娑堟伅闃熷垪涓垹闄ゃ偮犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅? 聽聽聽 銆鎵浠ヨ繖孌靛皬浠g爜灝辨槸鍒ゆ柇鏄惁鎸変笅浜咵sc閿紝濡傛灉鏄氨榪涜澶勭悊銆?/p>
銆銆銆紿楀彛榪囩▼ 銆銆銆紿楀彛榪囩▼鏄竴涓敤浜庡鐞嗘墍鏈夊彂閫佸埌榪欎釜紿楀彛鐨勬秷鎭殑鍑芥暟銆備換浣曚竴涓獥鍙g被閮芥湁涓涓獥鍙h繃紼嬨傚悓涓涓被鐨勭獥鍙d嬌鐢ㄥ悓鏍風殑紿楀彛榪囩▼鏉ュ搷搴旀秷鎭?緋葷粺鍙戦佹秷鎭粰紿楀彛榪囩▼灝嗘秷鎭暟鎹綔涓哄弬鏁頒紶閫掔粰浠栵紝娑堟伅鍒版潵涔嬪悗錛屾寜鐓ф秷鎭被鍨嬫帓搴忚繘琛屽鐞嗭紝鍏朵腑鐨勫弬鏁板垯鐢ㄦ潵鍖哄垎涓嶅悓鐨勬秷鎭紝紿楀彛榪囩▼浣跨敤鍙傛暟浜х敓鍚堥傝涓恒?br />銆銆銆涓涓獥鍙h繃紼嬩笉緇忓父蹇界暐娑堟伅錛屽鏋滀粬涓嶅鐞嗭紝瀹冧細灝嗘秷鎭紶鍥炲埌鎵ц榛樿鐨勫鐞嗐傜獥鍙h繃紼嬮氳繃璋冪敤DefWindowProc鏉ュ仛榪欎釜澶勭悊銆傜獥鍙h繃紼嬪繀欏籸eturn涓涓間綔涓哄畠鐨勬秷鎭鐞嗙粨鏋溿傚ぇ澶氭暟紿楀彛鍙鐞嗗皬閮ㄥ垎娑堟伅鍜屽皢鍏朵粬鐨勯氳繃DefWindowProc浼犻掔粰緋葷粺鍋氶粯璁ょ殑澶勭悊銆傜獥鍙h繃紼嬭鎵鏈夊睘浜庡悓涓涓被鐨勭獥鍙e叡浜紝鑳戒負涓嶅悓鐨勭獥鍙e鐞嗘秷鎭備笅闈㈡垜浠潵鐪嬩竴涓嬪叿浣撶殑瀹炰緥錛?br />銆銆銆LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 銆銆銆{ 聽int wmId, wmEvent; 聽PAINTSTRUCT ps; 聽HDC hdc; 聽TCHAR szHello[MAX_LOADSTRING]; 聽LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
聽switch (message) 聽{ 聽聽case WM_COMMAND: 聽聽聽wmId聽聽聽 = LOWORD(wParam); 聽聽聽wmEvent = HIWORD(wParam); 聽聽聽// Parse the menu selections: 聽聽聽switch (wmId) 聽聽聽{ 聽聽聽聽case IDM_ABOUT: 聽聽聽聽聽聽 DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); 聽聽聽聽聽聽 break; 聽聽聽聽case IDM_EXIT: 聽聽聽聽聽聽 DestroyWindow(hWnd); 聽聽聽聽聽聽 break; 聽聽聽聽default: 聽聽聽聽聽聽 return DefWindowProc(hWnd, message, wParam, lParam); 聽聽聽} 聽聽聽break; 聽聽case WM_PAINT: 聽聽聽hdc = BeginPaint(hWnd, &ps); 聽聽聽// TODO: Add any drawing code here... 聽聽聽RECT rt; 聽聽聽GetClientRect(hWnd, &rt); 聽聽聽DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); 聽聽聽EndPaint(hWnd, &ps); 聽聽聽break; 聽聽case WM_DESTROY: 聽聽聽PostQuitMessage(0); 聽聽聽break; 聽聽default: 聽聽聽return DefWindowProc(hWnd, message, wParam, lParam); 聽 銆銆銆 } 聽 銆銆 return 0; 銆銆銆}
銆銆銆娑堟伅鍒嗘祦鍣?/font> 銆銆銆閫氬父鐨勭獥鍙h繃紼嬫槸閫氳繃涓涓猻witch璇彞鏉ュ疄鐜扮殑錛岃繖涓簨鎯呭緢鐑︼紝鏈夋病鏈夋洿綆渚跨殑鏂規硶鍛紵鏈夛紝閭e氨鏄秷鎭垎嫻佸櫒錛屽埄鐢ㄦ秷鎭垎嫻佸櫒錛屾垜浠彲浠ユ妸switch璇彞鍒嗘垚鏇村皬鐨勫嚱鏁幫紝姣忎竴涓秷鎭兘瀵瑰簲涓涓皬鍑芥暟錛岃繖鏍峰仛鐨勫ソ澶勫氨鏄娑堟伅鏇村鏄撶鐞嗐?br />銆銆銆涔嬫墍浠ヨ縐頒負娑堟伅鍒嗘祦鍣紝灝辨槸鍥犱負瀹冨彲浠ュ浠諱綍娑堟伅榪涜鍒嗘祦銆備笅闈㈡垜浠仛涓涓嚱鏁板氨寰堟竻妤氫簡錛?br />銆銆銆void MsgCracker(HWND hWnd,int id,HWND hWndCtl,UINT codeNotify) 聽聽聽聽聽 { 聽聽聽聽聽聽聽聽聽 switch(id) 聽聽聽聽聽聽聽聽聽 { 聽聽聽聽 case ID_A: 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if(codeNotify==EN_CHANGE)... 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break; 聽聽聽聽聽聽聽聽聽聽聽聽 case ID_B: 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if(codeNotify==BN_CLICKED)... 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break; 聽聽聽聽聽聽聽聽聽聽聽聽 .... 聽聽聽聽聽聽聽聽聽聽 } 聽聽聽聽聽 } 聽聽聽聽聽 鐒跺悗鎴戜滑淇敼涓涓嬬獥鍙h繃紼嬶細 銆銆銆LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 聽聽聽聽聽 { 聽switch(message) 聽聽聽聽聽聽聽聽 { 聽聽聽聽聽聽聽聽聽聽聽聽 HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker); 聽聽聽聽聽聽聽聽聽聽聽聽 HANDLE_MSG(hWnd,WM_DESTROY,MsgCracker); 聽聽聽聽 default: 聽聽return DefWindowProc(hWnd, message, wParam, lParam); 聽 銆銆銆 } 聽 銆銆聽聽 return 0; 銆銆銆} 聽聽聽聽聽 鍦╓indowsX.h涓畾涔変簡濡備笅鐨凥ANDLE_MSG瀹忥細 銆銆銆#define HANDLE_MSG(hwnd,msg,fn) \ 聽聽聽聽聽聽聽聽聽聽聽聽 switch(msg): return HANDLE_##msg((hwnd),(wParam),(lParam),(fn)); 聽聽聽聽聽 瀹為檯涓婏紝HANDLE_WM_XXXX閮芥槸瀹忥紝渚嬪錛欻ANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);灝嗚杞崲鎴愬涓嬪畾涔夛細 銆銆銆#define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn)\ 聽聽聽聽聽聽聽聽聽聽聽聽 ((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0L); 聽聽聽聽聽 濂戒簡錛屼簨鎯呭埌浜嗚繖涓姝ワ紝搴旇涓鍒囬兘鏄庢湕浜嗐?br />銆銆銆涓嶈繃錛屾垜浠彂鐜板湪windowsx.h閲岄潰榪樻湁涓涓畯錛欶ORWARD_WM_XXXX錛屾垜浠繕鏄偅WM_COMMAND涓轟緥錛岃繘琛屽垎鏋愶細 銆銆銆#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \ 聽聽聽聽 (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl)) 銆銆銆鎵浠ュ疄闄呬笂錛孎ORWARD_WM_XXXX灝嗘秷鎭弬鏁拌繘琛屼簡閲嶆柊鏋勯狅紝鐢熸垚浜唚Param && lParam錛岀劧鍚庤皟鐢ㄤ簡鎴戜滑瀹氫箟鐨勫嚱鏁般?br />銆銆銆濂戒簡錛屼簨鎯呭埌榪欓噷涔熺畻鏄篃孌佃惤浜嗭紝鏄庡ぉ鎴戜滑鍐嶅垎鏋愭秷鎭湪MFC涓殑澶勭悊銆?/p> ]]>
杞創:娣卞害瑙f瀽VC涓殑娑堟伅(涓? http://m.shnenglu.com/cppblog/archive/2006/07/20/10244.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 03:19:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10244.html http://m.shnenglu.com/cppblog/comments/10244.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10244.html#Feedback 0 http://m.shnenglu.com/cppblog/comments/commentRss/10244.html http://m.shnenglu.com/cppblog/services/trackbacks/10244.html 娑堟伅鏄寚浠涔堬紵 娑堟伅緋葷粺瀵逛簬涓涓獁in32紼嬪簭鏉ヨ鍗佸垎閲嶈錛屽畠鏄竴涓▼搴忚繍琛岀殑鍔ㄥ姏婧愭硥銆備竴涓秷鎭紝鏄郴緇熷畾涔夌殑涓涓?2浣嶇殑鍊鹼紝浠栧敮涓鐨勫畾涔変簡涓涓簨浠訛紝鍚慦indows鍙戝嚭涓涓氱煡錛屽憡璇夊簲鐢ㄧ▼搴忔煇涓簨鎯呭彂鐢熶簡銆備緥濡傦紝鍗曞嚮榧犳爣銆佹敼鍙樼獥鍙e昂瀵搞佹寜涓嬮敭鐩樹笂鐨勪竴涓敭閮戒細浣縒indows鍙戦佷竴涓秷鎭粰搴旂敤紼嬪簭銆?br />娑堟伅鏈韓鏄綔涓轟竴涓褰曚紶閫掔粰搴旂敤紼嬪簭鐨勶紝榪欎釜璁板綍涓寘鍚簡娑堟伅鐨勭被鍨嬩互鍙婂叾浠栦俊鎭備緥濡傦紝瀵逛簬鍗曞嚮榧犳爣鎵浜х敓鐨勬秷鎭潵璇達紝榪欎釜璁板綍涓寘鍚簡鍗曞嚮榧犳爣鏃剁殑鍧愭爣銆傝繖涓褰曠被鍨嬪彨鍋歁SG錛孧SG鍚湁鏉ヨ嚜windows搴旂敤紼嬪簭娑堟伅闃熷垪鐨勬秷鎭俊鎭紝瀹冨湪Windows涓0鏄庡涓嬶細 typedef struct tagMsg { HWND hwnd; 鎺ュ彈璇ユ秷鎭殑紿楀彛鍙ユ焺 UINT message; 娑堟伅甯擱噺鏍囪瘑絎︼紝涔熷氨鏄垜浠氬父鎵璇寸殑娑堟伅鍙?br />WPARAM wParam; 32浣嶆秷鎭殑鐗瑰畾闄勫姞淇℃伅錛岀‘鍒囧惈涔変緷璧栦簬娑堟伅鍊?br />LPARAM lParam; 32浣嶆秷鎭殑鐗瑰畾闄勫姞淇℃伅錛岀‘鍒囧惈涔変緷璧栦簬娑堟伅鍊?br />DWORD time; 娑堟伅鍒涘緩鏃剁殑鏃墮棿 POINT pt; 娑堟伅鍒涘緩鏃剁殑榧犳爣/鍏夋爣鍦ㄥ睆騫曞潗鏍囩郴涓殑浣嶇疆 }MSG; 娑堟伅鍙互鐢辯郴緇熸垨鑰呭簲鐢ㄧ▼搴忎駭鐢熴傜郴緇熷湪鍙戠敓杈撳叆浜嬩歡鏃朵駭鐢熸秷鎭備婦涓緥瀛? 褰撶敤鎴鋒暡閿? 縐誨姩榧犳爣鎴栬呭崟鍑繪帶浠躲傜郴緇熶篃浜х敓娑堟伅浠ュ搷搴旂敱搴旂敤紼嬪簭甯︽潵鐨勫彉鍖? 姣斿搴旂敤紼嬪簭鏀瑰彉緋葷粺瀛椾綋鏀瑰彉紿椾綋澶у皬銆傚簲鐢ㄧ▼搴忓彲浠ヤ駭鐢熸秷鎭嬌紿椾綋鎵ц浠誨姟錛屾垨鑰呬笌鍏朵粬搴旂敤紼嬪簭涓殑紿楀彛閫氳銆? 娑堟伅涓湁浠涔堬紵 鎴戜滑緇欏嚭浜嗕笂闈㈢殑娉ㄩ噴錛屾槸涓嶆槸浼氬娑堟伅緇撴瀯鏈変簡涓涓瘮杈冩竻妤氱殑璁よ瘑錛熷鏋滆繕娌℃湁錛岄偅涔堟垜浠啀璇曠潃緇欏嚭涓嬮潰鐨勮В閲婏細 hwnd 32浣嶇殑紿楀彛鍙ユ焺銆傜獥鍙e彲浠ユ槸浠諱綍綾誨瀷鐨勫睆騫曞璞★紝鍥犱負Win32鑳藉緇存姢澶у鏁板彲瑙嗗璞$殑鍙ユ焺(紿楀彛銆佸璇濇銆佹寜閽佺紪杈戞絳?銆?br />message鐢ㄤ簬鍖哄埆鍏朵粬娑堟伅鐨勫父閲忓鹼紝榪欎簺甯擱噺鍙互鏄疻indows鍗曞厓涓瀹氫箟鐨勫父閲忥紝涔熷彲浠ユ槸鑷畾涔夌殑甯擱噺銆傛秷鎭爣璇嗙浠ュ父閲忓懡鍚嶇殑鏂瑰紡鎸囧嚭娑堟伅鐨勫惈涔夈傚綋紿楀彛榪囩▼鎺ユ敹鍒版秷鎭箣鍚庯紝浠栧氨浼氫嬌鐢ㄦ秷鎭爣璇嗙鏉ュ喅瀹氬浣曞鐞嗘秷鎭備緥濡傘乄M_PAINT鍛婅瘔紿楀彛榪囩▼紿椾綋瀹㈡埛鍖鴻鏀瑰彉浜嗛渶瑕侀噸緇樸傜鍙峰父閲忔寚瀹氱郴緇熸秷鎭睘浜庣殑綾誨埆錛屽叾鍓嶇紑鎸囨槑浜嗗鐞嗚В閲婃秷鎭殑紿椾綋鐨勭被鍨嬨?br />wParam 閫氬父鏄竴涓笌娑堟伅鏈夊叧鐨勫父閲忓鹼紝涔熷彲鑳芥槸紿楀彛鎴栨帶浠剁殑鍙ユ焺銆?br />lParam 閫氬父鏄竴涓寚鍚戝唴瀛樹腑鏁版嵁鐨勬寚閽堛傜敱浜嶹Param銆乴Param鍜孭ointer閮芥槸32浣嶇殑錛屽洜姝わ紝瀹冧滑涔嬮棿鍙互鐩鎬簰杞崲銆?br /> 娑堟伅鏍囪瘑絎︾殑鍊?br />緋葷粺淇濈暀娑堟伅鏍囪瘑絎︾殑鍊煎湪0x0000鍦?x03ff(WM_USER-1)鑼冨洿銆傝繖浜涘艱緋葷粺瀹氫箟娑堟伅浣跨敤銆?搴旂敤紼嬪簭涓嶈兘浣跨敤榪欎簺鍊肩粰鑷繁鐨勬秷鎭傛垜浠『渚胯涓涓嬪叿鏈夋爣蹇楁х殑娑堟伅鍊鹼細 WM_NULL---0x0000 絀烘秷鎭?br />0x0001----0x0087 涓昏鏄獥鍙f秷鎭?br />0x00A0----0x00A9 闈炲鎴峰尯娑堟伅 0x0100----0x0108 閿洏娑堟伅 0x0111----0x0126 鑿滃崟娑堟伅 0x0132----0x0138 棰滆壊鎺у埗娑堟伅 0x0200----0x020A 榧犳爣娑堟伅 0x0211----0x0213 鑿滃崟寰幆娑堟伅 0x0220----0x0230 澶氭枃妗f秷鎭?br />0x03E0----0x03E8 DDE娑堟伅 0x0400 WM_USER 0x8000 WM_APP 0x0400----0x7FFF 搴旂敤紼嬪簭鑷畾涔夌鏈夋秷鎭?br /> 娑堟伅鏈夊摢鍑犵錛?br />鍏跺疄錛寃indows涓殑娑堟伅铏界劧寰堝錛屼絾鏄綾誨茍涓嶇箒鏉傦紝澶т綋涓婃湁3縐嶏細紿楀彛娑堟伅銆佸懡浠ゆ秷鎭拰鎺т歡閫氱煡娑堟伅銆?br />紿楀彛娑堟伅澶ф鏄郴緇熶腑鏈涓哄父瑙佺殑娑堟伅錛屽畠鏄寚鐢辨搷浣滅郴緇熷拰鎺у埗鍏朵粬紿楀彛鐨勭獥鍙f墍浣跨敤鐨勬秷鎭備緥濡侰reateWindow銆丏estroyWindow鍜孧oveWindow絳夐兘浼氭縺鍙戠獥鍙f秷鎭紝榪樻湁鎴戜滑鍦ㄤ笂闈㈣皥鍒扮殑鍗曞嚮榧犳爣鎵浜х敓鐨勬秷鎭篃鏄竴縐嶇獥鍙f秷鎭?br />鍛戒護娑堟伅錛岃繖鏄竴縐嶇壒孌婄殑紿楀彛娑堟伅錛屼粬鐢ㄦ潵澶勭悊浠庝竴涓獥鍙e彂閫佸埌鍙︿竴涓獥鍙g殑鐢ㄦ埛璇鋒眰錛屼緥濡傛寜涓嬩竴涓寜閽紝浠栧氨浼氬悜涓葷獥鍙e彂閫佷竴涓懡浠ゆ秷鎭?br />鎺т歡閫氱煡娑堟伅錛屾槸鎸囪繖鏍蜂竴縐嶆秷鎭紝涓涓獥鍙e唴鐨勫瓙鎺т歡鍙戠敓浜嗕竴浜涗簨鎯咃紝闇瑕侀氱煡鐖剁獥鍙c傞氱煡娑堟伅鍙傜敤浜庢爣鍑嗙殑紿楀彛鎺т歡濡傛寜閽佸垪琛ㄦ銆佺粍鍚堟銆佺紪杈戞錛屼互鍙奧indows鍏叡鎺т歡濡傛爲鐘惰鍥俱佸垪琛ㄨ鍥劇瓑銆備緥濡傦紝鍗曞嚮鎴栧弻鍑諱竴涓帶浠躲佸湪鎺т歡涓夋嫨閮ㄥ垎鏂囨湰銆佹搷浣滄帶浠剁殑婊氬姩鏉¢兘浼氫駭鐢熼氱煡娑堟伅銆?濂圭被浼間簬鍛戒護娑堟伅錛屽綋鐢ㄦ埛涓庢帶浠剁獥鍙d氦浜掓椂錛岄偅涔堟帶浠墮氱煡娑堟伅灝變細浠庢帶浠剁獥鍙e彂閫佸埌瀹冪殑涓葷獥鍙c備絾鏄繖縐嶆秷鎭殑瀛樺湪騫朵笉鏄負浜嗗鐞嗙敤鎴峰懡浠わ紝鑰屾槸涓轟簡璁╀富紿楀彛鑳藉鏀瑰彉鎺т歡錛屼緥濡傚姞杞姐佹樉紺烘暟鎹備緥濡傛寜涓嬩竴涓寜閽紝浠栧悜鐖剁獥鍙e彂閫佺殑娑堟伅涔熷彲浠ョ湅浣滄槸涓涓帶浠墮氱煡娑堟伅錛涘崟鍑婚紶鏍囨墍浜х敓鐨勬秷鎭彲浠ョ敱涓葷獥鍙g洿鎺ュ鐞嗭紝鐒跺悗浜ょ粰鎺т歡紿楀彛澶勭悊銆?br />鍏朵腑紿楀彛娑堟伅鍙婃帶浠墮氱煡娑堟伅涓昏鐢辯獥鍙g被鍗崇洿鎺ユ垨闂存帴鐢盋WND綾繪淳鐢熺被澶勭悊銆傜浉瀵圭獥鍙f秷鎭強鎺т歡閫氱煡娑堟伅鑰岃█錛屽懡浠ゆ秷鎭殑澶勭悊瀵硅薄鑼冨洿灝卞箍寰楀錛屽畠涓嶄粎鍙互鐢辯獥鍙g被澶勭悊錛岃繕鍙互鐢辨枃妗g被錛屾枃妗fā鏉跨被鍙婂簲鐢ㄧ被鎵澶勭悊銆?br />鐢變簬鎺т歡閫氱煡娑堟伅寰堥噸瑕佺殑錛屼漢浠敤鐨勪篃姣旇緝澶氾紝浣嗘槸鍏蜂綋鐨勫惈涔夊線寰浠ゅ垵瀛﹁呮檿澶磋漿鍚戯紝鎵浠ユ垜鍐沖畾鎶婂父瑙佺殑鍑犱釜鍒楀嚭鏉ヤ緵澶у鍙傝冿細 鎸夋壄鎺т歡 BN_CLICKED 鐢ㄦ埛鍗曞嚮浜嗘寜閽?br />BN_DISABLE 鎸夐挳琚姝?br />BN_DOUBLECLICKED 鐢ㄦ埛鍙屽嚮浜嗘寜閽?br />BN_HILITE 鐢?鎴峰姞浜簡鎸夐挳 BN_PAINT 鎸夐挳搴斿綋閲嶇敾 BN_UNHILITE 鍔犱寒搴斿綋鍘繪帀 緇勫悎妗嗘帶浠?br />CBN_CLOSEUP 緇勫悎妗嗙殑鍒楄〃妗嗚鍏抽棴 CBN_DBLCLK 鐢ㄦ埛鍙屽嚮浜嗕竴涓瓧絎︿覆 CBN_DROPDOWN 緇勫悎妗嗙殑鍒楄〃妗嗚鎷夊嚭 CBN_EDITCHANGE 鐢ㄦ埛淇敼浜嗙紪杈戞涓殑鏂囨湰 CBN_EDITUPDATE 緙栬緫妗嗗唴鐨勬枃鏈嵆灝嗘洿鏂?br />CBN_ERRSPACE 緇勫悎妗嗗唴瀛樹笉瓚?br />CBN_KILLFOCUS 緇勫悎妗嗗け鍘昏緭鍏ョ劍鐐?br />CBN_SELCHANGE 鍦ㄧ粍鍚堟涓夋嫨浜嗕竴欏?br />CBN_SELENDCANCEL 鐢ㄦ埛鐨勯夋嫨搴斿綋琚彇娑?br />CBN_SELENDOK 鐢ㄦ埛鐨勯夋嫨鏄悎娉曠殑 CBN_SETFOCUS 緇勫悎妗嗚幏寰楄緭鍏ョ劍鐐?br />緙栬緫妗嗘帶浠?br />EN_CHANGE 緙栬緫妗嗕腑鐨勬枃鏈繁鏇存柊 EN_ERRSPACE 緙栬緫妗嗗唴瀛樹笉瓚?br />EN_HSCROLL 鐢ㄦ埛鐐瑰嚮浜嗘按騫蟲粴鍔ㄦ潯 EN_KILLFOCUS 緙栬緫妗嗘鍦ㄥけ鍘昏緭鍏ョ劍鐐?br />EN_MAXTEXT 鎻掑叆鐨勫唴瀹硅鎴柇 EN_SETFOCUS 緙栬緫妗嗚幏寰楄緭鍏ョ劍鐐?br />EN_UPDATE 緙栬緫妗嗕腑鐨勬枃鏈皢瑕佹洿鏂?br />EN_VSCROLL 鐢ㄦ埛鐐瑰嚮浜嗗瀭鐩存粴鍔ㄦ潯娑堟伅鍚箟 鍒楄〃妗嗘帶浠?br />LBN_DBLCLK 鐢ㄦ埛鍙屽嚮浜嗕竴欏?br />LBN_ERRSPACE 鍒楄〃妗嗗唴瀛樹笉澶?br />LBN_KILLFOCUS 鍒楄〃妗嗘鍦ㄥけ鍘昏緭鍏ョ劍鐐?br />LBN_SELCANCEL 閫夋嫨琚彇娑?br />LBN_SELCHANGE 閫夋嫨浜嗗彟涓欏?br />LBN_SETFOCUS 鍒楄〃妗嗚幏寰楄緭鍏ョ劍鐐?br /> ]]> CWnd涓嬪嚑涓浉浼肩殑WindowMessage Functions鐨勮璁?/title> http://m.shnenglu.com/cppblog/archive/2006/07/20/10242.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Thu, 20 Jul 2006 00:40:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/20/10242.html http://m.shnenglu.com/cppblog/comments/10242.html http://m.shnenglu.com/cppblog/archive/2006/07/20/10242.html#Feedback 1 http://m.shnenglu.com/cppblog/comments/commentRss/10242.html http://m.shnenglu.com/cppblog/services/trackbacks/10242.html 棣栧厛姒傝鐨勮 SendMessage 鍚慍Wnd瀵硅薄鍙戦佷竴涓秷鎭紝鐩村埌榪欐潯娑堟伅琚鐞嗕箣鍚庢墠榪斿洖 PostMessage 灝嗕竴鏉℃秷鎭斁鍏ュ簲鐢ㄧ▼搴忕殑娑堟伅闃熷垪錛?strong>鐒跺悗涓嶇瓑紿楀彛澶勭悊榪欐潯娑堟伅鐩存帴榪斿洖 SendNotifyMessage 灝嗕竴鏉℃秷鎭彂閫佸埌紿楀彛騫跺敖蹇繑鍥烇紝榪斿洖鐨勯熷害鍙栧喅浜庤紿楀彛鏄惁鏄敱璋冪敤綰跨▼鎵鍒涘緩 涓嬮潰鎴戦愭潯緇嗙粏璇存槑 CWnd::SendMessage LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAMlParam = 0 ); 榪斿洖鍊?: 娑堟伅澶勭悊鐨勭粨鏋滐紱瀹冪殑鍊間緷璧栦簬鍙戦佺殑娑堟伅銆?/strong> 鍙傛暟 : message聽聽聽 鎸囧畾浜嗚鍙戦佺殑娑堟伅銆?br />聽聽聽聽聽聽聽聽聽聽聽 wParam聽聽聽 鎸囧畾浜嗕笌娑堟伅鏈夊叧鐨勯檮鍔犱俊鎭?br />聽聽聽聽聽聽聽聽聽聽聽 lParam聽聽聽聽聽 鎸囧畾浜嗕笌娑堟伅鏈夊叧鐨勯檮鍔犱俊鎭?br />璇存槑 :聽 榪欎釜鍑芥暟鍚戠獥鍙e彂閫佹寚瀹氱殑娑堟伅 銆?br />聽聽聽聽聽聽聽聽聽聽聽聽 SendMessage鎴愬憳鍑芥暟鐩存帴璋冪敤紿楀彛榪囩▼騫跺湪紿楀彛榪囩▼澶勭悊浜嗘秷鎭互鍚庢墠榪斿洖銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 榪欎笌PostMessage鎴愬憳鍑芥暟褰㈡垚瀵規瘮錛岃鍑芥暟灝嗘秷鎭斁鍏ョ獥鍙g殑娑堟伅闃熷垪騫剁珛鍗寵繑鍥炪?br /> CWnd::PostMessage BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam =0 ); 榪斿洖鍊?: 濡傛灉鍏竷浜嗘秷鎭紝鍒欒繑鍥為潪闆跺鹼紱鍚﹀垯榪斿洖0銆?/strong> 鍙傛暟 :聽聽聽 message聽聽聽 鎸囧畾浜嗚鍏竷鐨勬秷鎭?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wParam聽聽聽 鎸囧畾浜嗛檮鍔犵殑娑堟伅淇℃伅銆傝繖涓弬鏁扮殑鍐呭渚濊禆浜庤鍏竷鐨勬秷鎭?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽lParam聽聽聽聽聽鎸囧畾浜嗛檮鍔犵殑娑堟伅淇℃伅銆傝繖涓弬鏁扮殑鍐呭渚濊禆浜庤鍏竷鐨勬秷鎭?br />璇存槑 : 榪欎釜鍑芥暟灝嗕竴涓秷鎭斁鍏ョ獥鍙g殑娑堟伅闃熷垪錛岀劧鍚庣洿鎺ヨ繑鍥烇紝騫朵笉絳夊緟瀵瑰簲鐨勭獥鍙e鐞嗘秷鎭?br />聽聽聽聽聽聽聽聽聽聽 娑堟伅闃熷垪涓殑娑堟伅鏄氳繃璋冪敤Windows鐨凣etMessage鎴朠eekMessage鍑芥暟鏉ヨ幏寰楃殑銆傚彲浠ラ氳繃Windows鐨凱ostMessage鍑芥暟鏉ヨ闂叾瀹冨簲鐢ㄧ▼搴忋?br /> CWnd::SendNotifyMessage BOOL SendNotifyMessage( UINT message, WPARAM wParam, LPARAMlParam ); 榪斿洖鍊悸?: 濡傛灉鍑芥暟鎴愬姛錛屽垯榪斿洖闈為浂鍊鹼紱鍚﹀垯榪斿洖0銆?br /> 鍙傛暟 :聽聽聽聽 message聽聽聽 鎸囧畾浜嗚鍙戦佺殑娑堟伅銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wParam聽聽聽 鎸囧畾浜嗕笌娑堟伅鏈夊叧鐨勯檮鍔犱俊鎭?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 lParam聽聽聽聽聽 鎸囧畾浜嗕笌娑堟伅鏈夊叧鐨勯檮鍔犱俊鎭?br />璇存槑 : 榪欎釜鍑芥暟鍚戠獥鍙e彂閫佹寚瀹氱殑娑堟伅銆?br />聽聽聽聽聽聽聽聽聽聽聽 濡傛灉紿楀彛鏄敱璋冪敤綰跨▼鍒涘緩鐨勶紝鍒橲endNotifyMessage璋冪敤紿楀彛鐨勭獥鍙h繃紼嬶紝騫跺湪紿楀彛澶勭悊浜嗘秷鎭箣鍚庤繑鍥炪傚鏋滅獥鍙f槸鐢卞叾瀹冪嚎紼嬪垱寤虹殑錛屽垯SendNotifyMessage灝嗘秷鎭紶閫掔粰紿楀彛榪囩▼騫剁珛鍗寵繑鍥烇紱瀹冨茍涓嶇瓑寰呯獥鍙h繃紼嬬粨鏉熷鐞嗘秷鎭?br /> 綆鍗曟葷粨涓涓嬶紝 聽聽聽PostMessage鍙礋璐e皢娑堟伅鏀懼埌娑堟伅闃熷垪涓紝涓嶇‘瀹氫綍鏃跺強鏄惁澶勭悊 聽聽聽聽SendMessage瑕佺瓑鍒板彈鍒版秷鎭鐞嗙殑榪斿洖鐮侊紙DWord綾誨瀷錛夊悗鎵嶇戶緇?br />聽聽聽聽PostMessage鎵ц鍚庨┈涓婅繑鍥?br />聽聽聽聽SendMessage蹇呴』絳夊埌娑堟伅琚鐞嗗悗鎵嶄細榪斿洖銆?br /> 聽聽聽SendMessage娑堟伅鍙戝嚭鍚庯紝濡備笉鑳藉敖蹇緱鍒拌В鍐沖搷搴旓紝鍒欎細瀵艱嚧紼嬪簭鐨勫仠婊烇紝鎵浠ユ鍑芥暟鎱庣敤銆侾ostMessage鍒欐棤姝ゅ悗鏋滐紝涓嶈繃浣犺鏄嬌鐢≒ostMessage錛岄偅浣犵殑娑堟伅涓嶇煡閬撹絳夊埌鐚村勾椹湀鎵嶈兘琚鐞嗐係endMessage鍙互淇濊瘉浣犵殑娑堟伅鍦ㄥ緱涓嶅埌澶勭悊鐨勬儏鍐典笅璋佷篃鍒兂鍔ㄤ綘鐨勭獥鍙c?br />聽聽聽聽 鏃犺鏄疨ostMessage榪樻槸SendMessage鍧囩敱涓葷嚎紼嬪鐞嗐?br />Windows鐨勭嚎紼嬫湁UI(鐢ㄦ埛鎺ュ彛)綰跨▼鍜屽伐浣滅嚎紼嬶紝涓鑸伐浣滅嚎紼嬫病鏈夎嚜宸辯殑娑堟伅寰幆錛岃孶I(鐢ㄦ埛鎺ュ彛)綰跨▼鏈夎嚜宸辯殑娑堟伅寰幆銆?br />聽聽聽 鎵浠ヤ竴鑸富綰跨▼搴旇鏄疷I(鐢ㄦ埛鎺ュ彛)綰跨▼錛屽叾浣欑殑澶勭悊鐗瑰畾浠誨姟鐨勭嚎紼嬮兘鏄伐浣滅嚎紼嬶紝瀹冧滑鎶婃秷鎭彂緇欎富綰跨▼錛岀敱涓葷嚎紼嬬殑娑堟伅澶勭悊鍑芥暟澶勭悊銆?br />SendMessage鏄樆濉炵殑錛屽畠瑕佺瓑鍒頒富綰跨▼澶勭悊瀹屾秷鎭悗鎵嶈繑鍥炵殑銆?br />鑰孭ostMessage鏄潪闃誨鐨勶紝璋冪敤涔嬪悗錛岀珛鍗寵繑鍥烇紝鑰屾病鏈夊幓鍏沖績涓葷嚎紼嬪張娌℃湁澶勭悊榪欎釜娑堟伅銆?br /> ]]> 綆榪癡C/MFC涓嬬獥鍙g殑鎷栨斁 http://m.shnenglu.com/cppblog/archive/2006/07/18/10200.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Tue, 18 Jul 2006 09:40:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/18/10200.html http://m.shnenglu.com/cppblog/comments/10200.html http://m.shnenglu.com/cppblog/archive/2006/07/18/10200.html#Feedback 4 http://m.shnenglu.com/cppblog/comments/commentRss/10200.html http://m.shnenglu.com/cppblog/services/trackbacks/10200.html 紿楀彛鍦ㄦ帴鏀跺鎴峰尯鎴栭潪瀹㈡埛鍖虹殑榧犳爣娑堟伅涔嬪墠錛屽畠閮戒竴瀹氶鍏堟帴鏀跺埌鍏夋爣鐨勫睆騫曞潗鏍囧拰WM_NCHITTEST娑堟伅銆傚ぇ澶氭暟搴旂敤紼嬪簭騫朵笉澶勭悊WM_NCHITTEST娑堟伅錛岃屾槸璁¦indows鑷澶勭悊WM_NCHITTEST娑堟伅銆?br />渚嬬▼1[宸ョ▼鍚峢t]聽聽聽聽聽 鏈緥紼嬮樆姝㈠湪涓涓爣棰樻爮涓婄殑鍙屽嚮褰卞搷紿楀彛 澶存枃浠秇tView.h涓坊鍔燼fx_msg void OnNcLButtonDblClk(UINT nHitTest,CPoint point); 涓繪枃浠秇tView.cpp涓坊鍔燨N_WM_NCLBUTTONDBLCLK()鍜?br />void CHtView::OnNcLButtonDblClk(UINT nHitTest,CPoint point); { 聽聽聽 if( nHitTest != HTCAPTION) 聽聽聽聽聽聽 CView::OnNcLButtonDblClk(nHitTest,point); } 渚嬬▼2聽[宸ョ▼鍚峢it]聽聽聽聽 鏈緥紼嬪疄鐜頒簡瀹㈡埛鍖虹殑紿楀彛鎷栧姩 澶存枃浠秇itView.h涓坊鍔燼fx_msg UINT OnNcHitTest(CPoint point); 涓繪枃浠秇itView.cpp涓坊鍔燨N_WM_NCHITTEST()鍜?br />UINT CHitView::OnNcHitTest(CPoint point) { 聽聽聽 UINT nHitTest = CView::OnNcHitTest(point); 聽聽聽 if(nHitTest == HTCLIENT) 聽聽聽 nHitTest = HTCAPTION; 聽聽 聽return nHitTest; } 闇瑕佹簮浠g爜渚嬬▼鐨勫彲浠ョ粰鎴戠暀璦銆?img src ="http://m.shnenglu.com/cppblog/aggbug/10200.html" width = "1" height = "1" /> ]]> 杞澆鑷ぉ铦庝箣宸?Windows緙栫▼涓璖etViewportOrg涓嶴etWindowOrg鐨勭悊瑙? http://m.shnenglu.com/cppblog/archive/2006/07/12/9716.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Wed, 12 Jul 2006 02:08:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/12/9716.html http://m.shnenglu.com/cppblog/comments/9716.html http://m.shnenglu.com/cppblog/archive/2006/07/12/9716.html#Feedback 2 http://m.shnenglu.com/cppblog/comments/commentRss/9716.html http://m.shnenglu.com/cppblog/services/trackbacks/9716.html Windows緙栫▼涓璖etViewportOrg涓嶴etWindowOrg鐨勭悊瑙?/div>
鍏抽敭璇?/b>錛?MFC, 聽聽 SetWindowOrg, 聽聽 SetViewportOrg, 聽聽 娣卞叆嫻呭嚭MFC 聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
鏈榪戠獊鐒跺張寰堟湁嬋鎯呯殑寮濮嬬湅Jeff Prosise鐨勯偅鏈?Programming Windows with MFC, 2 ed."銆傚敖綆℃槸鑻辨枃鐗堢殑錛屼絾鏄劅瑙夎繖鏈功涓婃墜姣斿枆緇撶殑閭f湰鎵璋撶殑 娣卞叆嫻呭嚭MFC 瑕佸鏄撶悊瑙g殑澶氥傚欏悓瀛︾粰浜轟竴縐嶆晠寮勭巹铏氭晠浣滄繁娌夌殑鎰熻錛岃孞eff Prosise鐨勮繖鏈功鎵嶇湡姝g殑縐板緱涓婃槸娣卞叆嫻呭嚭銆?/p>
灝界濡傛錛屽叾涓湁鍏矴DI緇樺浘涓殑鍧愭爣鏄犲皠閮ㄥ垎榪樻槸鏈変竴涓棶棰樻病鏈夋悶娓呮錛岄偅灝辨槸SetWindowOrg鍜孲etViewportOrg榪欎袱涓嚱鏁板埌搴曞簲璇ュ浣曠悊瑙c傛綐鐖辨皯緲昏瘧鐨勯偅鏈琕C鍐呭箷娌℃湁璁叉竻妤氾紱Jeff Prosise鐨勮繖鏈功娌℃湁璁叉竻妤氾紱MSDN涓婄殑涓滆タ鐪嬬殑涔熸槸涓澶撮浘姘達紱Charles Petzold鐨勯偅鏈功榪樻病鏈夋潵寰楀強鐪嬨傚洜涓鴻繖涓棶棰橈紝鏄ㄥぉ鏅氫笂鏄甫鐫閬楁喚鐨勫洶鎯戝叆鐫$殑銆?/p>
鎬葷殑鏉ヨ錛屾垜瀵硅繖涓や釜鍑芥暟鐨勭悊瑙e鑷寸殑緇撴灉鏄笌瀹為檯紼嬪簭榪愯鐨勭粨鏋滄埅鐒剁浉鍙嶃備緷鎹甅SDN涓婄殑瑙i噴錛屾湁涓涓緢涓ラ噸鐨勯棶棰樻病鏈夐槓榪版竻妤氾紝閭e氨鏄細鎵璋撶殑SetWindowOrg(x, y)鍑芥暟錛屽埌搴曟槸琛ㄧずset window origin to (x, y)榪樻槸set window origin as (x, y)錛泃o鍜宎s鍦ㄦ墽琛岀殑鏃跺欙紝鍏舵搷浣滅殑鏁堟灉鏄埅鐒剁浉鍙嶇殑銆?/p>
set window origin to (x, y)琛ㄧず灝嗗潗鏍囧師鐐硅緗埌(x, y)錛涘嵆浠?x, y)浣滀負鍧愭爣鍘熺偣錛屾鏃跺師鐐瑰潗鏍囦笉鍐嶄負(0, 0)錛?br />set window origin as (x, y)琛ㄧず灝嗗師鏉ョ殑鍘熺偣(0, 0)鐨勫潗鏍囨敼涓?x, y)錛涘嵆灝嗘墍鏈夌偣鐨勫潗鏍囧鍔?+x, +y)錛?/p>
鐜板湪鎴戠殑鐞嗚В鏄細搴旇鏄?set window origin to (x, y)銆傝繖縐嶇悊瑙e熀浜庝互涓嬪嚑涓墠鎻愶細 1. 鎵鏈夌粯鍥捐鍙ヤ腑緇欏嚭鐨勫潗鏍囷紝鍏ㄩ儴鏄昏緫鍧愭爣錛屽嵆鍦?window 涓殑鍧愭爣(鐩稿浜巚iewport鎵琛ㄧず鐨勮澶囧潗鏍囪岃█); 2. 鎵鏈夌敤鎴瘋兘鐪嬪埌鐨勭偣錛屽叾璁懼鍧愭爣涓瀹氭槸浣嶄簬(0, 0)鍜?1024, 768)鑼冨洿鍐咃紱(鍋囪鏄劇ず鍣ㄤ負杈撳嚭璁懼錛岄噰鐢∕M_TEXT鏄犲皠鏂瑰紡錛屼笖灞忓箷鍒嗚鯨鐜囦負1024*768); 3. 鎵璋撯?0,0)灝卞師鐐癸紝鍘熺偣鐨勫潗鏍囦竴瀹氬氨鏄?0,0)鈥濊繖縐嶇悊瑙o紝鏄敊璇殑錛?br />4. Viewport涓殑鍧愭爣琛ㄧず璁懼鍧愭爣錛沇indow涓殑鍧愭爣琛ㄧず閫昏緫鍧愭爣錛?br />5. 褰撳湪閫昏緫鍧愭爣涓寚瀹氭柊鐨勫師鐐瑰悗錛屽湪鎵ц鏄犲皠鏃訛紝璁懼鍧愭爣鐨勫師鐐逛竴瀹氳涓庨昏緫鍧愭爣鐨勬柊鍘熺偣閲嶅悎錛涘弽榪囨潵涔熸槸涓鏍鳳紝鍗充袱涓潗鏍囩郴鐨勫師鐐逛竴瀹氳閲嶅悎銆?/p>
涓嬮潰涓句緥璇存槑錛?MM_TEXT鏄犲皠妯″紡)
(1) CRect rect(0, 0, 200, 200); dc.rectangle(rect); 涓婇潰鐨勮鍙ュ湪灞忓箷鐨勬渶宸︿笂瑙掔粯鍒朵竴涓鏂瑰艦;(鍥犱負姝ゆ椂閫昏緫鍧愭爣涓庤澶囧潗鏍囨病鏈夊亸縐?
(2) dc.SetViewportOrg(100, 100); CRect rect(0, 0, 200, 200); dc.rectangle(rect); 灝嗚澶囧潗鏍囩殑鍘熺偣璁劇疆鍒?100, 100)錛涘嵆璁懼鍧愭爣鐨勫師鐐逛笉鍦?0, 0)澶勶紝鑰屾槸鍦?100, 100)澶勶紱姝ゆ椂鑻ユ墽琛屾槧灝勭殑璇濓紝閫昏緫鍧愭爣鐨勫師鐐?0, 0)闇瑕佷笌璁懼鍧愭爣鐨勫師鐐?100, 100)閲嶅悎(鍙傝冨墠鎻?)錛涢偅涔堟鏃剁粯鍒剁殑鐭╁艦(0, 0, 200, 200)鐨勫潗鏍?涓洪昏緫鍧愭爣錛屽弬鑰冨墠鎻?)鍦ㄨ澶囧潗鏍囦腑灝變細鏄犲皠涓?100, 100, 300, 300)錛屾渶緇堟垜浠湪鏄劇ず鍣ㄤ笂鐪嬪埌鐨勪細鏄竴涓悜鍙充笅鏂瑰亸縐?100, 100)鐨勪竴涓竟闀夸負200鐨勬鏂瑰艦(鐢ㄦ埛鐪嬪埌鐨勭偣鏄湪璁懼鍧愭爣涓殑錛屽弬鑰冨墠鎻?)
(3) dc.SetWindowOrg(100, 100); CRect rect(0, 0, 200, 200); dc.rectangle(rect); 灝嗛昏緫鍧愭爣鐨勫師鐐硅緗埌(100, 100)錛涘嵆閫昏緫鍧愭爣鐨勫師鐐逛笉鍦?0, 0)澶勶紝鑰屾槸鍦?100, 100)澶勶紱姝ゆ椂鑻ユ墽琛屾槧灝勭殑璇濓紝璁懼鍧愭爣鐨勫師鐐?0, 0)闇瑕佷笌閫昏緫鍧愭爣鐨勫師鐐?100, 100)閲嶅悎(鍙傝冨墠鎻?)錛涢偅涔堟鏃剁粯鍒剁殑鐭╁艦(0, 0, 200, 200)鐨勫潗鏍?涓洪昏緫鍧愭爣錛屽弬鑰冨墠鎻?)鍦ㄨ澶囧潗鏍囦腑灝變細鏄犲皠涓?-100, -100, 100, 100)錛屾渶緇堟垜浠湪鏄劇ず鍣ㄤ笂鐪嬪埌鐨勪細鏄竴涓彧鏈?/4涓ぇ灝忕殑鐭╁艦鐨勪竴閮ㄥ垎(浜嬪疄涓婄浉褰撲簬鍚戝乏涓婃柟鍋忕Щ(100, 100)鐨勪竴涓竟闀夸負200鐨勬鏂瑰艦銆傛敞鎰忥細鐢ㄦ埛鐪嬪埌鐨勭偣鏄湪璁懼鍧愭爣涓殑錛屽弬鑰冨墠鎻?)
]]> 杞澆錛氱悊瑙etWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt http://m.shnenglu.com/cppblog/archive/2006/07/12/9715.html娼滈緳灞?/dc:creator>娼滈緳灞?/author>Wed, 12 Jul 2006 02:07:00 GMT http://m.shnenglu.com/cppblog/archive/2006/07/12/9715.html http://m.shnenglu.com/cppblog/comments/9715.html http://m.shnenglu.com/cppblog/archive/2006/07/12/9715.html#Feedback 3 http://m.shnenglu.com/cppblog/comments/commentRss/9715.html http://m.shnenglu.com/cppblog/services/trackbacks/9715.html
鐞嗚ВSetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt 鎸変範鎯紝(0,0)灝卞師鐐癸紝鍘熺偣灝辨槸(0,0)錛屼絾鏄鏋滅敤姝ゆ潵鐞嗚Вwindows鐨刴ap mode錛屽氨浼氳蛋寮礬銆傚叾瀹烇紝紼嶅井鏀瑰彉涓涓嬭蹇碉紝windows鐨刴ap mode灝辨瘮杈冨ソ鐞嗚В浜嗐備婦渚嬭鏄庯細 page space---->device space pDC->SetMapMode(MM_LOMETRIC); pDC->SetWindowOrg(40,0);銆銆//榪欏彞鈥滆瀹氣漰age space鐨勫師鐐逛負(40,0)錛屾敞鎰忥紝 //榪欐椂(40,0)灝辨槸鍘熺偣錛屽師鐐瑰氨鏄?40,0)榪欎釜鐐癸紝鍏跺疄錛?0,0)涓庡師鐐規病鏈夊繀鐒惰仈緋匯傝繖 //涓鍙ュ涓嬮潰鐨勭敾鍥懼嚱鏁板湪page space涓墍浣滅殑鍥句笉浼氭湁浠諱綍褰卞搷銆備竴鍙ヨ瘽錛歋etWindowOrg //灝辨槸鎸囧畾涓涓嬶紝page space涓摢涓偣涓哄師鐐廣?br />pDC->Rectangle(0,0,100,-100); pDC->Rectangle(0,-100,50,-200); 鍚岀悊錛孲etViewportOrg涔熸槸鎸囧畾涓涓嬶紝device space涓摢涓偣涓哄師鐐癸紝涓や釜鍧愭爣緋繪槧灝勬椂錛屼袱涓師鐐歸噸鍚堛?br /> SetWindowExt璁懼畾page space鐨勫ぇ灝忥紝SetViewportOrg璁懼畾device space鐨勫ぇ灝忥紝鍏跺疄錛岀湡姝f湁鎰忎箟鐨勫彧鏄袱鑰呯殑姣斾緥鍏崇郴錛屼緥濡傦紝鍦ㄤ竴涓?024*768鐨勬樉紺哄睆涓婏細 pDC->SetMapMode(MM_ISOTROPIC); pDC->SetWindowExt(10240,7680); pDC->SetViewportExt(1024,768); pDC->Rectangle(0,0,100,100); 銆銆灝變細鐢諱竴涓?0 pixels*10 pixels鐨勭煩褰€傚叾鏈川灝辨槸錛孹鏂瑰悜錛屾瘡涓昏緫鍗曚綅鏈?024/10240涓薄绱狅紝Y鏂瑰悜姣忎釜閫昏緫鍗曚綅鏈?68/7680涓薄绱犮傚洜姝わ紝涓嬮潰鐨勪唬鐮佹湁鐩稿悓鐨勪綔鐢細 pDC->SetMapMode(MM_ISOTROPIC); pDC->SetWindowExt(102400,76800); pDC->SetViewportExt(10240,7680); pDC->Rectangle(0,0,100,100); 涓よ呮湰璐ㄤ竴鏍鳳紝鍓嶈呮洿鏄撲簬鐞嗚В銆?br />浣滆? johnson 聽聽 鏉ユ簮: 涔濅節鏄熶釜浜轟富欏?-- 紼嬪簭璁捐 -- C++紼嬪簭璁捐
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
美女尤物久久精品 |
久久午夜视频 |
亚洲第一精品福利 |
亚洲欧美自拍偷拍 |
久久精品一区中文字幕 |
性8sex亚洲区入口 |
国语对白精品一区二区 |
欧美xart系列高清 |
99精品视频网 |
亚洲私人影吧 |
在线免费观看成人网 |
久久夜精品va视频免费观看 |
欧美一区=区 |
亚洲日本黄色 |
国产精品日韩精品欧美在线 |
欧美一区二区免费视频 |
欧美好骚综合网 |
亚洲性感美女99在线 |
欧美性色aⅴ视频一区日韩精品 |
亚洲小说欧美另类社区 |
亚洲欧洲日产国产综合网 |
亚洲人午夜精品免费 |
亚洲激情一区二区 |
国产精品永久免费在线 |
欧美成人精品在线观看 |
午夜精品久久久久影视 |
最新国产成人av网站网址麻豆 |
国产精品福利在线 |
欧美激情一区二区三区全黄 |
亚洲欧美在线另类 |
免费91麻豆精品国产自产在线观看 |
久久一区视频 |
亚洲成色最大综合在线 |
久久天天综合 |
亚洲高清视频在线 |
免费成人黄色片 |
麻豆国产精品777777在线 |
国产欧美日本在线 |
国产一区二区三区精品欧美日韩一区二区三区
|
久久久人成影片一区二区三区观看
|
av成人免费在线 |
av成人福利 |
欧美+亚洲+精品+三区 |
亚洲欧洲精品一区二区三区波多野1战4 |
亚洲国产婷婷综合在线精品 |
欧美精品在线视频 |
亚洲激情中文1区 |
亚洲图片在区色 |
久久亚洲精品欧美 |
一区二区高清视频 |
性做久久久久久久免费看 |
亚洲日本va在线观看 |
久久久久国产免费免费 |
国产亚洲欧美日韩日本 |
亚洲综合色婷婷 |
亚洲精品国产系列 |
久热国产精品 |
亚洲精品美女在线观看 |
美女视频一区免费观看 |
久久亚洲一区二区三区四区 |
一区二区免费在线观看 |
亚洲性夜色噜噜噜7777 |
欧美香蕉视频 |
国产一区二区三区久久 |
亚洲欧美日韩精品久久亚洲区 |
亚洲精品三级 |
国产精品羞羞答答 |
久久综合九色综合欧美就去吻 |
老司机免费视频一区二区三区
|
亚洲午夜久久久久久久久电影院 |
亚洲私人影院 |
黄色成人免费观看 |
亚洲国产精品精华液网站 |
欧美日韩国产影片 |
久久久久久久久久久久久9999
|
亚洲国产精品激情在线观看 |
亚洲大胆av |
国产一区二区三区久久精品 |
亚洲高清视频中文字幕 |
久久视频在线免费观看 |
日韩午夜电影在线观看 |
亚洲欧美日韩另类 |
136国产福利精品导航 |
亚洲网站视频 |
日韩视频一区二区三区在线播放 |
亚洲男女自偷自拍 |
91久久久久 |
午夜精品区一区二区三 |
亚洲欧美日韩中文视频 |
久久久久国产精品www
|
国产精品久久国产三级国电话系列 |
国产精品99久久久久久有的能看
|
老司机午夜精品视频在线观看 |
久久福利电影 |
伊人成人在线视频 |
欧美精品v日韩精品v韩国精品v |
亚洲精品女人 |
亚洲三级毛片 |
国产精品美女午夜av |
欧美在线日韩精品 |
亚洲黄一区二区三区 |
性色一区二区 |
亚洲免费高清视频 |
国产综合18久久久久久 |
国产一区二区三区四区 |
欧美一级片一区 |
国产三级欧美三级日产三级99 |
亚洲影院在线观看 |
亚洲午夜一二三区视频 |
在线看无码的免费网站 |
午夜精品久久久久久久99黑人 |
精品999久久久 |
午夜精品剧场 |
亚洲第一级黄色片 |
欧美亚洲在线观看 |
在线看片成人 |
欧美日韩中文另类 |
欧美国产精品日韩 |
欧美乱在线观看 |
欧美精品在线看 |
香港成人在线视频 |
欧美国产视频日韩 |
欧美激情视频一区二区三区在线播放 |
欧美一区1区三区3区公司 |
欧美一区二区三区免费观看视频 |
一区二区三区高清 |
午夜在线精品 |
欧美肥婆bbw |
av成人老司机 |
久久久久久久高潮 |
亚洲综合色噜噜狠狠 |
亚洲欧美区自拍先锋 |
午夜精品久久久久久久99黑人 |
欧美一二三视频 |
91久久综合亚洲鲁鲁五月天 |
亚洲欧美激情在线视频 |
激情综合电影网 |
伊人久久久大香线蕉综合直播 |
亚洲国产99 |
亚洲电影在线免费观看 |
一本久久青青 |
久久久久女教师免费一区 |
美女成人午夜 |
亚洲看片网站 |
香蕉久久夜色精品 |
欧美精品一区三区在线观看 |
国产精品高潮呻吟久久 |
国产日韩在线不卡 |
一区二区三区成人精品 |
欧美国产日韩亚洲一区 |
亚洲一品av免费观看 |
亚洲制服丝袜在线 |
免费在线看成人av |
亚洲第一黄色网 |
久久久999 |
一本一本a久久 |
久久久久一区二区 |
国产一区二区黄 |
亚洲天堂av在线免费 |
老司机精品视频网站 |
欧美高清视频免费观看 |
欧美一区二区在线免费观看 |
国产精品视频久久一区 |
久久综合久久88 |
一区二区三区视频在线观看 |
欧美福利电影网 |
亚洲精品孕妇 |
午夜在线成人av |
欧美视频一二三区 |
香蕉久久夜色精品国产 |
亚洲欧美日韩国产精品 |
亚洲第一精品夜夜躁人人爽 |
久久偷看各类wc女厕嘘嘘偷窃 |
一区在线观看 |
亚洲精品国产精品国产自 |
欧美天堂亚洲电影院在线观看 |
亚洲精品乱码久久久久久蜜桃91 |
亚洲七七久久综合桃花剧情介绍 |
欧美女同在线视频 |
久久久久久免费 |
久久亚洲欧美 |
亚洲欧美国产不卡 |
欧美国产综合视频 |
久久免费少妇高潮久久精品99 |
久久成人精品无人区 |
99视频国产精品免费观看 |
在线综合亚洲欧美在线视频 |
欧美精品一级 |
久久黄金** |
欧美精品在线极品 |
欧美成人一区二区三区在线观看 |
久久久国产精品一区二区中文 |
亚洲成在人线av |
久久一区二区三区四区五区 |
欧美亚洲免费高清在线观看 |
欧美影院久久久 |
久久激情视频免费观看 |
国产精品va在线播放我和闺蜜 |
亚洲片在线资源 |
狠狠久久亚洲欧美 |