锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品成人在线观看,狠狠入ady亚洲精品经典电影,开元免费观看欧美电视剧网站http://m.shnenglu.com/tgh621/archive/2011/01/17/138663.html澶ф搗澶ф搗Mon, 17 Jan 2011 04:57:00 GMThttp://m.shnenglu.com/tgh621/archive/2011/01/17/138663.htmlhttp://m.shnenglu.com/tgh621/comments/138663.htmlhttp://m.shnenglu.com/tgh621/archive/2011/01/17/138663.html#Feedback2http://m.shnenglu.com/tgh621/comments/commentRss/138663.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/138663.html濡傛灉浣犳槸C++紼嬪簭鍛橈紝濡傛灉浣犲啓榪囦竴涓緢澶嶆潅鐨勭▼搴忥紝濡傛灉浣犵粡甯哥鍒拌帿鍚嶅叾濡欑殑宕╂簝闂銆傞偅涔堜綘灝辨湁鍙兘閬亣浜嗛噹鎸囬拡銆傚鏋滀綘姣旇緝緇嗗績錛屾敞鎰忎簡Debug Output杈撳嚭紿楀彛鐨勮瘽錛岄偅涔堜綘灝辨湁鍙兘娉ㄦ剰鍒拌繖鏍蜂竴琛屾彁紺猴細
HEAP:   Free   Heap   block   xxxxxxxx modified   at   xxxxxxxx  after   it   was   freed

 

GFlags鏄疻indows debug tools 宸ュ叿鍖呬笅鐨勪竴涓伐鍏?鍦╓indows 2000鐨凴esource Kit涓篃鍙互鎵懼緱鍒般傜敤鏉ヨ緗竴浜涜皟璇曞睘鎬э紝鎬諱綋涓婂垎涓?涓駭鍒玈ystem錛孠ernel鍜孖mage File銆傛垜浠緗ソPath鐜鍙橀噺,灝嗗叾鎸囧悜Debug tools宸ュ叿鐨勭洰褰曚笅銆?/p>

涓嬭澆瀹夎 gflags:

http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

http://www.ithov.com/Soft/system/systest/38210.shtml

GFlags 

鑰佺墝鐨凱ageHeap閰嶇疆宸ュ叿錛屾湁鍛戒護琛屽拰GUI涓ょ鎿嶄綔鏂瑰紡錛屽姛鑳芥瘮杈冨叏錛屽寘鍚湪Windbg璋冭瘯鍣ㄥ畨瑁呭寘鍐呫傚悓鏍峰湪Windows 2000 Professional SP2 浠ヤ笂鍙敤銆?/span>

涓浜涗嬌鐢℅Flags鍛戒護琛岀殑渚嬪瓙錛?/span>

閰嶇疆姝e父欏靛爢錛?/span>

"C:\Program Files\Debugging Tools for Windows (x86)\gflags.exe" /p /enable qq.exe

閰嶇疆瀹屽叏欏靛爢錛?/span>

"C:\Program Files\Debugging Tools for Windows (x86)\gflags.exe" /p /enable qq.exe /full

鍒楀嚭褰撳墠鍚姩浜嗛〉鍫嗙殑榪涚▼鍒楄〃錛?/span>

"C:\Program Files\Debugging Tools for Windows (x86)\gflags.exe" /p

鍙栨秷欏靛爢璁劇疆錛?/span>

"C:\Program Files\Debugging Tools for Windows (x86)\gflags.exe" /p /disable qq.exe

涓浜涚壒孌婇夐」瑙i噴錛?/span>

/unaligned

榪欎釜閫夐」鍙兘鐢ㄤ簬瀹屽叏欏靛爢銆傚綋鎴戜滑浠庢櫘閫氬爢綆$悊鍣ㄥ垎閰嶄竴鍧楀唴瀛樻椂錛屽唴瀛樻繪槸8瀛楄妭瀵歸綈鐨勶紝欏靛爢榛樿鎯呭喌涓嬩篃浼氫嬌鐢ㄨ繖涓榻愯鍒欙紝浣嗘槸榪欎細瀵艱嚧鍒嗛厤鐨勫唴瀛樺潡鐨勭粨灝句笉鑳借窡欏佃竟鐣岀簿紜榻愶紝鍙兘瀛樺湪0-7涓瓧鑺傜殑闂撮殭錛屾樉鐒訛紝瀵逛綅浜庨棿闅欒寖鍥村唴鐨勮闂槸涓嶄細琚珛鍗沖彂鐜般傛洿鍑嗙‘鐨勮錛岃鎿嶄綔灝嗘案榪滀笉鑳借鍙戠幇錛屽啓鎿嶄綔鍒欒絳夊埌鍐呭瓨鍧楅噴鏀炬椂鏍¢獙闂撮殭絀洪棿鍐呯殑濉厖淇℃伅鏃舵墠鍙戠幇銆?unaligned鐢ㄤ簬淇榪欎釜緙洪櫡錛屽畠鎸囧畾欏靛爢綆$悊鍣ㄤ笉蹇呴伒瀹?瀛楄妭瀵歸綈瑙勫垯錛屼繚璇佸唴瀛樺潡灝鵑儴綺劇‘瀵歸綈欏佃竟鐣屻?/span>

闇瑕佹敞鎰忕殑鏄紝涓浜涚▼搴忓惎鐢ㄨ繖涓夐」鍙兘鍑虹幇寮傚父錛屼緥濡侷E鍜孮Q灝變笉鏀寔銆?/span>

/backwards

榪欎釜閫夐」鍙兘鐢ㄤ簬瀹屽叏欏靛爢銆傝繖涓夐」浣垮緱鍒嗛厤鐨勫唴瀛樺潡澶撮儴涓庨〉杈圭晫瀵歸綈錛堣屼笉鏄熬閮ㄤ笌杈圭晫瀵歸綈錛夛紝閫氳繃榪欎釜閫夐」鏉ユ鏌ュご閮ㄧ殑璁塊棶瓚婄晫銆?/span>

/debug

鎸囧畾涓鍚姩榪涚▼鍗矨ttach鍒拌皟璇曞櫒錛屽浜庨偅浜涗笉鑳借嚜鍔ㄧ敓鎴恉ump鐨勭▼搴忥紝鏄瘮杈冩湁鐢ㄧ殑閫夐」銆?/span>

瀹屽叏欏靛爢錛?/span>

    褰撳垎閰嶄竴鍧楀唴瀛樻椂錛岄氳繃璋冩暣鍐呭瓨鍧楃殑鍒嗛厤浣嶇疆錛屼嬌鍏剁粨灝炬伆濂戒笌緋葷粺鍒嗛〉杈圭晫瀵歸綈錛岀劧鍚庡湪杈圭晫澶勫啀澶氬垎閰嶄竴涓笉鍙闂殑欏典綔涓轟繚鎶ゅ尯鍩熴傝繖鏍鳳紝涓鏃﹀嚭鐜板唴瀛樿/鍐欒秺鐣屾椂錛岃繘紼嬪氨浼欳rash錛屼粠鑰屽府鍔╁強鏃舵鏌ュ唴瀛樿秺鐣屻?/span>

鍥犱負姣忔鍒嗛厤鐨勫唴瀛橀兘瑕佷互榪欑褰㈠紡甯冨眬錛屽挨鍏跺浜庡皬鐗囩殑鍐呭瓨鍒嗛厤錛屽嵆浣垮垎閰嶄竴涓瓧鑺傦紝涔熻鍒嗛厤涓涓唴瀛橀〉錛屽拰涓涓繚鐣欑殑铏氭嫙鍐呭瓨欏碉紙娉ㄦ剰鍦ㄧ洰鍓嶇殑瀹炵幇涓紝榪欎釜鐢ㄤ綔杈圭晫淇濇姢鍖哄煙鐨勯〉浠庢潵涓嶄細琚彁浜わ級銆傝繖灝遍渶瑕佸ぇ閲忕殑鍐呭瓨錛屽埌搴曚竴涓繘紼嬮渶瑕佸灝戝唴瀛橈紝寰堥毦浼扮畻錛屽洜姝ゅ湪浣跨敤Page Heap鍓嶏紝鑷沖皯淇濊瘉浣犵殑鏈哄櫒鑷沖皯璁劇疆浜?G铏氭嫙鍐呭瓨浠ヤ笂銆?/span>

姝e父欏靛爢

    姝e父欏靛爢鍘熺悊涓嶤RT璋冭瘯鍐呭瓨鍒嗛厤鍑芥暟綾諱技錛岄氳繃鍒嗛厤灝戦噺鐨勫~鍏呬俊鎭紝鍦ㄩ噴鏀懼唴瀛樺潡鏃舵鏌ュ~鍏呭尯鍩熴傛潵媯嫻嬪唴瀛樻槸鍚﹁鎹熷潖錛屾鏂規硶鐨勪紭鐐規槸鏋佸ぇ鐨勫噺灝戜簡鍐呭瓨鑰楃敤閲忋傜己鐐規槸鍙兘鍦ㄩ噴鏀懼潡鏃舵嫻嬶紝涓嶅お濂借窡韙嚭閿欑殑浠g爜浣嶇疆銆?/span>

欏靛爢鑳藉鐞嗙殑閿欒綾誨瀷錛?/span>

閿欒綾誨瀷                    姝e父欏靛爢               鏁撮〉鍫?nbsp;

鍫嗗彞鏌勬棤鏁?nbsp;                    绔嬪嵆鍙戠幇                 绔嬪嵆鍙戠幇 

鍫嗗唴瀛樺潡鎸囬拡鏃犳晥               绔嬪嵆鍙戠幇                 绔嬪嵆鍙戠幇 

澶氱嚎紼嬭闂爢涓嶅悓姝?nbsp;            绔嬪嵆鍙戠幇                 绔嬪嵆鍙戠幇 

鍋囪閲嶆柊鍒嗛厤榪斿洖鐩稿悓鍦板潃(realloc)  90% 鍐呭瓨閲婃斁鍚庡彂鐜?nbsp;  90% 绔嬪嵆鍙戠幇 

鍐呭瓨鍧楅噸澶嶉噴鏀?nbsp;                90% 绔嬪嵆鍙戠幇             90% 绔嬪嵆鍙戠幇 

璁塊棶宸查噴鏀劇殑鍐呭瓨鍧?nbsp;            90% 鍦ㄥ疄闄呴噴鏀懼悗鍙戠幇     90% 绔嬪嵆鍙戠幇 

璁塊棶鍧楃粨灝句箣鍚庣殑鍐呭           鍦ㄩ噴鏀懼悗鍙戠幇             绔嬪嵆鍙戠幇 

璁塊棶鍧楀紑濮嬩箣鍓嶇殑鍐呭           鍦ㄩ噴鏀懼悗鍙戠幇             绔嬪嵆鍙戠幇 

浠ヤ笅鏄婦渚嬶細

鍓嶆湡宸ヤ綔錛?灝唃flags錛堥粯璁ゅ畨瑁呭湪C:\Program Files\Debugging Tools for Windows (x86)錛夊姞鍏ュ埌path

妗堜緥1錛?/strong>
int _tmain(int argc, _TCHAR* argv[])
{
     char *p = new char[8];
     p[8] = 10;

     delete[] p;
     return 0;
}
紼嬪簭鏈韓鏄湁闂鐨勩傛暟緇勫凡緇忚秺鐣岋紝浣嗘槸debug妯″紡涓嬪茍涓嶆姤閿欙紝release妯″紡涓嬩篃寰堝ぇ鍙兘鏄笉crash鐨勩?/p>

鍦ㄥ懡浠ゆ彁紺虹涓嬭繍琛岋細

>gflags /p /enable test.exe /full

鍦╮elease妯″紡榪愯test.exe銆俥xception灝嗙洿鎺ュ畾浣嶅埌 p[8] = 10; 榪欎竴琛?/p>

妗堜緥2錛?/strong>
int _tmain(int argc, _TCHAR* argv[])
{
     char *p = new char[9];
     p[9] = 10;

     delete[] p;
     return 0;
}
浠ヤ笂浠g爜鍜屾渚?浠呮湁涓鐐逛笉鍚岋紝灝辨槸鏁扮粍澶у皬銆備絾鏄鏋滆繍琛?br>gflags /p /enable test.exe /full

鍦╮elease妯″紡涓嬪茍涓嶄細鍑虹幇exception騫跺畾浣嶅埌 p[9] = 10;
鍘熷洜鏄病鏈夎緗?/unaligned 鍙傛暟錛屽叿浣撶湅璇存槑銆傛渚?涓紝鏁扮粍鏈?瀛楄妭澶у皬錛屾寜鍐呭瓨8瀛楄妭瀵歸綈鐨勮娉曪紝榪欏潡鍐呭瓨搴旇鏄?/p>

16瀛楄妭錛屽悗闈㈣繕鏈?瀛楄妭鐨勭┖闂達紝鎵浠?p[9] = 10; 騫朵笉浼氫駭鐢焑xception銆傝緗?/unaligned 鍙傛暟錛岀姝?瀛楄妭瀵歸綈錛屽氨

鍙互璺熻釜鍒?p[9] = 10; 榪欎釜exception

>gflags /p /enable test.exe /full /unaligned

妗堜緥3錛?br>class A
{
public:
 int a;
 void del(){
  delete this;
  a = 10;
 }
};
int _tmain(int argc, _TCHAR* argv[])
{
 A* a = new A();
 a->del();
 return 0;
}

鍦╠ebug妯″紡涓嬪彲鑳戒駭鐢焑xception:
HEAP:   Free   Heap   block   xxxxxxxx modified   at   xxxxxxxx  after   it   was   freed
鍦╮elease妯″紡涓嬭繍琛屽茍涓嶆姤閿欙紝浣嗘槸紼嬪簭鏈韓鏄湁闂鐨勶紝delete this; 涔嬪悗錛屽張緇欐垚鍛樺彉閲?a=10;

榪欐樉鐒舵槸涓嶅鐨勩?/p>

>gflags /p /enable test.exe /full
姝ゆ椂鍦╠ebug涓嬭繍琛岀▼搴忥紝浼氫駭鐢焑xception錛屽茍瀹氫綅鍒?nbsp;  a = 10;



澶ф搗 2011-01-17 12:57 鍙戣〃璇勮
]]>
[杞琞濡備綍鎵嬪伐鎶撳彇dump鏂囦歡http://m.shnenglu.com/tgh621/archive/2010/10/27/131525.html澶ф搗澶ф搗Wed, 27 Oct 2010 09:38:00 GMThttp://m.shnenglu.com/tgh621/archive/2010/10/27/131525.htmlhttp://m.shnenglu.com/tgh621/comments/131525.htmlhttp://m.shnenglu.com/tgh621/archive/2010/10/27/131525.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/131525.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/131525.html鍦ㄧ敓浜х幆澧冧笅榪涜鏁呴殰璇婃柇鏃訛紝涓轟簡涓嶇粓姝㈡鍦ㄨ繍琛岀殑鏈嶅姟鎴栧簲鐢ㄧ▼搴忥紝鏈変袱縐嶆柟寮忓彲浠ュ姝e湪榪愯鐨勬湇鍔℃垨搴旂敤紼嬪簭鐨勮繘紼嬭繘琛屽垎鏋愬拰璋冭瘯銆?/p>

棣栧厛涓縐嶆瘮杈冪洿瑙傜畝媧佺殑鏂瑰紡灝辨槸鐢╓inDbg絳夎皟璇曞櫒鐩存帴attach鍒伴渶瑕佽皟璇曠殑榪涚▼錛岃皟璇曞畬姣曚箣鍚庡啀detach鍗沖彲銆備絾鏄繖縐嶆柟寮忔湁涓己鐐瑰氨鏄墽琛宒ebugger鍛戒護鏃跺繀欏誨厛break榪欎釜榪涚▼錛屾墽琛屽畬debug鍛戒護涔嬪悗鍙堝緱璧剁揣F5璁╀粬緇х畫榪愯錛屽洜涓鴻浣燽reak浣忕殑鏃跺欐剰鍛崇潃鏁翠釜榪涚▼涔熷凡緇忚浣犳寕璧楓傚彟澶栦篃緇忓父浼氱敱浜嶧irst Chance Excetpion鑰岃嚜鍔╞reak錛屼綘寰楁椂鍒葷暀鎰忛伩鍏嶉暱鏃墮棿break鏁翠釜榪涚▼銆傛墍浠ヨ繖鏍風殑璋冭瘯鏂瑰紡瀵規椂闂存槸涓緢澶х殑鑰冮獙錛屽線寰娌℃湁鍏呰鐨勬椂闂存潵鍋氫粩緇嗗垎鏋愩?/p>

鍙︿竴縐嶆柟寮忓垯鏄湪鍑虹幇闂鐨勬椂鍊欙紝姣斿CPU鎸佺畫闀挎椂闂?00%錛屽唴瀛樼獊鐒舵毚娑ㄧ瓑闈炴甯告儏鍐典笅錛岄氳繃瀵規湇鍔¤繘紼媠napshot鎶撳彇涓涓猟ump鏂囦歡錛屽畬鎴恉ump涔嬪悗鍏坉eatch錛岃榪涚▼緇х畫榪愯銆傜劧鍚庣敤windbg絳夊伐鍏鋒潵鍒嗘瀽榪欎釜鎶撳彇鍒扮殑dump鏂囦歡銆?/p>

閭d箞濡備綍鍦ㄤ笉緇堟榪涚▼鐨勬儏鍐典笅鎶撳彇dump鏂囦歡鍛紵Debugging Tools for Windows閲屾彁渚涗簡涓涓潪甯稿ソ鐨勫伐鍏鳳紝adplus.vbs銆備粠鍚嶅瓧鍙互鐪嬪嚭錛屽疄闄呬笂鏄竴涓獀b鑴氭湰錛屽彧鏄cdb璋冭瘯鍣ㄤ綔鐨勪竴涓寘瑁呰剼鏈?/p>

鍏惰礬寰勪笌Debugging Tools for Windows鐨勫畨瑁呰礬寰勭浉鍚岋紝浣跨敤鐨勬柟娉曚篃寰堢畝鍗曪紝濡備笅鎵紺?

adplus.vbs -hang -p 1234 -o d:\dump

鍏朵腑-hang鎸囨槑浣跨敤hang妯″紡錛屼害鍗沖湪榪涚▼榪愯榪囩▼涓檮鍔犱笂鍘籹napshot鎶撳彇涓涓猟ump鏂囦歡錛屽畬鎴愪箣鍚巇etach銆備笌涔嬪搴旂殑鏄?crash宕╂簝妯″紡錛岀敤鎴峰厛鍚姩adplus錛岀劧鍚庣敱瀹冨惎鍔ㄨ鐩戞帶鐨勭▼搴忥紝鍦ㄥ嚭鐜板紓甯稿穿婧冩椂鑷姩鐢熸垚dump鏂囦歡錛屾垨鑰呴氳繃Ctrl-C浜轟負鍙戝嚭鎶撳彇鎸囦護銆備絾鏄?crash妯″紡鍦ㄦ姄鍙栧畬鎴愪箣鍚庯紝琚洃鎺х殑榪涚▼灝卞繀欏葷粓姝€傚洜姝ゆ垜浠湪榪欓噷鍙夌敤-hang妯″紡銆?/p>

-p鏄璋冭瘯鐨勮繘紼婭D錛屾瘮濡侫SP.NET搴旂敤綰跨▼姹狅紝鍦╓in2003涓嬪氨鏄痺3wp.exe

-o 鎸囧畾瑕乷utput鐨刣ump鏂囦歡璺緞銆?/p>

鍙﹀錛屼笌adplus綾諱技鐨勶紝鏈変釜UserDump宸ュ叿錛屼絾鏄姄鍙栫敤鎴鋒ā寮忕殑榪涚▼錛岃宎dplus鍒欐槸鍐呮牳妯″紡鍜岀敤鎴鋒ā寮忎袱鑰呯殕鍙?/p>

鑰屾繪墍鍛ㄨ嚦鐨凞r. Waston錛屽垯浼氬湪榪涚▼宕╂簝涔嬪悗鐨勮嚜鍔ㄦ椂鍊欐姄鍙杁ump鏂囦歡錛屼竴鏍峰彲浠ョ敤浜巜indbg絳夎皟璇曞櫒鏉ヤ簨鍚庡垎鏋愮▼搴忓穿婧冩椂鐨勭姸鎬併?/p>

錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳
0:000> !dumpheap -stat
No export dumpheap found
======瑙e喅鏂規硶錛?br>.load clr20\sos.dll錛屼綘瑕佸厛鎵ц鐨勩俿os.dll鍦ㄩ粯璁ょ殑c:\windows\microsoft.net\framework\v2.....涓嬮潰錛屼綘澶嶅埗鍒癱:\program files\debugging tools for windows涓嬮潰鐨刢lr20鐩綍涓嬮潰錛坈lr20鏄綘鎵嬪伐鍒涘緩鐨勶級
 錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?br>    
  鍦?NET涓嬪紑鍙戞椂錛屾渶鍩烘湰鐨勮皟璇曟柟娉曞氨鏄嬌鐢╒isual Studio鐨勫崟姝ヨ皟璇曘備絾鏄浜庝竴浜涚壒孌婃儏鍐碉紝鐗瑰埆鏄秹鍙婂埌CLR鍐呴儴鐨勬椂鍊欎嬌鐢ㄨ繖縐嶆柟寮忓氨杈句笉鍒扮洰鐨勪簡銆?
  濡傛灉瑕佹煡鐪嬭繍琛屾椂鍐呭瓨浣跨敤鎯呭喌錛孖L浠g爜錛孋LR淇℃伅絳夊彲浠ヤ嬌鐢ㄤ互涓嬩袱縐嶆柟寮忥細
  1銆佷嬌鐢╒S2005 + sos.dll
  2銆佷嬌鐢╓indbg + sos.dll
  絎簩縐嶆柟寮忓姛鑳芥洿鍔犲己澶э紝涓嬮潰鎴戝氨閫氳繃瀹為檯鎿嶄綔灞曠ず涓涓嬫庝箞浣跨敤榪欑鏂規硶寰楀埌榪愯鏃禔rrayList鍐呴儴鐨勫箋?
  鏈変漢鍙兘浼氳錛氭垜鐩存帴鐢╒isual Studio鐨勫崟姝ヨ皟璇曞矀涓嶆槸鏇村揩錛熷綋鐒訛紝榪欎釜鍙槸涓涓紨紺猴紝閫氳繃榪欎釜婕旂ず鏄負浠ュ悗鐨勯珮綰ц皟璇曟墦涓嬪熀紜
  
  鍦ㄦ搷浣滀箣鍓嶏紝鍏堢啛鎮変竴涓嬪熀鏈煡璇嗭細
  A銆佷嬌鐢╒S2005 + sos.dll璋冭瘯
  1銆侀渶瑕佸湪欏圭洰->灞炴?>璋冭瘯-銆夊惎鐢ㄩ潪鎵樼浠g爜璋冭瘯
  2銆佹墦寮璋冭瘯-銆夌獥鍙?銆夊嵆鏃?
  3銆佸湪鍗蟲椂紿楀彛涓緭鍏?!load sos 鍔犺澆璋冭瘯妯″潡
  4銆佽緭鍏ュ叾瀹冭皟璇曡鍙?
  
  B銆佷嬌鐢╓indbg + sos.dll
  1銆佸幓寰蔣鐨勭綉绔欎笅杞芥渶鏂扮殑Windbg
  2銆佹墦寮Windbg鍦‵ile-銆塖ymbol File Path ...紿楀彛涓緭鍏?srv*c:\symbols*http://msdl.microsoft.com/download/symbols
  3銆佽繍琛岄渶瑕佽皟璇曠殑紼嬪簭錛岀劧鍚庡湪Windbg涓璅ile-銆堿ttach to Process涓夋嫨鍒氭墠榪愯鐨勭▼搴?
  4銆佸湪鍑虹幇鐨凜ommand紿楀彛涓氨鍙互杈撳叆璋冭瘯璇彞
  5銆佸父鐢ㄨ皟璇曡鍙ワ細
   lm //鏌ョ湅鍔犺澆浜嗗摢浜涙ā鍧?
   .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll //鍔犺澆璋冭瘯妯″潡
   ld TestClass //鍔犺澆璋冭瘯絎﹀彿
   !name2ee TestClass.exe TestClass.Program.test //鏄劇ずtest鏂規硶鐩稿叧鐨勫湴鍧
   !dumpmt -md 00976d48 //寰楀埌綾葷殑鎴愬憳鍑芥暟璇︾粏淇℃伅
   !dumpil 00973028 // 鏄劇ず榪欎釜鏂規硶琚紪璇戝櫒緙栬瘧涔嬪悗鐨処L浠g爜
   !dumpheap -stat //璇ュ懡浠ゆ樉紺虹▼搴忎腑鎵鏈夊璞$殑緇熻淇℃伅錛屾樉紺虹殑澶у皬鏄璞℃湰韜殑澶у皬錛屼笉鍖呮嫭瀵硅薄閲岄潰鍊肩殑澶у皬
   !dumpheap -mt 790fcb30 //璇ュ懡浠ゆ樉紺篗ethodTable 790fcb30鐨勮緇嗕俊鎭?
   !gcroot 012919b8 //鏉ユ樉紺轟竴涓疄渚嬬殑鎵灞炲叧緋?
   !dumpobj(do) 012a3904 //鏄劇ず涓涓璞$殑鍏蜂綋鍐呭錛岀湅瀵硅薄閲岄潰鏈変粈涔堬紝鍊兼槸浠涔?
   !ObjSize 012a1ba4 //瀵硅薄瀹為檯鍦ㄥ唴瀛樹腑鐨勫ぇ灝?
   !eeheap -gc //鏌ョ湅鎵樼鍫嗙殑鎯呭喌(鍖呮嫭澶у皬)
   !DumpArray //鏌ョ湅鏁扮粍淇℃伅
   涓嬮潰灝辨潵鐪嬬湅鍏蜂綋鐨勮皟璇曟楠わ細
  1銆佹垜浠殑嫻嬭瘯浠g爜
  
  
  namespace TestClass
  {
   class Program
   {
   [STAThread]
   static void Main(string[] args)
   {
   ArrayList list = new ArrayList();
   list.Add("aaaa");
   list.Add("bbbb");
   Console.ReadLine();
   }
   }
  }寰堢畝鍗曪紝灝辨槸涓涓狝rrayList
  
  榪愯榪欎釜紼嬪簭(寮濮嬫墽琛岋紝涓嶈皟璇?錛岀劧鍚庤繘鍏indbg錛孉ttach鍒拌繖涓繘紼?
  
  2銆佹煡鐪嬫墍鏈夊爢鏍堜俊鎭?
  0:004> !dumpheap -stat
   MT Count TotalSize Class Name
  7910062c 1 12 System.Security.Permissions.SecurityPermission
  7918e284 1 16 System.IO.TextReader+SyncTextReader
  79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
  79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
  79101d30 1 20 System.Text.InternalEncoderBestFitFallback
  79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
  79105cd4 1 24 System.Collections.ArrayList
  ......
  7912ad90 11 9036 System.Object[]
  790fcb30 2083 131492 System.String
  Total 2202 objects
  闄や簡鎴戜滑鐨凙rrayList澶栵紝榪樻湁寰堝鍏跺畠鐨勭郴緇熶俊鎭紝鍏堜笉鐢ㄧ瀹?
  
  3銆佹煡鐪嬫垜浠殑ArrayList鐨勪俊鎭?
  0:004> !dumpheap -mt 79105cd4
   Address MT Size
  012a1b88 79105cd4 24
  total 1 objects
  Statistics:
   MT Count TotalSize Class Name
  79105cd4 1 24 System.Collections.ArrayList
  Total 1 objects
  
  4銆佹煡鐪嬪搴斿湴鍧鍐呴儴瀹為檯鐨勫?
  0:004> !do 012a1b88
  Name: System.Collections.ArrayList
  MethodTable: 79105cd4
  EEClass: 79105c28
  Size: 24(0x18) bytes
   (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
  Fields:
   MT Field Offset Type VT Attr Value Name
  7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
  791018e0 40008e0 c System.Int32 1 instance 2 _size
  791018e0 40008e1 10 System.Int32 1 instance 2 _version
  790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
  7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
   >> Domain:Value 00149c58:012a1ba0 <<
  鍙互鐪嬪埌ArrayList鐨勫ぇ灝忎負2錛屽叿浣撶殑鍊間繚瀛樺湪鍦板潃012a1bb0涓紝鏄竴涓猄ystem.Object[]綾誨瀷鐨勬暟緇?
  
  5銆佹煡鐪嬫暟緇勪俊鎭?
  0:004> !DumpArray 012a1bb0
  Name: System.Object[]
  MethodTable: 7912ad90
  EEClass: 7912b304
  Size: 32(0x20) bytes
  Array: Rank 1, Number of elements 4, Type CLASS
  Element Methodtable: 790fc35c
  [0] 012a1b50
  [1] 012a1b6c
  [2] null
  [3] null
  
  6銆佹煡鐪嬫暟緇勫唴瀵硅薄鐨勫?
  0:004> !do 012a1b50
  Name: System.String
  MethodTable: 790fcb30
  EEClass: 790fca90
  Size: 26(0x1a) bytes
   (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
  String: aaaa
  Fields:
   MT Field Offset Type VT Attr Value Name
  791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
  791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
  790fe534 4000098 c System.Char 1 instance 61 m_firstChar
  790fcb30 4000099 10 System.String 0 shared static Empty
   >> Domain:Value 00149c58:790d81bc <<
  7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
   >> Domain:Value 00149c58:012a16f0 << 
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳

windbg浣跨敤灝忔葷粨
銆愭姄dump銆?br>1銆佷竴鑸姄娉?br>adplus -hang -p 3230 -quiet 鎶?230 pid榪涚▼錛宧ang妯″紡錛岀浉褰撲簬鎶婇偅涓繘紼嬫殏鍋滀綇錛屽彇鍐呭瓨蹇収
adplus -crash -pn w3wp -quiet 鎶搘3wp榪涚▼錛宑rash妯″紡錛屽綋閭d釜榪涚▼宕╂簝緇撴潫鐨勬椂鍊欒嚜鍔ㄦ姄鍙栧綋鏃剁殑鍐呭瓨
adplus -hang -iis -quiet 鎶揑IS鐩稿叧榪涚▼錛屽寘鎷叾涓奾ost鐨剋eb搴旂敤錛屼互鍙奿is鑷韓
2銆佹姄window鏈嶅姟
http://support.microsoft.com/kb/824344/zh-cn
3銆佽繙紼嬫姄
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4銆佹姄钃濆睆鍜屾鏈虹殑dump
鐢佃剳鏃犳晠閲嶅惎鎴栬呰摑灞忎細鍦–:\WINDOWS\Minidump\涓嬩繚瀛樹竴涓猰inidump錛屼絾鏄繖涓猰inidump鍙敤鐨勫懡浠ゅ緢灝戯紝涓鑸彧鎵?analyze –v鐪嬪埌鏄摢涓繘紼嬪紩璧風殑錛岃繕鏈夌浉鍏崇殑椹卞姩妯″潡灝卞熀鏈畾浣嶉棶棰樹簡銆?br>5銆両IS鍥炴敹鐨勬椂鍊欐姄
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6銆佽鍒掍換鍔℃姄
姣斿涓涓繘紼嬭搗鏉ュ悗涓嶇煡閬撳畠浠涔堟椂鍊欎細鎰忓宕╂簝錛屽彲浠ュ湪璁″垝浠誨姟閲岀敤crash閲屾姄錛屽綋閭d釜榪涚▼鎰忓緇堟鐨勬椂鍊欙紝cdb鍙互鐩存帴闄勫姞涓婂幓錛屾姄鍙栧綋鏃剁殑dump錛屽鏋滆鎶撲竴浜涗細鑷姩閲嶅惎鐨勮繘紼嬶紝鑰屼笖瑕佹姄姣忔閲嶅惎鍓嶇殑dump錛屽彲浠ュ弬鑰冮檮褰曢噷涓鑺傘?/p>

銆愬父鐢ㄥ懡浠ゃ?br>1銆佸厛path C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727錛屾妸.net璺緞璁劇疆涓簆ath鐜鍙橀噺錛屼竴閬嶅湪windbg閲屽彲浠ョ洿鎺?load sos錛岃屼笉蹇?load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll
2銆乴d demo錛屽姞杞戒綘紼嬪簭鐨刾db鏂囦歡錛岃皟璇?net紼嬪簭涓鑸鎶妅ernel32鍜宮scorwks鐨勭鍙峰姞杞戒笂錛屽叧浜庤繖涓や釜涓滆タ澶у鍙互鏌ヨ祫鏂欙紝灝ゅ叾鏄悗鑰呮湁鍝簺鍑芥暟鍙互澶氫簡瑙d竴浜涖?br>3銆佸湪windbg鐨刦ile/symbol file path瀵硅瘽妗嗛噷杈撳叆浠ヤ笅鏂囧瓧錛屼互渚胯嚜鍔ㄥ姞杞藉拰涓嬭澆絎﹀彿
C:\WINDOWS\Symbols;d:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\symbols;.sympath SRV*d:\localsymbols*http://msdl.microsoft.com/download/symbols
鍏朵腑鏈墂indows銆?net2.0鍜岃嚜鍔ㄤ粠緗戜笂涓嬭澆鐨勮皟璇曠鍙鳳紝娉ㄦ剰鏍規嵁鑷繁鐨勬儏鍐甸傚綋淇敼鐩綍

銆愯皟璇曟閿併?br>1銆?syncblk錛屾煡鐪嬪摢浜涚嚎紼嬫嬁鍒頒簡閿?br>2銆亊67e!clrstack 璺沖埌鏌愪釜鎷垮埌閿佺殑綰跨▼鐪嬪畠姝e湪騫蹭粈涔堟搷浣滐紝榪熻繜涓嶈偗閲婃斁閿?br>3銆?runaway 鏌ョ湅榪欎釜鍗犳湁閿佺殑綰跨▼榪愯浜嗗闀挎椂闂淬?br>4銆亊*e!clrstack鏌ョ湅鎵鏈夌嚎紼嬬殑鎵樼鍫嗘爤錛岀湅鐪嬪摢浜涙槸姝e湪絳夊緟閿佺殑錛屾瘮濡俬ang鍦⊿ystem.Threading.Monitor.Enter(System.Object)
5銆亊136s閫夋嫨璇ョ嚎紼嬶紝鏄劇ず濡備笅
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
鎵懼埌ecx瀵勫瓨鍣ㄧ殑鍊鹼紝澶嶅埗鍚巆trl+f錛屽悜涓婃煡鎵撅紝浼氭壘鍒?syncblk鐨勫湴鏂癸紝濡備笅
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
鍙互鐪嬪埌136綰跨▼絳夊緟鐨勯攣琚?20鍙風嚎紼嬪崰鐫涓嶆斁錛堟牸寮忔湁鐐逛貢錛屽噾鍚堢湅錛夛紝
6銆佹湁鏃跺欓氳繃ecx瀵勫瓨鍣ㄦ壘閿佷笉鏄緢紜畾錛屽彲浠ョ敤~* kb鏉ユ妸鎵鏈夌嚎紼嬪爢鏍堟墦鍑烘潵錛岀劧鍚庢牴鎹?syncblk鍑烘潵鐨勫悓姝ュ揩鐨勫煎幓鎼滅儲澶ф鏈夊灝戜釜綰跨▼鍦ㄧ瓑閭d釜閿併傚洜涓哄悓鏍鋒槸絳夊緟閿侊紝鍙瓑鐨勭姸鎬佷笉涓鏍鳳紝鏈夌殑鍦≦閲岋紝鏈夌殑閿佸凡緇忓崌綰э紝鏈夌殑鍘誨皾璇曞幓鎷塊攣浜嗭紝鎵浠ヤ笉涓瀹氬綋鏃秂cx瀵勫瓨鍣ㄦ寚鍚戦偅鍧楀唴瀛橈紝鍏蜂綋濡備綍鎵懼埌鏌愪釜姝e湪絳夊緟閿佺殑綰跨▼絳夊緟鐨勯攣鐨勫唴瀛樺湴鍧錛屼互鍙婂畠姝g瓑寰呯殑榪欎釜閿佽鍝釜綰跨▼鎷跨潃錛屾垜榪樻病鐞㈢(鍑鴻寰嬫潵錛屼絾涓鑸儏鍐典笅錛屽鏋滄湁鍏跺畠鍚屾瀵硅薄鐨勮瘽錛屾洿闅炬煡銆?net閲岀敤鎴戜笂闈㈣鐨勫嚑姝ュ氨鑳芥煡鍑洪攣鐨勯棶棰樹簡銆?/p>


銆愬唴瀛樻硠婕忋?br>1銆?dumpheap -stat鐪嬬湅鍝簺瀵硅薄涓暟鏈澶氾紝鍗犲唴瀛樻渶澶э紝
2銆佹壘鍒版煇涓牸寮忔瘮杈冨鐨勫璞★紝鍙互鐪嬪畠鐨勬柟娉曡〃錛岀劧鍚庣敤!dumpheap -mt 66398fa4鍘婚殢鏈烘壘鍑犱釜瀵硅薄鐨勫湴鍧
3銆佺敤!do 1e5a22bc鍛戒護鍘繪煡鐪嬪嚑涓璞$殑鐘舵侊紝灞炴х殑鍊肩瓑錛岀湅鐪嬫甯鎬笉姝e父
4銆佺敤!gcroot -nostacks 1e5a22bc鍘繪煡鐪嬪嚑涓璞$殑鏍規甯鎬笉姝e父錛屽鏋滄湁浜涘璞$殑鏍逛笉鏄嚜宸遍鍏堣璁$殑閭f牱錛屽緢鍙兘琚嚜宸辨病鎯沖埌鐨勫璞″己寮曠敤浜嗭紝鎵浠C鏃犳硶鍥炴敹瀹冿紝灝辨硠婕忎簡銆?br>銆怌PU鐧懼垎鐧俱?br>涓昏鐢ㄥ嚑涓鏁板櫒鍜?runaway鍛戒護錛屽叿浣撹浠ヤ笅閾炬帴
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
銆愮嚎紼嬫睜鑰楀敖銆?br>!threadpool 鑳界湅鍒板畬鎴愮鍙o紝綰跨▼姹犲伐浣滅嚎紼嬪拰timer鍥炶皟鍚勫崰綰跨▼姹犵殑鎯呭喌銆?br>銆愬叾瀹冦?br>1銆?eestack -short -ee鏌ョ湅鎵鏈夐噸瑕?鑾峰彇閿佺殑錛屾墭綆$殑錛屽仠姝㈠茍鍏佽鍥炴敹鐨?綰跨▼鐨刣umpstack錛屽樊涓嶅鐩稿綋浜巭*e!dumpstack
2銆?time 鍙互鐪嬪埌榪涚▼璺戜簡澶氬皯鏃墮棿
3銆?dso 鏌ョ湅褰撳墠綰跨▼閲屾湁鍝簺瀵硅薄錛屽垎鏋愬唴瀛樻硠婕忛棶棰樹篃璁鎬細鐢ㄥ埌
銆愬皬緇撱?br>瑕佹兂寰堝ソ鐨勭敤windbg鎺掓煡.net闂錛岄鍏堣浜嗚В涓浜沜lr瀹夸富鐨勫熀紜鐭ヨ瘑錛屼互鍙奍L鐨勪竴浜涘熀紜錛岃繕鏈夌畝鍗曠殑瀵勫瓨鍣ㄥ拰姹囩紪灝濊瘯錛屽啀灝辨槸鏈変釜濂界殑鎬濊礬錛屾渶鍚庡氨鏄粡楠屽拰瀵逛唬鐮侀昏緫鐨勭悊瑙c?/p>


銆愰檮褰曪細鍐欎簡涓涓嚜鍔ㄦ姄dump鐨勫伐鍏鳳紝鍙湪紼嬪簭寮傚父閫鍑虹殑鏃跺欐姄dump銆?br>銆愪嬌鐢ㄦ柟娉曘?br>1銆佸厛鍦╟md涓嬭繍琛屼互涓嬪懡浠ょ‘淇濊鍒掍換鍔″紑鐫
net start "task scheduler"
2銆佹墽琛屼互涓嬪懡浠ゅ畨鎺掕嚜鍔ㄦ姄鍖?br>at 13:27 d:\myapp\autodump\processmon.exe
鍏朵腑璁″垝鍚姩鐨勬椂闂村拰鑷姩鎶撳寘鐨勭▼搴忚礬寰勮鏍規嵁鎯呭喌璁劇疆錛岃鍒掑惎鍔ㄤ箣鍓嶅綋鍓嶇敤鎴蜂竴瀹氳娉ㄩ攢銆?br>銆愮浉鍏抽厤緗?br><appSettings>
  <add key="adplusPath" value="D:\MyApp\Debugging\adplus.vbs"/><!--adplus鐨勮礬寰?->
  <add key="ProcessName" value="w3wp"/><!--瑕佹姄dump鐨勮繘紼嬬殑鍚嶅瓧錛屽彲鐢ㄩ儴鍒嗗悕瀛楋紝涓嶇敤瀹屾暣鐨?->
</appSettings>


銆愭簮鐮併?/p>


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;

namespace ProcessMon
{
    class Program
    {
        static readonly List<int> _dumpPIDs = new List<int>();
        private static readonly string _processName = System.Configuration.ConfigurationManager.AppSettings["ProcessName"];
        private static readonly string _adplusPath = System.Configuration.ConfigurationManager.AppSettings["adplusPath"];
        static void Main(string[] args)
        {
            while(true)
            {
                Console.WriteLine("..");
                ThreadProc();
                Thread.Sleep(10000);
            }
        }

        private static void ThreadProc()
        {
            foreach(Process vProcess in Process.GetProcesses())
            {
                try
                {             
                    string  processName  =  vProcess.ProcessName.ToLower();
                    if (processName.IndexOf(_processName) >= 0)
                    {
                        Console.WriteLine("{0}-{1}", vProcess.ProcessName, vProcess.Id);

                        if (_dumpPIDs.Contains(vProcess.Id))
                            continue;
                        _dumpPIDs.Add(vProcess.Id);
     
                        DumpProcessDeg d = DumpProcess;
                        d.BeginInvoke(vProcess.Id, null, null);
                        DumpProcess(vProcess.Id);
                    }
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }

        private delegate void DumpProcessDeg(int pid);
        static  void  DumpProcess(int pid)
        {
            ProcessStartInfo  Info  =  new  System.Diagnostics.ProcessStartInfo();
            Info.FileName = _adplusPath;
            Info.Arguments = string.Format("-crash -p {0} -quiet",pid);
            Info.WorkingDirectory  =  "C:\\";
            Process  Proc  ;
            try
            {
                Proc  =  Process.Start(Info);
            }
            catch(System.ComponentModel.Win32Exception  e)
            {
                Console.WriteLine("緋葷粺鎵句笉鍒版寚瀹氱殑紼嬪簭鏂囦歡銆俓r{0}",  e);
                return;
            }
            Proc.EnableRaisingEvents = true;
            Console.WriteLine("澶栭儴紼嬪簭鐨勫紑濮嬫墽琛屾椂闂達細{0}",  Proc.StartTime);
            Proc.WaitForExit(60000);
            if(Proc.HasExited  ==  false){
                Console.WriteLine("鐢變富紼嬪簭寮鴻緇堟澶栭儴紼嬪簭鐨勮繍琛岋紒");
                Proc.Kill();
            }
            else{
                Console.WriteLine("鐢卞閮ㄧ▼搴忔甯擱鍑猴紒");
            }
            Console.WriteLine("澶栭儴紼嬪簭鐨勭粨鏉熻繍琛屾椂闂達細{0}",  Proc.ExitTime);
            Console.WriteLine("澶栭儴紼嬪簭鍦ㄧ粨鏉熻繍琛屾椂鐨勮繑鍥炲鹼細{0}",  Proc.ExitCode);
        }
    }
}

===============
琛ュ厖鍑犱釜鍛戒護:

1銆?analyze -v 錛氱敤浜庡垎鏋愭寕鎺夌嚎紼嬬殑璇︾粏鎯呭艦錛岄敊璇師鍥犮?/p>

2銆?locks 錛氬垪鍑哄叏閮ㄨ祫婧愪嬌鐢ㄦ儏鍐點?/p>

3銆?locks -v 0x???????? 錛氱壒瀹氬湴鍧鐨勬閿佸垎鏋愩?/p>

4銆?thread 0x????????錛氱壒瀹氱嚎紼嬭鎯呫?/p>

5銆?thread 0x????????錛氳漿鍒版煇涓嚎紼嬪爢鏍堛?br> 



澶ф搗 2010-10-27 17:38 鍙戣〃璇勮
]]>
sse2鎸囦護闆?/title><link>http://m.shnenglu.com/tgh621/archive/2010/08/20/124113.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Fri, 20 Aug 2010 09:53:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2010/08/20/124113.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/124113.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2010/08/20/124113.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/124113.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/124113.html</trackback:ping><description><![CDATA[     鎽樿:   1縐誨姩鎸囦護: 1.       Movapsmovaps XMM,XMM/m128 movaps XMM/128,XMM鎶婃簮瀛樺偍鍣ㄥ唴瀹瑰奸佸叆鐩殑瀵勫瓨鍣?褰撴湁m128鏃?蹇呴』瀵歸綈鍐呭瓨16瀛楄妭,涔熷氨鏄唴瀛樺湴鍧浣?浣嶄負0. 2.       Movupsmovups...  <a href='http://m.shnenglu.com/tgh621/archive/2010/08/20/124113.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/tgh621/aggbug/124113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2010-08-20 17:53 <a href="http://m.shnenglu.com/tgh621/archive/2010/08/20/124113.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Shell_NotifyIcon鍦ㄤ換鍔℃爮娣誨姞涓涓浘鏍?/title><link>http://m.shnenglu.com/tgh621/archive/2009/02/26/75001.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Thu, 26 Feb 2009 10:44:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2009/02/26/75001.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/75001.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2009/02/26/75001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/75001.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/75001.html</trackback:ping><description><![CDATA[memset(&ntfData,0,sizeof(ntfData));<br> ntfData.cbSize = sizeof(NOTIFYICONDATA);<br> ntfData.hWnd = this->GetSafeHwnd();<br> if(m_hCurrentIcon)<br>  ntfData.hIcon = m_hCurrentIcon;<br> ntfData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;<br> ntfData.uID = IDR_MAINFRAME;<br> memcpy(ntfData.szTip, m_strTipNormal, sizeof(ntfData.szTip)-1);<br> ntfData.uCallbackMessage = WM_COMMANDNOTIFY;<br> Shell_NotifyIcon(NIM_ADD, &ntfData); <img src ="http://m.shnenglu.com/tgh621/aggbug/75001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2009-02-26 18:44 <a href="http://m.shnenglu.com/tgh621/archive/2009/02/26/75001.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>MFC紿楀彛鐨勬竻闄よ繃紼媅杞琞http://m.shnenglu.com/tgh621/archive/2009/02/11/73433.html澶ф搗澶ф搗Wed, 11 Feb 2009 02:50:00 GMThttp://m.shnenglu.com/tgh621/archive/2009/02/11/73433.htmlhttp://m.shnenglu.com/tgh621/comments/73433.htmlhttp://m.shnenglu.com/tgh621/archive/2009/02/11/73433.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/73433.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/73433.html瀵逛簬vc++鍒濆鑰呮潵璇?鎬昏寰楃獥鍙e璞$殑娓呴櫎榪囩▼鏈変簺鑾悕鍏跺.鍦ㄧ▼搴忎腑鐪嬩笉鍒板delete鐨勬樉寮忚皟鐢?榪欎技涔庤繚鍙嶄簡c++涓湁鍏沖垵濮嬪寲鍜屾竻闄ょ殑瑙勫垯.閭d箞,紼嬪簭鏄庢牱鍙栨秷涓涓獥鍙e璞?

瑕佹秷闄ょ獥鍙e璞?蹇呴』娓呮紿楀彛瀵硅薄鐨勬瀯鎴?鍦ㄤ竴涓氬父鐨勭▼搴忎腑錛屽厛鍒涘緩c++紿楀彛瀵硅薄,鐒跺悗鐢盬indows鍒涘緩瀹為檯鐨勭獥鍙g粨鏋?騫惰繑鍥炲彞鏌勪笌c++瀵硅薄榪炴帴.涔熷氨鏄,紿楀彛瀵硅薄鍖呭惈c++紿楀彛瀵硅薄鍜學indows紿楀彛瀵硅薄,涓よ呴氳繃鍙ユ焺HWND鑱旂郴.

鐜板湪,璁╂垜浠湅鐪?姝h"鐨勭獥鍙e璞℃竻闄ゆ祦紼?鎵璋撳璞$殑娓呴櫎鏄寚閲婃斁瀵硅薄鎵鍗犵殑璧勬簮,紿楀彛瀵硅薄涓璚indows紿楀彛瀵硅薄鍗犳湁鐨勬槸緋葷粺璧勬簮,c++瀵硅薄鍗犳湁鐨勬槸鍐呭瓨璧勬簮.閲婃斁緋葷粺璧勬簮鐩稿瑕佺畝鍗曚竴浜?璋冪敤铏氬嚱鏁癉estroyWindow鍒犻櫎Windows紿楀彛瀵硅薄.濡傛灉DestroyWindow鍒犻櫎鐨勬槸鐖剁獥鍙?Windows浼氳嚜鍔ㄤ負瀛愮獥鍙h皟鐢―estroyWindow.涓鑸潵璇?紼嬪簭涓嶅繀璋冪敤DestroyWindow.鍥犱負褰撶敤鎴峰叧闂獥鍙f椂,Windows渚垮彂閫乄M_CLOSE娑堟伅,WM_CLOSE鐨勭己鐪佹秷鎭鐞嗗嚱鏁癈Wnd::OnClose璋冪敤DestroyWindow.

鍒拌繖鏃?娓呴櫎宸ヤ綔宸茬粡瀹屾垚浜嗕竴鍗?灞忓箷涓婄殑紿楀彛宸茬粡涓嶈浜?浣嗘槸鍒繕浜?鍦ㄥ唴瀛樹腑榪樻湁涓涓猚++紿楀彛瀵硅薄.璁╂垜浠啀鐪嬬湅c++瀵硅薄娓呴櫎鐨勮繃紼?褰撶獥鍙h鍙栨秷鏃?紿楀彛鏈鍚庡彂閫佺殑涓涓秷鎭槸WM_NCDESTROY.瀹冪己鐪佺殑娑堟伅澶勭悊鍑芥暟CWnd::OnNcDestroy鎶奵++紿楀彛瀵硅薄涓庡彞鏌凥WND鍒嗙,騫惰皟鐢ㄤ竴涓緢閲嶈鐨勮櫄鍑芥暟PostNcDestroy.榪欎釜鍑芥暟鏄悶娓呯獥鍙e璞℃竻闄ょ殑鍏抽敭.Cwnd涓殑PostNcDestroy浠涔堥兘涓嶅仛.鏈変簺MFC紿楀彛綾諱細閲嶈澆瀹?騫跺姞鍏elete this浠g爜鍒犻櫎c++瀵硅薄.榪欎簺紿楀彛綾誨父甯告槸浠ew鎿嶄綔絎﹀緩绔嬪湪鍫嗕腑鐨?鐢變簬閲嶈澆浜哖ostNcDestroy,浣跨獥鍙f湁鑷姩娓呴櫎鍔熻兘.鍥犳,鎴戜滑涓嶇敤鍏沖績娓呴櫎闂浜?鍙﹀鐨勪竴浜汳FC紿楀彛綾諱竴鑸槸浠ュ彉閲忓艦寮忓垱寤虹殑,MFC娌℃湁涓轟篃娌″繀瑕佷負瀹冧滑閲嶈澆PostNcDestroy鍑芥暟.

涓嶅叿澶囪嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾?涓鑸湪鍫嗘爤涓垱寤烘垨宓屽叆浜庡叾瀹僣++瀵硅薄涓?

鎵鏈夋爣鍑嗙殑Windows鎺т歡綾?濡侰Static, CEdit, CListBox絳夌瓑)

鐢盋Wnd綾葷洿鎺ユ淳鐢熷嚭鏉ョ殑瀛愮獥鍙e璞?濡傜敤鎴峰畾鍒剁殑鎺т歡)

鎷嗗垎紿楀彛綾?CSplitterWnd)

緙虹渷鐨勬帶鍒舵潯綾?CControlBar鐨勬淳鐢熺被)

瀵硅瘽妗嗙被(CDialog)鍦ㄥ爢鏍堜笂鍒涘緩鐨勬ā鎬佸璇濇綾?/p>

鎵鏈夌殑Windows閫氱敤瀵硅瘽妗?闄FindReplaceDialog)

鐢盋lassWizard鍒涘緩鐨勫璇濇

鍏鋒湁鑷姩娓呴櫎鍔熻兘鐨勭獥鍙g被,涓鑸湪鍫嗕腑鍒涘緩:

涓繪鏋剁獥鍙g被(鐩存帴鎴栭棿鎺ヤ粠CFrameWnd綾繪淳鐢?

瑙嗗浘綾?鐩存帴鎴栭棿鎺ヤ粠CView綾繪淳鐢?

浠庢煇縐嶇▼搴︿笂鏉ヨ,MFC鐨?鏈嶅姟鍒板"浣垮垵瀛﹁呮湁浜涙壘涓嶇潃鍖?涓嶈繃,涓嶅緱涓嶆壙璁?MFC騫茬殑寰堟紓浜?

璋堝埌榪欓噷,鎴戜滑搴旇鏄庣櫧c++閲屼竴鏉¢噸瑕佺殑鍑嗗垯:鐢―estroyWindow娓呴櫎紿楀彛瀵硅薄,涓嶈鐢?delete".

瀵逛簬涓嶅叿澶囪嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾諱嬌鐢?delete"鏃?"delete"鍏堣皟鐢ㄦ瀽鏋勫嚱鏁伴噷鐨凞estroyWindow,鐢變簬鍦ㄦ瀽鏋勫嚱鏁頒腑,铏氭満鍒朵笉璧蜂綔鐢?榪欓噷鍙兘璋冪敤鏈湴鐗堟湰(Cwnd綾?DestroyWindow鍑芥暟,鏄劇劧榪欎笉鏄垜浠兂瑕佺殑.瀵逛簬鏈夎嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾?濂借薄闂鏇翠弗閲嶄竴鐐?鍓嶉潰鎻愬埌浜嗛噸杞界殑PostNcDestroy宸茬粡鍚湁浜?delete this",榪欐牱c++瀵硅薄灝辮閲婃斁浜嗕袱嬈?

寰堝浜鴻涓?vc++鍚寁b涓鏍?鏄竴涓畬鍏ㄥ彲瑙嗗寲鐨勪駭鍝?涓嶇敤鍦ㄧ湅c++鐨勪功浜?閫氳繃涓婇潰瀵圭獥鍙e璞$殑娓呴櫎鐨勪粙緇?鍙互鍙戠幇,Windows紼嬪簭鏄笌Windows绱у瘑緇撳悎鐨?鑰屼笖鐗墊秹鍒板緢澶歝++鐨勭煡璇?濡傝櫄鍑芥暟銆佹瀽鏋勫嚱鏁般乶ew鎿嶄綔絎︾瓑).瑕佸vc++鏈夎繘涓姝ョ悊瑙?蹇呴』鐞嗚ВWindows鏈哄埗,娣卞叆瀛︿範c++.



澶ф搗 2009-02-11 10:50 鍙戣〃璇勮
]]>
[杞琞鍙湪榪愯鏃剁紪杈戠殑鍔犻熼敭琛?/title><link>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Mon, 12 Jan 2009 09:22:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/71821.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/71821.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/71821.html</trackback:ping><description><![CDATA[錛婏紛錛婄畝銆浠嬶紛錛婏紛 <p>銆銆鏈枃棣栧厛綆瑕佷粙緇嶄簡涓涓?a target=_blank><u><font color=#0000ff>Windows</font></u></a>涓殑鍑犱釜涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁鍏崇殑API鍑芥暟鍙婄粨鏋勩傜劧鍚庡鍦╓IN32浣嶇▼搴忎腑瀹炵幇<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛屼簡鎺㈣錛屽垎鍒氨API涓嬬殑紼嬪簭璁捐鍙奙FC涓嬬殑紼嬪簭璁捐榪涜浜嗗彊榪般?br>銆銆瀵逛簬榪愯鏃跺彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ粎鍦∕FC涓嬭繘琛屼簡璇︾粏鎻忚堪銆傚寘鎷叾瀹炵幇鍘熺悊錛屽茍寮曞澶у寤虹珛浜嗕竴涓敤浜庣紪杈?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勫璇濇錛屽惈璇︾粏鐨勪唬鐮併傚叧浜庡湪API涓嬪疄鐜拌繍琛屾椂鐨勫彲緙栬緫<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ笉鍐嶅彊榪幫紝鍙弬鑰僊FC涓嬬殑浠g爜銆?br>銆銆鎴戜滑閫氬父甯屾湜灝嗙紪杈戣繃鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿搗鏉ワ紝浠ヤ究涓嬫榪愯紼嬪簭鏃朵繚鎸佹垜浠紪杈戝悗鐨勯鏍箋傚湪鏈枃鐨勬渶鍚庯紝浠嬬粛浜嗗浣曞皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦鏂囦歡涓紝騫朵粠鏂囦歡涓鍙栨垜浠繚瀛樼殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ備綘鑻ユ槸鏈夋剰灝?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦<a target=_blank><u><font color=#0000ff>娉ㄥ唽琛?/font></u></a>鎴栧叾瀹冧粈涔堝湴鏂癸紝鍙弬鑰冨叾瀹冪殑鏈夊叧璧勬枡銆傛湰浜哄緩璁繚瀛樿嚦鏂囦歡姣旇緝鎭板綋銆?br>銆銆鏈枃浠嬬粛鐨勬墍鏈夋柟娉曞強浠g爜閮芥槸鍦?Windows98SE + Microsoft Visual <a target=_blank><u><font color=#0000ff>C++</font></u></a> 6.0 涓繘琛岀紪鍒跺拰璋冭瘯鐨勩傘</p> <p><br>銆銆涓銆佷笌<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁鍏崇殑鍑犱釜API鍑芥暟鍜岀粨鏋勩?/p> <p>銆銆鎿嶄綔<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ嬌鐢ㄧ殑鍑犱釜API鍑芥暟錛堝叧浜庤繖鍑犱釜鍑芥暟鐨勮緇嗚鏄庤鍙傝冩湁鍏充功綾嶏級錛?br>銆銆HACCEL LoadAccelerators(HINSTANCE hInstance, LPCTSTR lpTableNAme);<br>銆銆LoadAccelerators鍑芥暟浠庣▼搴忕殑璧勬簮涓姞杞戒竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝鍔犺澆鎴愬姛鍚庤繑鍥炰竴涓姞閫熷仴琛ㄧ殑鍙ユ焺銆傚叾涓細<br>銆銆hInstance銆銆搴旂敤紼嬪簭鐨勫疄渚嬪彞鏌勩?br>銆銆lpTableName銆鎸囧悜<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ悕縐板瓧絎︿覆鐨勬寚閽堛?/p> <p>銆銆HACCEL CreateAcceleratorTable(LPACCEL lpaccl, int cEntries);<br>銆銆CreateAcceleratorTable鍑芥暟鏍規嵁涓涓狝CCEL緇撴瀯鏁扮粍鍒涘緩涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ傝鍑芥暟涓嶭oadAccelerators涓嶅悓鐨勬槸錛歀oadAccelerators鍑芥暟鍔犺澆鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ湪紼嬪簭緇撴潫鍚庣郴緇熶細鑷姩灝嗚<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ粠鍐呭瓨涓竻闄わ紝浣咰reateAcceleratorTable鍑芥暟鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄩ渶瑕佷嬌鐢ㄥ嚱鏁癉estoryAceleratorTable鍑芥暟榪涜娓呴櫎銆?br>銆銆lpaccl銆銆銆涓涓寚鍚慉CCEL緇撴瀯鏁扮粍鐨勬寚閽堛?br>銆銆cEntries銆銆鏁扮粍涓厓绱犵殑涓暟銆?/p> <p>銆銆BOOL銆DestoryAcceleratorTable(HACCEL hAccel);<br>銆銆DestoryAcceleratorTable鍑芥暟娓呴櫎鐢盋reateAcceleratorTable鍑芥暟鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝鎴愬姛鍒欒繑鍥濼RUE銆傚叾涓細<br>銆銆hAccel銆銆銆闇瑕佹竻闄ょ殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勩?/p> <p>銆銆int TranslateAccelerator(HWND hWd, HACCEL hAccTable, LPMSG lpMsg);<br>銆銆TranslateAccelerator鍑芥暟璐熻矗緲昏瘧<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>銆傚叾涓細<br>銆銆hWnd銆銆銆銆 紿楀彛鍙ユ焺錛岀炕璇戝悗鐨勬秷鎭皢琚彂寰璇ョ獥鍙?br>銆銆hAccTable銆銆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勩?br>銆銆lpMsg銆銆銆銆鎸囧悜MSG緇撴瀯鐨勬寚閽堛?/p> <p>銆銆ACCEL緇撴瀯鐨勫畾涔夛細<br>typedef struct tagACCEL{<br>    BYTE    fVirt;<br>    WORD    key;<br>    WORD    cmd;<br>}ACCEL,*LPACCEL;</p> <p>鍏朵腑錛?br>銆銆fVirt銆銆銆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勬爣璁般?br>銆銆key銆銆銆銆閿殑浠g爜銆傚fVirt鎴愬憳鍖呭惈FVIRTKEY鏍囧織錛屽垯key鎸囦竴涓櫄閿爜錛屽惁鍒欐槸涓涓狝SCII鐮併?br>銆銆cmd銆銆銆銆鍛戒護ID鍙鳳紝璇ュ弬鏁板皢琚斁鍏M錛緾OMMAND鎴朩M錛縎YSCOMMAND娑堟伅鐨剋Param鍙傛暟鐨勪綆浣嶅瓧鍙戣嚦紿楀彛銆?/p> <p><br>銆銆浜屻佸湪windows涓嬪浣曚嬌鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?/p> <p>銆銆鍦╳indow涓嬩嬌鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ竴鑸湁涓ょ鏂規硶錛?錛屽垱寤轟竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>璧勬簮錛屽湪紼嬪簭涓嬌鐢ˋPI鍑芥暟LoadAccelerators鏉ュ皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ姞杞藉叆鍐呭瓨銆傚茍鍦ㄦ秷鎭驚鐜腑浣跨敤API鍑芥暟TranslateAccelerator鏉ョ炕璇戣<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?銆佸湪紼嬪簭涓~鍏呬竴涓狝CCEL鏁扮粍銆傜劧鍚庤皟鐢ˋPI鍑芥暟CreateAcceleratorTable鏉ュ垱寤哄姞閫熻〃錛岀炕璇?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍚屼笂錛屼絾涓嶈蹇樿鍦ㄩ鍑虹▼搴忓墠浣跨敤API鍑芥暟DestoryAcceleratorTable鏉ユ竻闄ゅ畠銆備笅闈㈠垎鍒粰鍑轟竴涓緥瀛愶細</p> <p>/*渚?:浣跨敤LoadAccelerators銆?br>銆鍋囪浣犲凡緇忓緩绔嬩簡涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>璧勬簮錛孖D涓篒DR錛緼CCEL銆?br>銆鍋囪浣犲凡緇忓畾涔変簡鍒濆鍖栧嚱鏁癐nitApplication(HINSTANCE hInstance,int nCmdShow),<br>銆璇ュ嚱鏁版墽琛屾敞鍐岀獥鍙g被鍜屽垱寤虹獥鍙f搷浣溿?br>*/<br>#include <windows.h><br>#include "rc/resource.h"<br>BOOL InitApplication(HINSTANCE hInstance,int nCmdShow);</p> <p>int APIENTRY WinMain(HINSTANCE hInstance,<br>                     HINSTANCE hPrevInstance,<br>                     LPSTR     lpCmdLine,<br>                     int       nCmdShow) <br>{<br>     MSG msg;<br>     HANDLE hAccelTable;<br>     // 鍒濆鍖栧簲鐢ㄧ▼搴忥紝騫剁敓鎴愪富紿楀彛.<br>     if (!InitApplication(hInstance, nCmdShow))<br>     {<br>         return FALSE;           // 鍒濆鍖栧け璐?br>     }<br>      //浣跨敤鍑芥暟LoadAccelerators浠庣▼搴忚祫婧愪腑鍔犺澆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>      hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCEL));<br>      // 鍙栧緱騫跺垎鍙戞秷鎭洿鍒版帴鏀跺埌 WM_QUIT 娑堟伅.<br>     while (GetMessage(&msg, NULL, 0, 0))<br>     {<br>         //鍦ㄥ垎鍙戞秷鎭墠棣栧厛璇曠潃鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀炕璇戯紝濡傛灉鏄竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍒欑敱<br>         //TranslateAccelerator鍑芥暟榪涜緲昏瘧錛屼笉鍐嶇戶緇鐞嗚娑堟伅銆?br>         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))<br>         {<br>             TranslateMessage(&msg);<br>             DispatchMessage(&msg);<br>         }<br>     }<br>     return msg.wParam;  // Returns the value from PostQuitMessage <br>} <br> </p> <p><br>/*渚?:浣跨敤CreateAcceleratorTable銆?br>銆鍋囪浣犲凡緇忓畾涔変簡鍒濆鍖栧嚱鏁癐nitApplication(HINSTANCE hInstance,int nCmdShow),<br>銆璇ュ嚱鏁版墽琛屾敞鍐岀獥鍙g被鍜屽垱寤虹獥鍙f搷浣溿?br>*/</p> <p>#include <windows.h><br>#include "rc/resource.h"</p> <p>錛僤efine ID_CMD_A      0x00000230<br>錛僤efine ID_CMD_B      0x00000231<br>錛僤efine ID_CMD_C      0x00000232<br>錛僤efine ID_CMD_D      0x00000233<br>錛僤efine ID_CMD_E      0x00000234<br>錛僤efine ID_CMD_F      0x00000235<br>錛僤efine ID_CMD_G      0x00000236</p> <p>//瀹氫箟浜嗕竷涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>,璇峰湪娑堟伅鍥炶皟鍑芥暟涓鐞嗚繖涓冧釜鍛戒護ID銆?br>static ACCEL accel[]={<br>    {FVIRTKEY|FCONTROL,VK_F5,ID_CMD_A},<br>    {FVIRTKEY|FCONTROL,VK_F6,ID_CMD_B},<br>    {FVIRTKEY|FCONTROL,VK_HOME,ID_CMD_C},<br>    {FVIRTKEY|FCONTROL,VK_END,ID_CMD_D},<br>    {FVIRTKEY|FCONTROL,"G",ID_CMD_E},<br>    {FVIRTKEY|FCONTROL,VK_SPACE,ID_CMD_F},<br>    {FVIRTKEY|FCONTROL,"K",ID_CMD_G},<br>};    </p> <p>BOOL InitApplication(HINSTANCE hInstance,int nCmdShow);</p> <p>int APIENTRY WinMain(HINSTANCE hInstance,<br>                     HINSTANCE hPrevInstance,<br>                     LPSTR     lpCmdLine,<br>                     int       nCmdShow) <br>{<br>     MSG msg;<br>     HANDLE hAccelTable;<br>     // 鍒濆鍖栧簲鐢ㄧ▼搴忥紝騫剁敓鎴愪富紿楀彛.<br>     if (!InitApplication(hInstance, nCmdShow))<br>     {<br>         return FALSE;           // 鍒濆鍖栧け璐?br>     }<br>      //浣跨敤鍑芥暟CreateAcceleratorTable浠庢暟緇刟ccel涓姞杞?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>      hAccelTable = CreateAcceleratorTable(accel, sizeof(accel)/sizeof(ACCEL));<br>      // 鍙栧緱騫跺垎鍙戞秷鎭洿鍒版帴鏀跺埌 WM_QUIT 娑堟伅.<br>     while (GetMessage(&msg, NULL, 0, 0))<br>     {<br>         //鍦ㄥ垎鍙戞秷鎭墠棣栧厛璇曠潃鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀炕璇戯紝濡傛灉鏄竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍒欑敱<br>         //TranslateAccelerator鍑芥暟榪涜緲昏瘧錛屼笉鍐嶇戶緇鐞嗚娑堟伅銆?br>         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))<br>         {<br>             TranslateMessage(&msg);<br>             DispatchMessage(&msg);<br>         }<br>     }<br>     //鍒犻櫎<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>     DestoryAcceleratorTable(hAccelTable);<br>     return msg.wParam;  // Returns the value from PostQuitMessage <br>} <br> </p> <p><br>銆銆鍦∕FC紼嬪簭璁捐涓紝鏈夊叧浜?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鎿嶄綔宸茬粡琚獵FrameWnd綾昏繘琛屼簡灝佽銆傞氬父錛屾垜浠殑紼嬪簭鐨勪富妗嗘灦綾籆MainFrame浠嶤FrameWnd綾繪淳鐢燂紙SDI鐣岄潰紼嬪簭錛夛紝鎴栬呬粠CMDIFrameWnd綾繪淳鐢燂紙MDI鐣岄潰紼嬪簭錛夛紝鑰孋MDIFrameWnd綾諱篃鏄粠CFrameWnd綾繪淳鐢熺殑銆傛墍浠ワ紝鎴戜滑騫朵笉鐢ㄥ幓鍏沖績閭d釜璧勬簮鍙蜂負IDR_MAINFRAME鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ槸濡備綍鍔犺澆鐨勶紝濡傛灉浣犲彧鏄渶瑕佷竴涓繖鏍風殑闈欐佺殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑璇濄?br>銆銆閭d箞鎴戜滑鑳戒笉鑳戒嬌鐢ㄨ嚜宸辯殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ憿錛熺瓟妗堟槸錛氬彲浠ョ殑銆?br>銆銆鍒涘緩<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鏂規硶鍚屽墠銆傜敱浜庡湪MFC涓紝WinMain鍑芥暟琚殣钘忥紝鎴戜滑涓嶈兘鐩存帴淇敼WinMain鍑芥暟錛屾墍浠ワ紝<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鍒涘緩灝嗗湪CMainFrame鐨凮nCreate鍑芥暟涓垱寤恒?br>銆銆1銆佸湪CMainFrame綾諱腑娣誨姞涓涓狧ACCEL綾誨瀷淇濇姢鎴愬憳鍙橀噺錛歮_hMyAccel銆傚湪鏋勯犲嚱鏁頒腑鍒濆鍖栦負NULL銆?br>銆銆2銆佸湪CMainFrame::OnCreate鍑芥暟鐨?“return 0;”鍙ュ墠澧炲姞鍒涘緩<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑浠g爜銆傝繑鍥炵殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勪繚瀛樺湪m_hMyAccel涓細</p> <p>銆銆銆鏂規硶1錛?IDR錛縈YACCEL涓轟綘瀹氫箟鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ祫婧愬彿)<br>銆銆銆m_hMyAccel=LoadAccelerators(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_MYACCEL));</p> <p>銆銆銆鏂規硶2錛?accel鍚屽墠闈㈢殑渚嬪瓙涓鏍峰湪鏈枃浠剁殑寮澶撮儴鍒嗚繘琛屽畾涔?<br>銆銆銆m_hMyAccel=CreateAcceleratorTable(accel,sizeof(accel)/sizeof(ACCEL));</p> <p>銆銆3銆佸鏋滄槸浣跨敤CreateAccelTable鍑芥暟鍒涘緩鐨勶紝鍒欓噸杞借櫄鎷熷嚱鏁癉estoryWindow()銆傚湪璇ュ嚱鏁扮殑“return CMDIFrameWnd::DestroyWindow();”鍓嶅鍔犲涓嬩唬鐮?</p> <p>    if(m_hMyAccel!=NULL){<br>        DestroyAcceleratorTable(m_hMyAccel);<br>        m_hMyAccel=NULL;<br>    }</p> <p>銆銆閫氳繃鍓嶉潰鐨勪笁姝ワ紝<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ凡緇忚兘姝g‘鍦拌鍒涘緩鍜屽垹闄や簡錛屼絾鏄畠榪樻病鏈夊伐浣溿備笅闈㈠氨鏄璁╂垜浠垰鎵嶆墍鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ伐浣滆搗鏉ャ?br>銆銆鍦ˋPI紼嬪簭璁捐涓ぇ瀹跺凡緇忕煡閬撲簡<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏄浣曞伐浣滅殑銆備篃灝辨槸鍦ㄦ秷鎭繕娌℃湁鍒嗗彂鍑哄幓涔嬪墠鍏堟鏌ユ槸涓嶆槸涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>銆傛垜浠氳繃API鍑芥暟TranslateAccelerator鏉ュ疄鐜般傚湪MFC涓紝娑堟伅鏈哄埗宸茬粡琚皝瑁呬簡錛屾垜浠笉鑳藉幓淇敼娑堟伅寰幆銆備絾鏄紝妗嗘灦鍦ㄥ垎鍙戞秷鎭墠浼氳皟鐢ㄨ櫄鎷熷嚱鏁癙erTranslateMessage錛屽茍涓斿鏋滆鍑芥暟榪斿洖TRUE錛屽垯涓嶅啀澶勭悊璇ユ秷鎭傝繖姝f槸鎴戜滑鎵闇瑕佺殑銆?br>銆銆璁╂垜浠啀鍥炲埌CMainFrame綾伙紝鐢熸垚PerTranslateMessage鍑芥暟鐨勮鐩栫増鏈備慨鏀瑰嚱鏁頒綋濡備笅錛?/p> <p>BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) <br>{<br>    // TODO: Add your specialized code here and/or call the base class<br>    if(m_hMyAccel&&TranslateAccelerator(m_hWnd, m_hMyAccel, pMsg))<br>        return TRUE;<br>    return CMDIFrameWnd::PreTranslateMessage(pMsg);<br>}</p> <p>銆銆濂戒簡錛岀幇鍦ㄦ垜浠殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>宸茬粡鑳芥甯稿湴宸ヤ綔浜嗐備互涓婃柟娉曠敤鍦ㄥ叾瀹冪獥鍙e悓鏍鋒湁鏁堬紙濡傚璇濇涓紝浣犱笉濡ㄥ湪瀵硅瘽妗嗕腑璇曡瘯錛夈?/p> <p><br>銆銆涓夈佸彲鍦ㄨ繍琛屾椂緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?/p> <p>銆銆閫氳繃涓婇潰鐨勫彊榪幫紝浣犲彲鑳藉凡緇忓鍙紪杈戠殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁浜嗕竴瀹氱殑杞粨銆傚叾瀹炲叾瀹炵幇鎬濇兂寰堢畝鍗曪細鍙瀵逛竴涓狝CCEL鏁扮粍榪涜淇敼錛岀劧鍚庨噸鏂扮敓鎴?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ氨琛屼簡銆?br>銆銆涓轟簡鍖哄垎鍛戒護錛屾垜浠負姣忎釜鍛戒護鍙栦竴涓悕瀛椼傚湪CMainFrame綾誨畾涔夌殑鍓嶉潰鍔犱笂涓嬮潰鐨勪竴涓粨鏋勫畾涔夛細</p> <p>typedef struct{<br>    char cCmd[32];<br>    ACCEL accel;<br>}ACCELITEM,*LPACCELITEM;</p> <p>銆銆鎴戜滑灝嗕嬌鐢ㄨ緇撴瀯鏉ヤ繚瀛?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鏁版嵁銆傚湪CMainFrame綾諱腑娣誨姞涓や釜淇濇姢鎴愬憳鍙橀噺錛?/p> <p>    LPACCELITEM m_lpAccel;<br>    DWORD m_dwAccelCount;</p> <p>銆銆鍦ㄦ瀯閫犲嚱鏁頒腑灝唌_lpAccel鍒濆鍖栦負NULL錛宮_dwAccelCount鍒濆鍖栦負0銆傚湪鏁扮粍accel鐨勫畾涔変笅闈㈠鍔犱竴涓瓧絎︿覆鏁扮粍鐨勯潤鎬佸彉閲忕殑瀹氫箟錛堢敤鏉ユ寚瀹氬懡浠ょ殑鍚嶇О,璇蜂豢鐓т笅闈㈣嚜宸卞畾涔夛紝涓暟澶氬皯涓嶉檺錛屽瓧絎︿覆闀垮害涓嶈瓚呰繃31涓瓧絎︼級錛?/p> <p>static char strCmd[][32]={<br>    "Command One",<br>    "Command Two",<br>    "Command Three",<br>    "Command Four",<br>    "Command Five"<br>};</p> <p><br>銆銆鍦–MainFrame綾諱腑娣誨姞涓涓繚鎶ゆ垚鍛樺嚱鏁癓oadAccel(),璇ュ嚱鏁扮敤鏉ュ皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ鍏ワ紝瀹氫箟濡備笅錛?/p> <p>BOOL CMainFrame::LoadAccel()<br>{<br>    ASSERT(m_hActAccel==NULL);<br>    ASSERT(m_lpAccel==NULL);<br>    m_dwAccelCount=sizeof(accel)/sizeof(ACCEL);<br>    m_lpAccel=new ACCELITEM[m_dwAccelCount];<br>    memset(m_lpAccel,0,sizeof(ACCELITEM)*m_dwAccelCount);<br>    DWORD dwCmdStr=sizeof(strCmd)/sizeof(char[32]);<br>    for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>        m_lpAccel[dw].accel=accel[dw];<br>        strcpy(m_lpAccel[dw].cCmd,dw<dwCmdStr?strCmd[dw]:"Command Unknow");<br>    }</p> <p>    m_hActAccel=CreateAcceleratorTable(accel,m_dwAccelCount);<br>    return TRUE;</p> <p>}</p> <p>銆銆鍒犻櫎OnCreate鍑芥暟涓師鏉ュ垱寤?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑浠g爜錛屾敼鎴愬LoadAccel()鐨勮皟鐢細</p> <p>    LoadAccel();</p> <p>銆銆鍦–MainFrame鐨勬瀽鏋勫嚱鏁頒腑澧炲姞浠ヤ笅鍐呭錛?/p> <p>    if(m_lpAccel)<br>        delete[] m_lpAccel;</p> <p>銆銆涓轟簡鑳藉瀵?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁榪涜緙栬緫錛屾垜浠湪宸ョ▼涓坊鍔犱竴涓璇濇璧勬簮錛孖D涓?#8220;IDD_ACCELEDIT”錛屽湪瀵硅瘽妗嗕笂鏀劇疆涓変釜鎴愮粍妗嗭紙Group Box錛夛紝宸﹁竟涓涓爣棰樹負“鍛戒護”錛涗腑闂翠竴涓爣棰樹負“緇勫悎閿?#8221;錛涘彸杈逛竴涓爣棰樹負“铏氶敭鍊?#8221;銆傚湪宸﹁竟鎴愮粍妗嗕腑鏀劇疆涓涓垪琛ㄦ錛圠ist Box錛夛紝ID涓?#8220;IDC_LST_CMD”銆傚湪涓棿鎴愮粍妗嗕腑鏀劇疆涓変釜鏍擱夋錛圕heck Box錛夛紝涓婁笅鎺掑垪銆備笂闈㈢殑鏍擱夋鐨処D涓?#8220;IDC_CHK_ALT”錛屾爣棰樹負“Alt”錛屽茍鍕鵑?#8220;Group”灞炴э紱涓棿鐨勬牳閫夋鐨処D涓?#8220;IDC_CHK_SHIFT”錛屾爣棰樹負“Shift”錛屽彇娑?#8220;Group”灞炴э紱涓嬮潰鐨勬牳閫夋鐨処D涓?#8220;IDC_CHK_CTRL”錛屾爣棰樹負“Ctrl”錛屽彇娑?#8220;Group”灞炴с傚湪鍙寵竟鐨勬垚緇勬涓斁緗竴涓垪琛ㄦ錛孖D涓?#8220;IDC_LST_KEY”銆傝皟鏁村悇涓帶浠剁殑灝哄鍙婁綅緗嚦鍚堥傘傝緗帶浠剁殑TAB璺寵漿欏哄簭錛屼粠宸﹁嚦鍙熾佷粠涓婂埌涓嬨備緷嬈′負錛氬乏鎴愮粍妗嗐両DC_LST_CMD鍒楄〃妗嗐佷腑鎴愮粍妗嗐両DC_CHK_ALT鏍擱夋銆両DC_CHK_SHIFT鏍擱夋銆両DC_CHK_CTRL鏍擱夋銆佸彸鎴愮粍妗嗐両DC_LST_KEY鍒楄〃妗嗐丱K鎸夐挳銆丆ANCEL鎸夐挳銆?br>銆銆鎵撳紑綾誨悜瀵鹼紝涓哄璇濇鏂板緩涓涓被錛岀被鍚嶄負“CDlgEditAccel”銆備負涓や釜鍒楄〃妗嗗拰涓変釜鏍擱夋鏄犲皠鍙橀噺錛屽涓嬶細<br>銆銆鎺т歡ID:ID_LST_CMD錛涚被鍨?Control/CListBox錛涘悕縐?m_LstCmd錛?br>銆銆鎺т歡ID:ID_LST_KEY錛涚被鍨?Control/CListBox錛涘悕縐?m_LstKey錛?br>銆銆鎺т歡ID:ID_CHK_ALT錛涚被鍨?Control/CButton錛涘悕縐?m_ChkAlt錛?br>銆銆鎺т歡ID:ID_CHK_SHIFT錛涚被鍨?Control/CButton錛涘悕縐?m_ChkShift錛?br>銆銆鎺т歡ID:ID_CHK_CTRL錛涚被鍨?Control/CButton錛涘悕縐?m_ChkCtrl錛?/p> <p>銆銆鍦ㄧ被CDlgEditAccel鐨勫畾涔夊墠鍔犲叆涓嬮潰鐨勫畾涔夛細<br>typedef struct tag_KeyName{<br>    CString m_strName;<br>    WORD m_wID;<br>    tag_KeyName(CString str,WORD id){m_strName=str,m_wID=id;}<br>}KEYNAME,*LPKEYNAME;</p> <p>typedef struct tag_ActAccel{<br>    CString m_strCmd;<br>    ACCEL m_Accel;<br>}ACTACCEL,*LPACTACCEL;</p> <p>class CActAccelList<br>{<br>public:<br>    CActAccelList();<br>    ~CActAccelList();</p> <p>protected:<br>    LPACTACCEL m_lpActAccel;<br>    int m_iCount;</p> <p>public:<br>    ACTACCEL& operator[](int index);<br>    BOOL SetSize(int iSize);<br>    int GetSize();<br>};</p> <p><br>銆銆鍦ㄦ枃浠禗lgEditAccel.cpp鏂囦歡涓畾涔夌被CActAccelList鐨勬垚鍛樺嚱鏁幫紝浠g爜濡備笅錛?br>CActAccelList::CActAccelList()<br>{<br>    m_lpActAccel=NULL;<br>   m_iCount=0;<br>}</p> <p>CActAccelList::~CActAccelList()<br>{<br>    if(m_iCount>0&&m_lpActAccel)<br>        delete[] m_lpActAccel;<br>}</p> <p>int CActAccelList::GetSize()<br>{<br>    return m_iCount;<br>}</p> <p>ACTACCEL& CActAccelList::operator []( int index)<br>{<br>    if(!(index>=0&&index<m_iCount))<br>    AfxThrowMemoryException();<br>    return m_lpActAccel[index];<br>}</p> <p>BOOL CActAccelList::SetSize(int iSize)<br>{<br>    if(iSize<0)<br>        return FALSE;<br>    if(m_iCount>0&&m_lpActAccel)<br>        delete[] m_lpActAccel;<br>    m_iCount=0;<br>    m_lpActAccel=new ACTACCEL[iSize];<br>    if(m_lpActAccel==NULL)<br>        return FALSE;<br>    m_iCount=iSize;<br>    return TRUE;<br>}</p> <p><br>銆銆鍦―lgAccelEdit.cpp鏂囦歡澶撮儴瀹氫箟鍏ㄥ眬鍙橀噺錛嶏紞鏁扮粍key錛?br>static KEYNAME key[]={<br>    KEYNAME("Left mouse button",VK_LBUTTON),<br>    KEYNAME("Right mouse button",VK_RBUTTON),<br>    KEYNAME("Control-break processing",VK_CANCEL),<br>    KEYNAME("Middle mouse button",VK_MBUTTON),<br>    KEYNAME("Back Space",VK_BACK),<br>    KEYNAME("Tab",VK_TAB),<br>    KEYNAME("Clear",VK_CLEAR),<br>    KEYNAME("Enter",VK_RETURN),<br>    KEYNAME("Shift",VK_SHIFT),<br>    KEYNAME("Ctrl",VK_CONTROL),<br>    KEYNAME("Alt",VK_MENU),<br>    KEYNAME("Pause",VK_PAUSE),<br>    KEYNAME("Caps Lock",VK_CAPITAL),<br>    KEYNAME("Esc",VK_ESCAPE),<br>    KEYNAME("Space",VK_SPACE),<br>    KEYNAME("Page Up",VK_PRIOR),  <br>    KEYNAME("Page Down",VK_NEXT),<br>    KEYNAME("End",VK_END),<br>    KEYNAME("Home",VK_HOME),<br>    KEYNAME("Left",VK_LEFT),<br>    KEYNAME("Up",VK_UP),<br>    KEYNAME("Right",VK_RIGHT),<br>    KEYNAME("Down",VK_DOWN),<br>    KEYNAME("Select",VK_SELECT),<br>    KEYNAME("Excute",VK_EXECUTE),<br>    KEYNAME("Print Screen",VK_SNAPSHOT),<br>    KEYNAME("Insert",VK_INSERT),<br>    KEYNAME("Delete",VK_DELETE),<br>    KEYNAME("Help",VK_HELP),<br>    KEYNAME("0",'0'),<br>    KEYNAME("1",'1'),<br>    KEYNAME("2",'2'),<br>    KEYNAME("3",'3'),<br>    KEYNAME("4",'4'),<br>    KEYNAME("5",'5'),<br>    KEYNAME("6",'6'),<br>    KEYNAME("7",'7'),<br>    KEYNAME("8",'8'),<br>    KEYNAME("9",'9'),<br>    KEYNAME("A",'A'),<br>    KEYNAME("B",'B'),<br>    KEYNAME("C",'C'),<br>    KEYNAME("D",'D'),<br>    KEYNAME("E",'E'),<br>    KEYNAME("F",'F'),<br>    KEYNAME("G",'G'),<br>    KEYNAME("H",'H'),<br>    KEYNAME("I",'I'),<br>    KEYNAME("J",'J'),<br>    KEYNAME("K",'K'),<br>    KEYNAME("L",'L'),<br>    KEYNAME("M",'M'),<br>    KEYNAME("N",'N'),<br>    KEYNAME("O",'O'),<br>    KEYNAME("P",'P'),<br>    KEYNAME("Q",'Q'),<br>    KEYNAME("R",'R'),<br>    KEYNAME("S",'S'),<br>    KEYNAME("T",'T'),<br>    KEYNAME("U",'U'),<br>    KEYNAME("V",'V'),<br>    KEYNAME("W",'W'),<br>    KEYNAME("X",'X'),<br>    KEYNAME("Y",'Y'),<br>    KEYNAME("Z",'Z'),<br>    KEYNAME("Left windows",VK_LWIN),<br>    KEYNAME("Right windows",VK_RWIN),<br>    KEYNAME("Applications",VK_APPS),<br>    KEYNAME("Numeric keypad 0", VK_NUMPAD0),<br>    KEYNAME("Numeric keypad 1", VK_NUMPAD1),<br>    KEYNAME("Numeric keypad 2", VK_NUMPAD2),<br>    KEYNAME("Numeric keypad 3", VK_NUMPAD3),<br>    KEYNAME("Numeric keypad 4", VK_NUMPAD4),<br>    KEYNAME("Numeric keypad 5", VK_NUMPAD5),<br>    KEYNAME("Numeric keypad 6", VK_NUMPAD6),<br>    KEYNAME("Numeric keypad 7", VK_NUMPAD7),<br>    KEYNAME("Numeric keypad 8", VK_NUMPAD8),<br>    KEYNAME("Numeric keypad 9", VK_NUMPAD9), <br>    KEYNAME("Multiply",VK_MULTIPLY),<br>    KEYNAME("Add",VK_ADD),<br>    KEYNAME("Separator",VK_SEPARATOR),<br>    KEYNAME("Subtract",VK_SUBTRACT),<br>    KEYNAME("Decimal Point",VK_DECIMAL),<br>    KEYNAME("Divide",VK_DIVIDE),<br>    KEYNAME("F1",VK_F1),<br>    KEYNAME("F2",VK_F2),<br>    KEYNAME("F3",VK_F3),<br>    KEYNAME("F4",VK_F4),<br>    KEYNAME("F5",VK_F5),<br>    KEYNAME("F6",VK_F6),<br>    KEYNAME("F7",VK_F7),<br>    KEYNAME("F8",VK_F8),<br>    KEYNAME("F9",VK_F9),<br>    KEYNAME("F10",VK_F10),<br>    KEYNAME("F11",VK_F11),<br>    KEYNAME("F12",VK_F12),<br>    KEYNAME("F13",VK_F13),<br>    KEYNAME("F14",VK_F14),<br>    KEYNAME("F15",VK_F15),<br>    KEYNAME("F16",VK_F16),<br>    KEYNAME("F17",VK_F17),<br>    KEYNAME("F18",VK_F18),<br>    KEYNAME("F19",VK_F19),<br>    KEYNAME("F20",VK_F20),<br>    KEYNAME("F21",VK_F21),<br>    KEYNAME("F22",VK_F22),<br>    KEYNAME("F23",VK_F23),<br>    KEYNAME("F24",VK_F24),<br>    KEYNAME("Attn",VK_ATTN),<br>    KEYNAME("CrSel",VK_CRSEL),<br>    KEYNAME("ExSel",VK_EXSEL),<br>    KEYNAME("Erase",VK_EREOF),<br>    KEYNAME("Play",VK_PLAY),<br>    KEYNAME("Zoom",VK_ZOOM),<br>    KEYNAME("Reserved for future use",VK_NONAME ),<br>    KEYNAME("PA1",VK_PA1),<br>    KEYNAME("Clear(OEM)",VK_OEM_CLEAR ),</p> <p>    KEYNAME("<a href="file://%22,'//'"><u><font color=#0000ff>file://",'//'</font></u></a>),<br>    KEYNAME("-",'-'),<br>    KEYNAME("=",'='),<br>    KEYNAME("[",'['),<br>    KEYNAME("]",']'),<br>    KEYNAME(";",';'),<br>    KEYNAME("\'",'\''),<br>    KEYNAME(",",','),<br>    KEYNAME(".",'.'),<br>    KEYNAME("/",'/'),<br>    KEYNAME("`",'`')<br>};</p> <p><br>銆銆鍦ㄧ被CDlgAccelEdit涓搷搴擶indows娑堟伅錛歐M_INITDIALOD錛屼唬鐮佸涓嬶細<br>BOOL CDlgEditAccel::OnInitDialog() <br>{<br>    CDialog::OnInitDialog();</p> <p>    // TODO: Add extra initialization here<br>    SetWindowText("Edit Accelerator Table");</p> <p>    int iCount=m_AccelList.GetSize();<br>    int i;<br>    for(i=0;i<iCount;i++){<br>        m_LstCmd.AddString(m_AccelList[i].m_strCmd);<br>    }<br>    for(i=0;i<sizeof(key)/sizeof(KEYNAME);i++)<br>    {<br>        m_LstKey.AddString(key[i].m_strName);<br>    }<br>    m_LstCmd.SetCurSel(0);<br>    OnSelchangeLstCmd();<br>    return TRUE;  // return TRUE unless you set the focus to a control<br>                  // EXCEPTION: OCX Property Pages should return FALSE<br>}</p> <p><br>銆銆涓虹被CDglAccelEdit澧炲姞涓涓繚鎶ゆ垚鍛樺嚱鏁幫細<br>    void SaveChange(int index=-1);</p> <p>銆銆鍦ㄦ枃浠禗lgAccelEdit涓畾涔夎鍑芥暟錛屼唬鐮佸涓嬶細</p> <p>void CDlgEditAccel::SaveChange(int index)<br>{<br>    if(index>=0||(index=m_LstCmd.GetCurSel())>=0)<br>    {<br>        if(m_LstKey.GetCurSel()<0){<br>            AfxMessageBox("浣犲繀闇閫夋嫨涓涓敭鐮?");<br>            return;<br>        }<br>        BYTE btCmp=((m_ChkAlt.GetCheck()==1)?FALT:NULL)|<br>                   ((m_ChkCtrl.GetCheck()==1)?FCONTROL:NULL)|<br>                   ((m_ChkShift.GetCheck()==1)?FSHIFT:NULL)|FVIRTKEY;<br>        WORD wKey=key[m_LstKey.GetCurSel()].m_wID;</p> <p>        m_AccelList[index].m_Accel.fVirt=btCmp;<br>        m_AccelList[index].m_Accel.key=wKey;<br>        return;<br>    }<br>}</p> <p>銆銆鍝嶅簲鍒楄〃妗咺D_LST_CMD鐨勯氱煡娑堟伅“LBN_SELCHANGE”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnSelchangeLstCmd() <br>{<br>    // TODO: Add your control notification handler code here<br>    int iCmd=m_LstCmd.GetCurSel();<br>    WORD wKey=m_AccelList[iCmd].m_Accel.key;<br>    BYTE btCmp=m_AccelList[iCmd].m_Accel.fVirt;<br>    m_ChkAlt.SetCheck(btCmp&FALT);<br>    m_ChkCtrl.SetCheck(btCmp&FCONTROL);<br>    m_ChkShift.SetCheck(btCmp&FSHIFT);<br>    int iCount=sizeof(key)/sizeof(KEYNAME);<br>    int id=-1;<br>    for(int i=0;i<iCount;i++)<br>    {<br>        if(key[i].m_wID==wKey){<br>            id=i;<br>            break;<br>        }<br>    }<br>    m_LstKey.SetCurSel(id);</p> <p>}</p> <p>銆銆鍝嶅簲鍒楄〃妗咺D_LST_KEY鐨勯氱煡娑堟伅“LBN_SELCHANGE”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnSelchangeLstKey() <br>{<br>    SaveChange(); <br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_ALT鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkAlt() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_SHIFT鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkShift() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_CTRL鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkCtrl() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鑷蟲錛岀敤浜庣紪杈?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勫璇濇宸茬粡瀹屾垚銆傛垜浠幇鍦ㄨ鍋氱殑灝辨槸鍦ㄧ▼搴忎腑鎵撳紑瀵硅瘽妗嗘潵緙栬緫浜嗐傝鎴戜滑鍥炲埌CMainFrame綾諱腑銆傛垜浠皢鍦ㄨ綾諱腑鍝嶅簲涓涓懡浠ゆ潵鎵撳紑緙栬緫瀵硅瘽妗嗭紝瀵?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀紪杈戙傚畬鎴愬悗鐐規寜OK鍥炲埌涓葷▼搴忎腑錛岀劧鍚庢洿鏂?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ傝繖鏍峰悗錛屾垜浠垰鍒氱紪杈戝ソ鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ氨寮濮嬭搗浣滅敤浜嗐?br>銆銆棣栧厛錛屾墦寮鑿滃崟銆傚湪“鏌ョ湅”欏瑰悗澧炲姞涓涓?#8220;宸ュ叿(&T)”涓嬫媺鑿滃崟錛屽湪涓嬫媺鑿滃崟涓鍔犱竴涓簡鑿滃崟錛?#8220;緙栬緫<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?&A)...”錛孖D涓?#8220;ID_TOOL_ACCELEDIT”銆傛墦寮綾誨悜瀵鹼紝閫夋嫨CMainFrame綾伙紝鍝嶅簲“ID_TOOL_ACCELEDIT”鍛戒護銆傜紪杈戝搷搴斿嚱鏁板涓嬶細</p> <p>void CMainFrame::OnToolAcceledit() <br>{<br>    // TODO: Add your command handler code here<br>    CDlgEditAccel dlg;</p> <p>    DWORD i;<br>    dlg.m_AccelList.SetSize(m_dwAccelCount);<br>    for(i=0;i<m_dwAccelCount;i++){<br>        dlg.m_AccelList[i].m_strCmd=m_lpAccel[i].cCmd;<br>        dlg.m_AccelList[i].m_Accel=m_lpAccel[i].accel;<br>    }<br>    if(IDOK==dlg.DoModal()){<br>        ACCEL* pAccel=new ACCEL[m_dwAccelCount];<br>        for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>            m_lpAccel[dw].accel=pAccel[dw]=dlg.m_AccelList[dw].m_Accel;<br>        }</p> <p>        if(m_hActAccel!=NULL)<br>        DestroyAcceleratorTable(m_hActAccel);<br>        m_hActAccel=CreateAcceleratorTable(pAccel,m_dwAccelCount);<br>    }<br>}</p> <p>銆銆鍦ㄨ鏂囦歡鐨勫ご閮ㄥ寘鍚被CDlgEditAccel鐨勫ご鏂囦歡錛?/p> <p>#include "DlgEditAccel.h"</p> <p>銆銆鑷蟲錛屽彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ凡緇忓畬鎴愪簡銆備笉濡ㄨ瘯璇曠湅銆?/p> <p>銆銆涓夈佸皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦鏂囦歡錛屽茍鍦ㄧ▼搴忚繍琛屾椂鑷姩浠庢枃浠朵腑鍔犺澆銆?/p> <p>銆銆涓婇潰鎴戜滑瀹炵幇浜嗗彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ備絾鏄紝褰撶▼搴忛鍑哄悗錛屾垜浠紪杈戣繃鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁灝辨秷澶變簡錛屼笅嬈¤繍琛岀▼搴忔椂榪樻槸鍜屼互鍓嶄竴鏍蜂簡銆傚皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿搗鏉ヤ互澶囦笅嬈′嬌鐢紝榪欐槸鎴戜滑鎵甯屾湜鐨勩備笅闈㈣璁虹殑鏂規硶鏄嬌鐢ㄦ枃浠舵潵淇濆瓨鎴戜滑鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?br>銆銆棣栧厛錛屽湪MainFrm.cpp鏂囦歡鐨勫ご閮ㄥ畾涔変竴涓叏灞瀛楃涓詫紝涔熷氨鏄敤浜庝繚瀛?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勬枃浠跺悕錛?/p> <p>static char strAccelFileName[]="Accel.cus";</p> <p>銆銆瀹氫箟涓涓狣WORD鍊間綔涓烘枃浠跺ご錛屾垜浠氳繃璇WORD鍊兼潵鍒ゆ柇鏄惁鏄竴涓湁鏁堟牸寮忕殑鏂囦歡錛?/p> <p>#define ACCEL_FILE_HEAD 0x00434341</p> <p><br>銆銆鍏舵錛屼負CMainFrame綾繪坊鍔犱竴涓繚鎶ょ殑鎴愬憳鍑芥暟錛?#8220;BOOL SaveAccel()”錛岀紪杈戝叾浠g爜濡備笅錛?br>BOOL CMainFrame::SaveAccel()<br>{<br>    char lpAppName[256];<br>    char lpAppPath[256];<br>    char* lpFilePart=NULL;<br>    GetModuleFileName(AfxGetInstanceHandle(),lpAppName,255);<br>    GetFullPathName(lpAppName,255,lpAppPath,&lpFilePart);<br>    TRACE1("Application File Name:%s.\n",lpAppName);<br>    strcpy(lpFilePart,strAccelFileName);<br>    TRACE1("Accelerator File Name:%s.\n",lpAppPath);<br>    try<br>    {<br>        DWORD dwHead=ACCEL_FILE_HEAD;<br>        DWORD dwCount=m_dwAccelCount;</p> <p>        CFile fAccel(lpAppPath,CFile::modeCreate|CFile::modeWrite);<br>        fAccel.SeekToBegin();<br>        fAccel.Write(&dwHead,sizeof(DWORD));<br>        fAccel.Write(&dwCount,sizeof(DWORD));<br>        for(DWORD dw=0;dw<dwCount;dw++)<br>        {<br>            fAccel.Write(m_lpAccel+dw,sizeof(ACCELITEM));<br>        }</p> <p>        return TRUE;</p> <p>    }</p> <p>    catch(CFileException* e)<br>    {<br>        char buf[256];<br>        char buf2[512];<br>        int iError;<br>        iError=e->m_cause;<br>        e->GetErrorMessage(buf,256);<br>        sprintf(buf2,"灝?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樺埌鏂囦歡 \"%s\" 涓椂鍙戠敓閿欒!\n"<br>                     "閿?璇?鍙?%d\n"<br>                     "閿欒鎻忚堪:%s\n"<br>                     "\0",<br>                     strAccelFileName,iError,buf);<br>        AfxMessageBox(buf2,MB_OK|MB_ICONSTOP|MB_DEFBUTTON1);<br>        return FALSE;<br>    }<br>}</p> <p>銆銆鍐嶆錛屼慨鏀筁oadAccel()鍑芥暟濡備笅錛?/p> <p>BOOL CMainFrame::LoadAccel()<br>{<br>    char lpAppName[256];<br>    char lpAppPath[256];<br>    char* lpFilePart=NULL;<br>    GetModuleFileName(AfxGetInstanceHandle(),lpAppName,255);<br>    GetFullPathName(lpAppName,255,lpAppPath,&lpFilePart);<br>    TRACE1("Application File Name:%s.\n",lpAppName);<br>    strcpy(lpFilePart,strAccelFileName);<br>    TRACE1("Accelerator File Name:%s.\n",lpAppPath);<br>    try<br>    {<br>        DWORD dwHead;<br>        DWORD dwCount;</p> <p>        CFile fAccel(lpAppPath,CFile::modeRead);<br>        fAccel.SeekToBegin();<br>        if(fAccel.Read(&dwHead,sizeof(DWORD))!=sizeof(DWORD))<br>            AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        if(dwHead!=ACCEL_FILE_HEAD)<br>            AfxThrowFileException(CFileException::invalidFile,13,lpAppPath);</p> <p>        if(fAccel.Read(&dwCount,sizeof(DWORD))!=sizeof(DWORD))<br>            AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        <br>        ASSERT(m_lpAccel==NULL);<br>        <br>        m_lpAccel=new ACCELITEM[dwCount];<br>        memset(m_lpAccel,0,sizeof(ACCELITEM)*dwCount);<br>        m_dwAccelCount=dwCount;</p> <p>        for(DWORD dw=0;dw<dwCount;dw++)<br>        {<br>            if(fAccel.Read(m_lpAccel+dw,sizeof(ACCELITEM))!=sizeof(ACCELITEM))<br>                AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        }</p> <p>        ACCEL* pAccel=new ACCEL[dwCount];<br>        for(dw=0;dw<dwCount;dw++){<br>            pAccel[dw]=m_lpAccel[dw].accel;<br>        }</p> <p>        m_hActAccel=CreateAcceleratorTable(pAccel,dwCount);</p> <p>        return TRUE;</p> <p>    }</p> <p>    catch(CFileException* e)<br>    {<br>        char buf[256];<br>        char buf2[512];<br>        int iError;<br>        iError=e->m_cause;<br>        e->GetErrorMessage(buf,256);<br>        sprintf(buf2,"浠庢枃浠?\"%s\" 涓姞杞?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ椂鍙戠敓閿欒!\n"<br>                     "閿?璇?鍙?%d\n"<br>                     "閿欒鎻忚堪:%s\n"<br>                     "鏄惁鐢熸垚榛樿鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?\n\0",<br>                     strAccelFileName,iError,buf);<br>        if(IDYES==AfxMessageBox(buf2,MB_YESNO|MB_SYSTEMMODAL|MB_ICONSTOP|MB_DEFBUTTON1))<br>        {<br>            ASSERT(m_hActAccel==NULL);<br>            ASSERT(m_lpAccel==NULL);<br>            m_dwAccelCount=sizeof(accel)/sizeof(ACCEL);<br>            m_lpAccel=new ACCELITEM[m_dwAccelCount];<br>            memset(m_lpAccel,0,sizeof(ACCELITEM)*m_dwAccelCount);<br>            DWORD dwCmdStr=sizeof(strCmd)/sizeof(char[30]);<br>            for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>                m_lpAccel[dw].accel=accel[dw];<br>                strcpy(m_lpAccel[dw].cCmd,dw<dwCmdStr?strCmd[dw]:"Command Unknow");<br>            }<br>            <br>            m_hActAccel=CreateAcceleratorTable(accel,m_dwAccelCount);<br>            SaveAccel();<br>            return TRUE;<br>        }<br>        return FALSE;<br>    }<br>}</p> <p>銆銆鏈鍚庯紝鍦―estroyWindow()鍑芥暟澶撮儴澧炲姞瀵筍aveAccel()鍑芥暟鐨勮皟鐢細</p> <p>    SaveAccel();<br>    ...</p> <p>銆銆濂戒簡錛屼綘鑷繁鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁宸茬粡鑳戒繚瀛樺湪鏂囦歡涓簡錛屽茍鑳戒粠涓紜姞杞姐傚鏋滄枃浠朵笉瀛樺湪鎴栫▼搴忚鍙栨椂鍙戠幇閿欒鍒欐彁閱掍綘鏄惁寤虹珛緙虹渷鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝濡備綘紜鐨勮瘽鍒欑敓鎴愮己鐪佺殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ茍绔嬪埢淇濆瓨鑷蟲枃浠朵腑銆?br>銆銆鐢變簬姘村鉤鏈夐檺錛屽叾涓毦鍏嶆湁璇紝嬈㈣繋鎵硅瘎鎸囨銆佸彂琛ㄤ綘鐨勬剰瑙併傛湰浜轟笉鑳滄劅嬋銆?br></p> <img src ="http://m.shnenglu.com/tgh621/aggbug/71821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2009-01-12 17:22 <a href="http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鐢╓aitForSingleObject絳夊緟浜嬩歡澶勭悊http://m.shnenglu.com/tgh621/archive/2009/01/12/71782.html澶ф搗澶ф搗Mon, 12 Jan 2009 02:17:00 GMThttp://m.shnenglu.com/tgh621/archive/2009/01/12/71782.htmlhttp://m.shnenglu.com/tgh621/comments/71782.htmlhttp://m.shnenglu.com/tgh621/archive/2009/01/12/71782.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/71782.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/71782.html 1void ClearMessage(HWND hWnd,BOOL bExtMsg)
 2{
 3    MSG GetMsg;
 4    while(PeekMessage(&GetMsg,hWnd,0,0,PM_REMOVE))
 5    {        
 6        if(GetMsg.message == WM_TIMER) continue;
 7        TranslateMessage(&GetMsg);
 8        DispatchMessage(&GetMsg);
 9    }
            
10    if(hWnd != NULL && bExtMsg)
11    {    
12        while(PeekMessage(&GetMsg,NULL,WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,PM_REMOVE))
13        {        
14            TranslateMessage(&GetMsg);
15            DispatchMessage(&GetMsg);
16        }
                                
17        while(PeekMessage(&GetMsg,NULL,0,0,PM_QS_PAINT))
18        {        
19            TranslateMessage(&GetMsg);
20            DispatchMessage(&GetMsg);
21        }

22    }

23}

24
25void CExportRegeditToXml::OnBnClickedCancel()
26{
27
28
29    if ( ( NULL != m_TransRegedit )  && ( !pThreadData->m_brepalce) ) 
30    {
31        if(MessageBox(_T("鐩墠姝e湪瀵煎嚭娉ㄥ唽琛紝鏄惁鍙栨秷!"),_T("璀﹀憡"),MB_YESNO)!=IDYES)
32            return;
33        pThreadData->m_brepalce = TRUE;
34
35        while (m_TransRegedit && WaitForSingleObject(m_TransRegedit->m_hThread,40)!=WAIT_OBJECT_0) 
36        {
37            ClearMessage(NULL, TRUE);
38        }

39        m_TransRegedit = NULL;
40    }

41
42    OnCancel();
43}


澶ф搗 2009-01-12 10:17 鍙戣〃璇勮
]]>
[杞琞PSD鏍煎紡鏂囦歡鐨勮鍙?/title><link>http://m.shnenglu.com/tgh621/archive/2008/12/26/70462.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Fri, 26 Dec 2008 10:15:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/12/26/70462.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/70462.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/12/26/70462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/70462.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/70462.html</trackback:ping><description><![CDATA[<font size=2>銆PhotoShop錛屾垜鎯蟲病鏈変漢浼氫笉鐭ラ亾鍚с傚浠婃渶鏂扮殑鐗堟湰鏄?.0錛屽叾鍥捐薄鏂囦歡*.PSD鍜?.5鐩告瘮鍙樺寲騫朵笉澶ぇ銆備互涓嬫垜灝變粙緇?.PSD鏂囦歡鐨勮鍙栨柟娉曪紝騫舵彁渚涘畬鏁磋鍙栧嚱鏁般傚叾涓細m_Rect涓虹洰鏍囧尯鍩燂紝m_lpDDS7涓虹洰鏍嘍irectDraw琛ㄩ潰錛宮_pbAlphaMask涓虹洰鏍嘇plha閫氬憡鎸囬拡銆俁ead16鍑芥暟涓轟粠鎸囧畾鏂囦歡褰撳墠浣嶇疆璇誨彇涓涓猈ORD錛孯ead32鍑芥暟涓轟粠鎸囧畾鏂囦歡褰撳墠浣嶇疆璇誨彇涓涓狣WORD銆侻AX_PSD_CHANNELS涓?4銆備互涓嬪氨鏄?.PSD鏂囦歡鐨勮鍙栨柟娉曪紝鏈夊叴瓚g殑鏈嬪弸鍙互緇х畫娣卞叆鐮旂┒錛屽埌鏃跺彲鍒繕浜嗗彂鎴戜竴浠姐?br></font></font><font class=f14 id=zoom><font face=瀹嬩綋><br></font></font><font face=瀹嬩綋></font></font><font face=Arial><font class=f14 id=zoom><font face=瀹嬩綋><font color=#99ccff><font size=2><span id="hvzpftn" class=ColorCode>銆銆HRESULT LoadPSD( LPSTR strFilename )</span> </font><font color=#c0c0c0><span id="hvzpftn" class=ColorCatchword><font size=2>// 璇誨彇PSD鏂囦歡</font></span></font><font size=2><br><span id="hvzpftn" class=ColorCode>銆銆{<br>銆銆銆銆DWORD dwWidth, dwHeight;</span> <font color=#c0c0c0><span id="hvzpftn" class=ColorCatchword>// 瀹介珮</span></font><br><span id="hvzpftn" class=ColorCode>銆銆銆銆long lSurfWidth = m_Rect.right - m_Rect.left;<br>銆銆銆銆long lSurfHeight = m_Rect.bottom - m_Rect.top;<br>銆銆銆銆WORD CompressionType;</span> <font color=#c0c0c0><span id="hvzpftn" class=ColorCatchword>// 鍘嬬緝綾誨瀷</span></font><br><span id="hvzpftn" class=ColorCode>銆銆銆銆HDC hDC;<br>銆銆銆銆FILE *fpPSD;<br>銆銆銆銆WORD ChannelCount;</span> <font color=#c0c0c0><span id="hvzpftn" class=ColorCatchword>// 閫氶亾鏁?/span></font><br><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 鎵撳紑PSD鏂囦歡</font></span><br><span id="hvzpftn" class=ColorCode>銆銆銆銆if ( ( fpPSD = fopen ( strFilename, "rb" ) ) == NULL ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 澶村洓涓瓧鑺備負"8BPS"</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆char signature[5];<br>銆銆銆銆signature[0] = fgetc( fpPSD );<br>銆銆銆銆signature[1] = fgetc( fpPSD );<br>銆銆銆銆signature[2] = fgetc( fpPSD );<br>銆銆銆銆signature[3] = fgetc( fpPSD );<br>銆銆銆銆signature[4] = '\0';<br>銆銆銆銆if ( strcmp( signature,"8BPS" ) != 0 ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 鐗堟湰蹇呴』涓?</font></span><br><span id="hvzpftn" class=ColorCode>銆銆銆銆if ( Read16( fpPSD ) != 1 ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 璺寵繃涓浜涙暟鎹?(鎬繪槸0)</font></span><br><span id="hvzpftn" class=ColorCode>銆銆銆銆Read32( fpPSD );<br>銆銆銆銆Read16( fpPSD );<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 璇誨彇閫氶亾鏁?/font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆ChannelCount = Read16( fpPSD );</span><br><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 紜畾鑷沖皯鏈変竴涓氶亾</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆if ( ( ChannelCount < 0 ) || ( ChannelCount > MAX_PSD_CHANNELS ) ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 璇誨叆瀹藉拰楂?/font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆dwHeight = Read32( fpPSD );<br>銆銆銆銆dwWidth = Read32( fpPSD );<br>銆銆銆銆if ( dwWidth != ( DWORD )lSurfWidth ||</span> <span id="hvzpftn" class=ColorCode>dwHeight != ( DWORD )lSurfHeight ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 鍙鍏?浣嶉氶亾</font></span><br><span id="hvzpftn" class=ColorCode>銆銆銆銆if ( Read16( fpPSD ) != 8 ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword><font color=#c0c0c0>銆銆銆銆// 紜畾妯″紡涓篟GB.<br>銆銆銆銆// 鍙兘鍊鹼細<br>銆銆銆銆// 0: 浣嶅浘<br>銆銆銆銆// 1: 鐏伴樁<br>銆銆銆銆// 2: 绱㈠紩<br>銆銆銆銆// 3: RGB<br>銆銆銆銆// 4: CMYK<br>銆銆銆銆// 7: Multichannel<br>銆銆銆銆// 8: Duotone<br>銆銆銆銆// 9: Lab</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆if ( Read16( fpPSD ) != 3 ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 璺寵繃鏁版嵁錛堝璋冭壊鏉匡級</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆int ModeDataCount = Read32( fpPSD );<br>銆銆銆銆if ( ModeDataCount )<br>銆銆銆銆銆銆fseek( fpPSD, ModeDataCount, SEEK_CUR );<br></span><br><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 璺寵繃鏁版嵁錛堝錛歱en tool paths, etc錛?/font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆int ResourceDataCount = Read32( fpPSD );<br>銆銆銆銆if ( ResourceDataCount )<br>銆銆銆銆銆銆fseek( fpPSD, ResourceDataCount, SEEK_CUR );<br><br></span><span id="hvzpftn" class=ColorCatchword>銆銆銆銆<font color=#c0c0c0>// 鏉¤繃淇濈暀鏁版嵁</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆int ReservedDataCount = Read32( fpPSD );<br>銆銆銆銆if ( ReservedDataCount )<br>銆銆銆銆銆銆fseek( fpPSD, ReservedDataCount, SEEK_CUR );<br></span><br><span id="hvzpftn" class=ColorCatchword><font color=#c0c0c0>銆銆銆銆// 0: 闈炲帇緙?br>銆銆銆銆// 1: RLE鍘嬬緝</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆CompressionType = Read16( fpPSD );<br>銆銆銆銆if ( CompressionType > 1 ) {<br>銆銆銆銆銆銆return E_FAIL;<br>銆銆銆銆}<br><br>銆銆銆銆BYTE* PSDPixels = new BYTE[ ( lSurfWidth * lSurfHeight ) * 4 ];<br></span><br><span id="hvzpftn" class=ColorCatchword><font color=#c0c0c0>銆銆銆銆// 瑙e寘鏁版嵁</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆UnPackPSD( fpPSD, lSurfWidth, lSurfHeight, PSDPixels, ChannelCount, CompressionType );<br><br>銆銆銆銆fclose( fpPSD );<br></span><br><span id="hvzpftn" class=ColorCatchword><font color=#c0c0c0>銆銆銆銆// 澶嶅埗淇℃伅</font><br></span><span id="hvzpftn" class=ColorCode>銆銆銆銆BITMAPINFO BitmapInfo;<br>銆銆銆銆ZeroMemory( &BitmapInfo, sizeof( BitmapInfo ) );<br>銆銆銆銆BitmapInfo.bmiHeader.biSize = sizeof( BitmapInfo.bmiHeader );<br>銆銆銆銆BitmapInfo.bmiHeader.biWidth = lSurfWidth;<br>銆銆銆銆BitmapInfo.bmiHeader.biHeight = -lSurfHeight;<br>銆銆銆銆BitmapInfo.bmiHeader.biPlanes = 1;<br>銆銆銆銆BitmapInfo.bmiHeader.biBitCount = 32;<br><br>銆銆銆銆m_lpDDS7->GetDC( &hDC );<br><br>銆銆銆銆int rc = StretchDIBits( hDC,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆0,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆0,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆lSurfWidth,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆lSurfHeight,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆0,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆0,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆lSurfWidth,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆lSurfHeight,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆PSDPixels,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆&BitmapInfo,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆DIB_RGB_COLORS,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆SRCCOPY );<br><br>銆銆銆銆m_lpDDS7->ReleaseDC( hDC );<br><br>銆銆銆銆if ( rc == GDI_ERROR ) {<br>銆銆銆銆銆銆H_ARRAY_DELETE( PSDPixels );<br><br>銆銆#ifdef _DEBUG<br>銆銆銆銆g_pHERR->OutDebugMsg( 3, H2DSERR_INVALID_PSD );<br>銆銆#endif<br>銆銆銆銆return E_FAIL;<br><br>銆銆銆銆}<br><br></span></font><span id="hvzpftn" class=ColorCatchword><font size=2>銆銆銆<font color=#c0c0c0>銆// 鏄惁璇誨彇Alpha娣峰悎閫氶亾</font><br></font></span><span id="hvzpftn" class=ColorCode><font size=2>銆銆銆銆if( ChannelCount > 3 ) {<br>銆銆銆銆銆銆m_pbAlphaMask = new BYTE[ lSurfWidth * lSurfHeight ];<br><br>銆銆銆銆for ( int x = 0; x < lSurfWidth; x++ )<br>銆銆銆銆銆銆for ( int y = 0; y < lSurfHeight; y++ ) {<br>銆銆銆銆銆銆銆銆m_pbAlphaMask[ ( y * lSurfWidth ) + x ] =<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆 銆PSDPixels[ ( ( ( y * lSurfHeight ) + x ) * 4 ) + 3 ];<br>銆銆銆銆銆銆}<br>銆銆銆銆}<br>銆銆銆銆else {<br>銆銆銆銆銆銆m_pbAlphaMask = NULL;<br>銆銆銆銆}<br><br>銆銆銆銆H_ARRAY_DELETE( PSDPixels );<br><br>銆銆銆銆return DD_OK;<br>銆銆}<br><br></font><span id="hvzpftn" class=ColorCatchword><font size=2>銆銆</font><font color=#c0c0c0 size=2>// PSD鏂囦歡瑙e寘</font><font size=2><br>銆</font></span></span></font> <div align=left><font color=#99ccff><span id="hvzpftn" class=ColorCode><font size=2>銆銆void CHades2DSurface::UnPackPSD( FILE *fp,</font></span><font size=2><span id="hvzpftn" class=ColorCatchword>銆銆銆銆銆// fp涓篜SD鏂囦歡鎸囬拡錛?/span><span id="hvzpftn" class=ColorCode><br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 DWORD dwWidth,銆銆 </span><span id="hvzpftn" class=ColorCatchword>// dwWidth銆乨wHeight涓哄楂橈紝</span><span id="hvzpftn" class=ColorCode><br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 DWORD dwHeight,<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 BYTE* pixels,</span><span id="hvzpftn" class=ColorCatchword>銆銆銆// pixels涓鴻В鍖呯洰鏍囨寚閽堬紝</span><span id="hvzpftn" class=ColorCode><br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 WORD ChannelCnt,</span><span id="hvzpftn" class=ColorCatchword>銆 // ChannelCnt涓洪氶亾鏁幫紝</span><span id="hvzpftn" class=ColorCode><br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 WORD Compression )</span></font><span id="hvzpftn" class=ColorCatchword><font size=2> // Compression浣嶅帇緙╃被鍨嬨?</font></span></font></div> <div align=left><font color=#99ccff><span id="hvzpftn" class=ColorCatchword><font size=2>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 <br></font></span><font size=2><span id="hvzpftn" class=ColorCode>銆銆{<br>銆銆銆銆int Default[4] = { 0, 0, 0, 255 };<br>銆銆銆銆int chn[4] = { 2, 1, 0, 3};<br>銆銆銆銆int PixelCount = dwWidth * dwHeight;<br><br>銆銆銆銆if ( Compression ) {<br>銆銆銆銆銆銆fseek( fp, dwHeight * ChannelCnt * 2, SEEK_CUR );<br><br>銆銆銆銆銆銆for ( int c = 0; c < 4; c++ ) {<br>銆銆銆銆銆銆銆銆int pn = 0;<br>銆銆銆銆銆銆銆銆int channel = chn[c];<br><br>銆銆銆銆銆銆銆銆if ( channel >= ChannelCnt ) {<br>銆銆銆銆銆銆銆銆銆銆for ( pn=0; pn < PixelCount ;pn++ ) {<br>銆銆銆銆銆銆銆銆銆銆銆銆pixels[ ( pn * 4 ) + channel ] = Default[ channel ];<br>銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆else</span> <span id="hvzpftn" class=ColorCatchword>// 闈炲帇緙?br></span></font><span id="hvzpftn" class=ColorCode><font size=2>銆銆銆銆銆銆銆銆{<br>銆銆銆銆銆銆銆銆銆銆int count = 0;<br>銆銆銆銆銆銆銆銆銆銆while( count < PixelCount ) {<br>銆銆銆銆銆銆銆銆銆銆銆銆int len = fgetc( fp );<br>銆銆銆銆銆銆銆銆銆銆銆銆if( len == 128 ) { }</font></span></font></div> <div align=left><font color=#99ccff><span id="hvzpftn" class=ColorCode><font size=2>銆銆銆銆銆銆銆銆銆銆銆銆else if ( len < 128 )</font></span><font size=2> </font><span id="hvzpftn" class=ColorCatchword><font size=2>// 闈濺LE</font></span></font></div> <div align=left><font color=#99ccff><span id="hvzpftn" class=ColorCode><font size=2>銆銆銆銆銆銆銆銆銆銆銆銆{<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆len++;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆count += len;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆while(len) {<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆pixels[ ( pn * 4 ) + channel ] = fgetc( fp );<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆pn++;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆len--;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆 銆銆銆銆銆銆銆銆 else if ( len > 128 )</font></span><font size=2> <span id="hvzpftn" class=ColorCatchword>// RLE鎵撳寘</span><br></font><span id="hvzpftn" class=ColorCode><font size=2>銆銆銆銆銆銆銆銆銆銆銆銆{<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆len ^= 0x0FF;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆len += 2;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆unsigned char val = fgetc( fp );<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆count += len;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆while( len ) {<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆pixels[ ( pn * 4 ) + channel ] = val;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆pn++;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆len--;<br>銆銆銆銆銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆}<br>銆銆銆銆}<br>銆銆銆銆else<br>銆銆銆銆{<br>銆銆銆銆銆銆for ( int c=0; c < 4; c++ ) {<br>銆銆銆銆銆銆銆銆int channel = chn[c];<br>銆銆銆銆銆銆銆銆if ( channel > ChannelCnt ) {<br>銆銆銆銆銆銆銆銆銆銆for( int pn = 0; pn < PixelCount; pn++ ) {<br>銆銆銆銆銆銆銆銆銆銆銆銆pixels[ ( pn * 4 ) + channel ] = Default[ channel ];<br>銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆else {<br>銆銆銆銆銆銆銆銆銆銆for( int n = 0; n < PixelCount; n++ ) {<br>銆銆銆銆銆銆銆銆銆銆銆銆pixels[ ( n * 4 ) + channel ] = fgetc( fp );<br>銆銆銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆銆銆}<br>銆銆銆銆銆銆}<br>銆銆銆銆}<br>銆銆}</font></span></font></div> </font></font><font face=瀹嬩綋></font></font> <img src ="http://m.shnenglu.com/tgh621/aggbug/70462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2008-12-26 18:15 <a href="http://m.shnenglu.com/tgh621/archive/2008/12/26/70462.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[杞琞GIF鏂囨。http://m.shnenglu.com/tgh621/archive/2008/12/26/70461.html澶ф搗澶ф搗Fri, 26 Dec 2008 10:14:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/12/26/70461.htmlhttp://m.shnenglu.com/tgh621/comments/70461.htmlhttp://m.shnenglu.com/tgh621/archive/2008/12/26/70461.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/70461.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/70461.html闃呰鍏ㄦ枃

澶ф搗 2008-12-26 18:14 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              午夜精品999| 国产三级精品三级| 亚洲欧美日韩在线综合| 在线一区二区日韩| 亚洲天堂av综合网| 亚洲欧美激情四射在线日| 亚洲性视频h| 久久久久中文| 欧美日韩成人综合在线一区二区| 欧美不卡高清| 欧美性开放视频| 国产欧美一区二区精品性| 激情久久久久久久| 亚洲狼人综合| 欧美一区二区视频在线| 男女精品视频| 这里只有精品在线播放| 久久久999| 欧美视频一区在线观看| 好看不卡的中文字幕| av成人免费在线| 欧美一级久久久久久久大片| 欧美99久久| 欧美三级电影大全| 午夜天堂精品久久久久| 久久婷婷久久一区二区三区| 欧美日韩一区二区三区高清| 国产在线拍揄自揄视频不卡99| 亚洲黄色影片| 午夜久久福利| 亚洲人成网站精品片在线观看| 夜夜嗨av色一区二区不卡| 久久久久国内| 国产伦精品一区二区三区在线观看 | 国产精品99久久99久久久二8| 欧美在线播放一区| 亚洲美女在线观看| 久久九九全国免费精品观看| 国产精品成人v| 亚洲精品美女在线观看| 狼人天天伊人久久| 欧美一区二区三区免费视频| 欧美调教vk| 日韩午夜激情av| 欧美国内亚洲| 久久久久久网站| 韩国成人福利片在线播放| 亚洲欧美中文在线视频| 亚洲精品久久久久中文字幕欢迎你| 久久国产一区二区| 国产亚洲精品一区二区| 欧美一区二区黄| 亚洲自拍偷拍网址| 国产精品久久激情| 亚洲天堂免费在线观看视频| 亚洲激情社区| 欧美高清视频一区二区三区在线观看 | 亚洲国产精品成人久久综合一区| 欧美一区二区视频在线观看| 国产精品永久在线| 香蕉成人伊视频在线观看| 在线视频中文亚洲| 欧美亚洲不卡| 欧美在线亚洲一区| 亚洲欧美在线看| 国产视频欧美| 久久综合狠狠综合久久综青草 | 亚洲欧洲精品一区二区三区波多野1战4| 欧美一级日韩一级| 一区二区三区在线观看视频| 久久久久久久久久久成人| 亚洲欧美日韩爽爽影院| 99精品福利视频| 性欧美超级视频| 国产亚洲精久久久久久| 久久天天躁夜夜躁狠狠躁2022| 久久久久国产精品www| 亚洲国产精品成人va在线观看| 免费欧美日韩国产三级电影| 欧美成人午夜| 先锋影音久久| 久久久久久黄| 夜夜嗨av一区二区三区四季av| av成人黄色| 国产亚洲毛片| 亚洲国产精品一区| 国产精品三级视频| 美女被久久久| 欧美系列精品| 老司机免费视频久久| 欧美大片在线观看| 小黄鸭精品密入口导航| 久久亚洲精品视频| 亚洲一区视频| 久久久久国内| 亚洲欧美日韩综合国产aⅴ| 欧美伊人久久大香线蕉综合69| 亚洲国产成人久久综合| 亚洲影视中文字幕| 亚洲日本成人| 欧美在现视频| 一区二区三区精品国产| 久久精品国产综合| 亚洲素人在线| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲制服av| 男女精品视频| 久久免费视频网| 国产精品久久久久久影院8一贰佰| 久久精品99| 欧美三级视频在线播放| 免费观看成人鲁鲁鲁鲁鲁视频 | 国产精品国产三级国产aⅴ浪潮 | 亚洲日本黄色| 久久久99精品免费观看不卡| 亚洲欧美国内爽妇网| 欧美成人午夜剧场免费观看| 久久精品久久99精品久久| 欧美色图天堂网| 亚洲精品乱码久久久久久按摩观| 国产一区二区三区免费观看| 99国产精品久久久久久久久久| 亚洲国产网站| 久久免费视频这里只有精品| 久久国产精品72免费观看| 国产精品免费看| 亚洲午夜精品久久| 亚洲欧美日韩天堂| 国产精品久久久| 在线综合亚洲欧美在线视频| 亚洲视频观看| 国产精品高潮久久| 国产精品99久久久久久白浆小说| 久久精品国产在热久久| 国产精品激情电影| 亚洲日本乱码在线观看| 亚洲激情视频网站| 久久亚洲精品视频| 久久综合国产精品台湾中文娱乐网 | 亚洲图片自拍偷拍| 亚洲欧美不卡| 国产精品日韩欧美综合| 亚洲午夜一二三区视频| 午夜精品久久久久影视| 国产精品福利av| 亚洲综合色丁香婷婷六月图片| 香蕉乱码成人久久天堂爱免费| 国产精品视频一区二区高潮| 亚洲欧美国产精品专区久久| 久久国产欧美精品| 一区二区三区亚洲| 美女视频黄 久久| 最新成人在线| 亚洲欧美在线视频观看| 国产偷自视频区视频一区二区| 欧美在线首页| 女生裸体视频一区二区三区| 亚洲日本理论电影| 国产精品久久久99| 久久精品亚洲一区| 亚洲日本无吗高清不卡| 亚洲欧美日韩专区| 狠狠色丁香婷婷综合影院 | 国产一区导航| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久亚洲精品伦理| 999在线观看精品免费不卡网站| 欧美午夜不卡视频| 久久精品国产精品亚洲精品| 欧美国产一区在线| 亚洲一区精品电影| 在线观看av一区| 国产精品扒开腿做爽爽爽视频| 欧美在线视频a| 亚洲精品社区| 麻豆成人精品| 午夜精品av| 亚洲精品永久免费精品| 国产精品亚洲精品| 欧美高清在线观看| 欧美一区在线视频| 一区二区三区欧美亚洲| 欧美成人日韩| 欧美在线观看你懂的| 一区二区三区久久久| 亚洲高清自拍| 国产一区二区三区在线观看免费视频 | 欧美自拍偷拍| 99精品视频免费全部在线| 国产一区二区成人久久免费影院| 欧美阿v一级看视频| 欧美一区二区三区四区视频| 亚洲精品女人| 久久久久久91香蕉国产| 亚洲一区综合| 亚洲影视在线| 日韩视频永久免费| 欧美成人在线免费视频| 久久爱www.| 午夜精品亚洲一区二区三区嫩草|