锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欑瘒鏂囩珷甯簡鎴戝ぇ蹇欙紝涓嶈繃鐜板湪榪樻槸涓嶇煡閬撴秷闄FC棰勮鐨勮儗鏅壊錛屽墠涓ょ鏂規硶濡備綍瀹炵幇錛熸垜瀵筂FC鐨勬鏋惰繕涓嶆槸寰堜簡瑙?
鏃犻棯鐑佸埛灞忔妧鏈殑瀹炵幇(鏂囩珷鏉ヨ嚜:http://www.vchelp.net)
鍦ㄥ疄鐜扮粯鍥劇殑榪囩▼涓紝鏄劇ず鐨勫浘褰㈡繪槸浼氶棯鐑侊紝絎旇呮浘緇忚榪欎釜闂鎶樼(浜嗗ソ涔咃紝閫氳繃鍚戦珮鎵嬭鏁欙紝鎼滅儲璧勬枡錛岄棶棰樹竴鍩烘湰瑙e喅錛岀幇灝嗘枃妗f暣鐞嗗嚭鏉ヤ互渚涘ぇ瀹跺弬鑰?
1. 鏄劇ず鐨勫浘褰負浠涔堜細闂儊錛?br>鎴戜滑鐨勭粯鍥捐繃紼嬪ぇ澶氭斁鍦∣nDraw鎴栬匫nPaint鍑芥暟涓紝OnDraw鍦ㄨ繘琛屽睆騫曟樉紺烘椂鏄敱OnPaint榪涜璋冪敤鐨勩傚綋紿楀彛鐢變簬浠諱綍鍘熷洜闇瑕侀噸緇樻椂錛屾繪槸鍏堢敤鑳屾櫙鑹插皢鏄劇ず鍖烘竻闄わ紝鐒跺悗鎵嶈皟鐢∣nPaint錛岃岃儗鏅壊寰寰涓庣粯鍥懼唴瀹瑰弽宸緢澶э紝榪欐牱鍦ㄧ煭鏃墮棿鍐呰儗鏅壊涓庢樉紺哄浘褰㈢殑浜ゆ浛鍑虹幇錛屼嬌寰楁樉紺虹獥鍙g湅璧鋒潵鍦ㄩ棯銆傚鏋滃皢鑳屾櫙鍒瘋緗垚NULL錛岃繖鏍鋒棤璁烘庢牱閲嶇粯鍥懼艦閮戒笉浼氶棯浜嗐傚綋鐒訛紝榪欐牱鍋氫細浣垮緱紿楀彛鐨勬樉紺轟貢鎴愪竴鍥紝鍥犱負閲嶇粯鏃舵病鏈夎儗鏅壊瀵瑰師鏉ョ粯鍒剁殑鍥懼艦榪涜娓呴櫎錛岃屽張鍙犲姞涓婁簡鏂扮殑鍥懼艦銆傛湁鐨勪漢浼氳錛岄棯鐑佹槸鍥犱負緇樺浘鐨勯熷害澶參鎴栬呮樉紺虹殑鍥懼艦澶鏉傞犳垚鐨勶紝鍏跺疄榪欐牱璇村茍涓嶅錛岀粯鍥劇殑鏄劇ず閫熷害瀵歸棯鐑佺殑褰卞搷涓嶆槸鏍規湰鎬х殑銆備緥濡傚湪OnDraw(CDC *pDC)涓繖鏍峰啓錛?br>pDC->MoveTo(0,0);
pDC->LineTo(100,100);
榪欎釜緇樺浘榪囩▼搴旇鏄潪甯哥畝鍗曘侀潪甯稿揩浜嗗惂錛屼絾鏄媺鍔ㄧ獥鍙e彉鍖栨椂榪樻槸浼氱湅瑙侀棯鐑併傚叾瀹炰粠閬撶悊涓婅錛岀敾鍥劇殑榪囩▼瓚婂鏉傝秺鎱㈤棯鐑佸簲璇ヨ秺灝戯紝鍥犱負緇樺浘鐢ㄧ殑鏃墮棿涓庣敤鑳屾櫙娓呴櫎灞忓箷鎵鑺辯殑鏃墮棿鐨勬瘮渚嬭秺澶т漢瀵歸棯鐑佺殑鎰熻浼氳秺涓嶆槑鏄俱傛瘮濡傦細娓呮灞忓箷鏃墮棿涓?s緇樺浘鏃墮棿涔熸槸涓?s錛岃繖鏍峰湪10s鍐呯殑榪炵畫閲嶇敾涓氨瑕侀棯鐑?嬈★紱濡傛灉娓呮灞忓箷鏃墮棿涓?s涓嶅彉錛岃岀粯鍥炬椂闂翠負9s錛岃繖鏍?0s鍐呯殑榪炵畫閲嶇敾鍙細闂儊涓嬈°傝繖涓篃鍙互璇曢獙錛屽湪OnDraw(CDC *pDC)涓繖鏍峰啓錛?br>for(int i=0;i<100000;i++)
{
pDC->MoveTo(0,i);
pDC->LineTo(1000,i);
}
鍛靛懙錛岀▼搴忔湁鐐瑰彉鎬侊紝浣嗘槸鑳借鏄庨棶棰樸?br> 璇村埌榪欓噷鍙兘鍙堟湁浜鴻璇翠簡錛屼負浠涔堜竴涓畝鍗曞浘褰㈢湅璧鋒潵娌℃湁澶嶆潅鍥懼艦閭d箞闂憿錛熻繖鏄洜涓哄鏉傚浘褰㈠崰鐨勯潰縐ぇ錛岄噸鐢繪椂閫犳垚鐨勫弽宸瘮杈冨ぇ錛屾墍浠ユ劅瑙変笂瑕侀棯寰楀帀瀹充竴浜涳紝浣嗘槸闂儊棰戠巼瑕佷綆銆傞偅涓轟粈涔堝姩鐢葷殑閲嶇敾棰戠巼楂橈紝鑰岀湅璧鋒潵鍗翠笉闂紵榪欓噷錛屾垜灝辮鍐嶆寮鴻皟浜嗭紝闂儊鏄粈涔堬紵闂儊灝辨槸鍙嶅樊錛屽弽宸秺澶э紝闂儊瓚婂帀瀹熾傚洜涓哄姩鐢葷殑榪炵畫涓や釜甯т箣闂寸殑宸紓寰堝皬鎵浠ョ湅璧鋒潵涓嶉棯銆傚鏋滀笉淇★紝鍙互鍦ㄥ姩鐢葷殑姣忎竴甯т腑闂村姞涓寮犵函鐧界殑甯э紝涓嶉棯鎵嶆憿銆?br>2銆佸浣曢伩鍏嶉棯鐑?br> 鍦ㄧ煡閬撳浘褰㈡樉紺洪棯鐑佺殑鍘熷洜涔嬪悗錛屽鐥囦笅鑽氨濂藉姙浜嗐傞鍏堝綋鐒舵槸鍘繪帀MFC鎻愪緵鐨勮儗鏅粯鍒惰繃紼嬩簡銆傚疄鐜扮殑鏂規硶寰堝錛?br>* 鍙互鍦ㄧ獥鍙e艦鎴愭椂緇欑獥鍙g殑娉ㄥ唽綾葷殑鑳屾櫙鍒蜂粯NULL
* 涔熷彲浠ュ湪褰㈡垚浠ュ悗淇敼鑳屾櫙
static CBrush brush(RGB(255,0,0));
SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)brush);
* 瑕佺畝鍗曚篃鍙互閲嶈澆OnEraseBkgnd(CDC* pDC)鐩存帴榪斿洖TRUE
榪欐牱鑳屾櫙娌℃湁浜嗭紝緇撴灉鍥懼艦鏄劇ず鐨勭‘涓嶉棯浜嗭紝浣嗘槸鏄劇ず涔熻薄鍓嶉潰鎵璇寸殑涓鏍鳳紝鍙樺緱涓鍥貢銆傛庝箞鍔烇紵榪欏氨瑕佺敤鍒板弻緙撳瓨鐨勬柟娉曚簡銆傚弻緙撳啿灝辨槸闄や簡鍦ㄥ睆騫曚笂鏈夊浘褰㈣繘琛屾樉紺轟互澶栵紝鍦ㄥ唴瀛樹腑涔熸湁鍥懼艦鍦ㄧ粯鍒躲傛垜浠彲浠ユ妸瑕佹樉紺虹殑鍥懼艦鍏堝湪鍐呭瓨涓粯鍒跺ソ錛岀劧鍚庡啀涓嬈℃х殑灝嗗唴瀛樹腑鐨勫浘褰㈡寜鐓т竴涓偣涓涓偣鍦拌鐩栧埌灞忓箷涓婂幓錛堣繖涓繃紼嬮潪甯稿揩錛屽洜涓烘槸闈炲父瑙勬暣鐨勫唴瀛樻嫹璐濓級銆傝繖鏍峰湪鍐呭瓨涓粯鍥炬椂錛岄殢渚跨敤浠涔堝弽宸ぇ鐨勮儗鏅壊榪涜娓呴櫎閮戒笉浼氶棯錛屽洜涓虹湅涓嶈銆傚綋璐村埌灞忓箷涓婃椂錛屽洜涓哄唴瀛樹腑鏈緇堢殑鍥懼艦涓庡睆騫曟樉紺哄浘褰㈠樊鍒緢灝忥紙濡傛灉娌℃湁榪愬姩錛屽綋鐒跺氨娌℃湁宸埆錛夛紝榪欐牱鐪嬭搗鏉ュ氨涓嶄細闂?br>3銆佸浣曞疄鐜板弻緙撳啿
棣栧厛緇欏嚭瀹炵幇鐨勭▼搴忥紝鐒跺悗鍐嶈В閲婏紝鍚屾牱鏄湪OnDraw(CDC *pDC)涓細
CDC MemDC; //棣栧厛瀹氫箟涓涓樉紺鴻澶囧璞?br>CBitmap MemBitmap;//瀹氫箟涓涓綅鍥懼璞?br>//闅忓悗寤虹珛涓庡睆騫曟樉紺哄吋瀹圭殑鍐呭瓨鏄劇ず璁懼
MemDC.CreateCompatibleDC(NULL);
//榪欐椂榪樹笉鑳界粯鍥撅紝鍥犱負娌℃湁鍦版柟鐢?^_^
//涓嬮潰寤虹珛涓涓笌灞忓箷鏄劇ず鍏煎鐨勪綅鍥撅紝鑷充簬浣嶅浘鐨勫ぇ灝忓槢錛屽彲浠ョ敤紿楀彛鐨勫ぇ灝?br>MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//灝嗕綅鍥鵑夊叆鍒板唴瀛樻樉紺鴻澶囦腑
//鍙湁閫夊叆浜嗕綅鍥劇殑鍐呭瓨鏄劇ず璁懼鎵嶆湁鍦版柟緇樺浘錛岀敾鍒版寚瀹氱殑浣嶅浘涓?br>CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//鍏堢敤鑳屾櫙鑹插皢浣嶅浘娓呴櫎騫插噣錛岃繖閲屾垜鐢ㄧ殑鏄櫧鑹蹭綔涓鴻儗鏅?br>//浣犱篃鍙互鐢ㄨ嚜宸卞簲璇ョ敤鐨勯鑹?br>MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//緇樺浘
MemDC.MoveTo(鈥︹?;
MemDC.LineTo(鈥︹?;
//灝嗗唴瀛樹腑鐨勫浘鎷瘋礉鍒板睆騫曚笂榪涜鏄劇ず
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//緇樺浘瀹屾垚鍚庣殑娓呯悊
MemBitmap.DeleteObject();
MemDC.DeleteDC();
涓婇潰鐨勬敞閲婂簲璇ュ緢璇﹀敖浜嗭紝搴熻瘽灝變笉澶氳浜嗐?br>4銆佸浣曟彁楂樼粯鍥劇殑鏁堢巼
瀹為檯涓婏紝鍦∣nDraw(CDC *pDC)涓粯鍒剁殑鍥懼茍涓嶆槸鎵鏈夐兘鏄劇ず浜嗙殑錛屼緥濡傦細浣犲湪OnDraw涓敾浜嗕袱涓煩褰紝鍦ㄤ竴嬈¢噸緇樹腑铏界劧涓や釜鐭╁艦鐨勭粯鍒跺嚱鏁伴兘鏈夋墽琛岋紝浣嗘槸寰堟湁鍙兘鍙湁涓涓樉紺轟簡錛岃繖鏄洜涓篗FC鏈韓涓轟簡鎻愰珮閲嶇粯鐨勬晥鐜囪緗簡瑁佸壀鍖恒傝鍓尯鐨勪綔鐢ㄥ氨鏄細鍙湁鍦ㄨ繖涓尯鍐呯殑緇樺浘榪囩▼鎵嶄細鐪熸鏈夋晥錛屽湪鍖哄鐨勬槸鏃犳晥鐨勶紝鍗充嬌鍦ㄥ尯澶栨墽琛屼簡緇樺浘鍑芥暟涔熸槸涓嶄細鏄劇ず鐨勩傚洜涓哄鏁版儏鍐典笅紿楀彛閲嶇粯鐨勪駭鐢熷ぇ澶氭槸鍥犱負紿楀彛閮ㄥ垎琚伄鎸℃垨鑰呯獥鍙f湁婊氬姩鍙戠敓錛屾敼鍙樼殑鍖哄煙騫朵笉鏄暣涓浘褰㈣屽彧鏈変竴灝忛儴鍒嗭紝榪欎竴閮ㄥ垎闇瑕佹敼鍙樼殑灝辨槸pDC涓殑瑁佸壀鍖轟簡銆傚洜涓烘樉紺猴紙寰鍐呭瓨鎴栬呮樉瀛橀兘鍙樉紺猴級姣旂粯鍥捐繃紼嬬殑璁$畻瑕佽垂鏃跺緱澶氾紝鏈変簡瑁佸壀鍖哄悗鏄劇ず鐨勫氨鍙槸搴旇鏄劇ず鐨勯儴鍒嗭紝澶уぇ鎻愰珮浜嗘樉紺烘晥鐜囥備絾鏄繖涓鍓尯鏄疢FC璁劇疆鐨勶紝瀹冨凡緇忎負鎴戜滑鎻愰珮浜嗘樉紺烘晥鐜囷紝鍦ㄨ繘琛屽鏉傚浘褰㈢殑緇樺埗鏃跺浣曡繘涓姝ユ彁楂樻晥鐜囧憿錛熼偅灝卞彧鏈夊幓鎺夊湪瑁佸壀鍖哄鐨勭粯鍥捐繃紼嬩簡銆傚彲浠ュ厛鐢╬DC->GetClipBox()寰楀埌瑁佸壀鍖猴紝鐒跺悗鍦ㄧ粯鍥炬椂鍒ゆ柇浣犵殑鍥懼艦鏄惁鍦ㄨ繖涓尯鍐咃紝濡傛灉鍦ㄥ氨鐢伙紝涓嶅湪灝變笉鐢匯?br>濡傛灉浣犵殑緇樺浘榪囩▼涓嶅鏉傦紝榪欐牱鍋氬彲鑳藉浣犵殑緇樺浘鏁堢巼涓嶄細鏈夋彁楂樸?/p>
鎴戠殑涓存椂鏂囨。錛岀湅璧鋒潵濂戒貢錛岀▼搴忛噷鐨勬爣璇嗙涔熸病瀹屽叏鎸夋枃妗i噷鐨勬潵錛岀湡鏄貢濂椾簡錛屾槑澶╁ソ濂戒慨鏀逛慨鏀廣?/p>
鏀懼叆MyDefine.h,MyDefine.cpp鏂囦歡
1錛?娌崇殑杈圭嚎
Doc閲屾斁鍏ワ細
//num of ctrl pnt,nodal pnt,display style,
//wave speed wave distance and wave num
int ctrlNum,ndlNum,style,wSpeed,wDistance,wNum;
//the pnt array represent ctrl pnts and nodal pnts.
CArray <CPoint,CPoint&> c_PntsL,c_PntR,n_PntsL,n_PntsR;
瑙嗗浘綾誨拰鏂囨。綾婚兘瑕佸紩鐢?/b>MyDefine.h錛岀敤錛?/b>ifndef鍚?/b>
浠ヤ笅鍐呭鏀懼湪瑙嗗浘綾婚噷鐨凮nCreate鍑芥暟涓紝鍏堜負CView鐨勬淳鐢熺被澹版槑涓涓浘鍏冩枃浠剁殑鏁版嵁鎴愬憳HMETAFILE m_hMetaFile;
CArray <CPoint,CPoint&> initL,initR;
//棰勫厛杈撳叆鐨勬帶鍒剁偣錛岃嚜瀹氫箟
Int const Max=60;
//CArray <CPointPartner,CPointPartner&> init_CPntPtr,final_CPntPtr;
//CPointPartner浣滀負TYPE鏈夐棶棰橈紝榪樻槸鐢ㄦ暟緇?
//鏀逛負:
CPointPartner init_CPntPtr[Max],final_CPntPtr[Max];
//鏈鍚庣殑鐐瑰鏁扮粍final_CPntPtr緇機Curve綾葷敤
While(i<Num)
{
CPointPartner temp_CPntPtr (initL[i],initR[i]);
init_CPntPtr.Add(temp_CPntPtr);
i++;
}
//榧犳爣鐐瑰嚮鎴栭鍏堟寚瀹氭帶鍒剁偣錛屽嵆涓浜涚偣瀵?
//浠ュ強澶勭悊鍚庡緱鍒扮殑鐐瑰
CSpline spL (initL);
CSpline spR (initR);
//涓よ竟鐨勬牱鏉℃洸綰?
CArray<CPoint,CPoint&> finalL,finalR;
//澶勭悊鍚庡緱鍒扮殑鏍鋒潯鏇茬嚎涓婄殑鐐?
spL.GetPoints(finalL);
spR.GetPoints(finalR);
Count=finalL.GetSize();
For(int i=0;i<count;i++)
{
CPointPartner Temp_finalP (finalL[i],finalR[i])
Final_CPntPtr[i]=temp_finalP;//閲嶈澆錛濊繍綆楃
}
//灝嗘牱鏉″璞pL錛宻pR閲岀殑鐐規斁鍏inalL鍜宖inalR,涔嬪悗鍙堟斁鍏ョ偣瀵規暟緇刦inal_CPntPtr;
//鍏眂ount涓偣瀵?
CMetaFileDC metaFileDC;
metaFileDC.Create();
榪欓噷鐢誨嚭杈圭嚎錛堥氳繃finalL鍜宖inalR錛?/b>
m_hMetaFile=metaFileDC.Close();
5錛?3鏅?9錛?0浠ヤ笂紼嬪簭鐨勮皟璇曞凡瀹屾垚錛堟湭鍔犻紶鏍囨帶鍒訛級
2錛?涓閬撻亾娉㈢汗錛?/b>CCurve綾伙級
鍦ㄨ鍥劇被涓0鏄庢暟鎹細CArray<Points,Points&> mPntsCurve;
鍦∣nDraw閲?
鍏堢‘瀹氭按娉綅緗細
WavePL[i]鍜學avePR[i]
For錛坕nt i=0,i<WaveN;i++錛?
{
CCurve tempCurve (final_CPntPtr[i]);
tempCurve.ComputePnts(mPntsCurve);
榪炶繖浜涚偣鎴愮嚎
}
璇︾粏璁捐錛?
Doc閲屽畾涔変袱涓偣錛?
View閲屽畾涔変竴涓嚱鏁癇OOL ComputePnts(CArray<CPoint,CPoint&>& m_Pnts,CPoint m_LPnt,CPoint m_RPnt)
OnDraw閲岀粰涓や釜鐐硅祴鍊鹼紝璋冪敤ComputePnts錛屽啀緇樺浘
涓?/b>MFC鐨勮仈緋?/b>
//鐢ㄥ浘鍏冩枃浠朵繚瀛樿竟綰匡紝涓棿鐨刢urve鍗蟲椂鐢誨嚭鏉?/b>
//瑕佹弿緇樼殑鐐癸紝姣忎袱鐐圭敾鏉$嚎榪炴帴LineTO
鎴栬呭皢鐐歸泦鐨勮綆楅兘鏀懼湪鏂囨。綾諱腑錛岀粰鏂囨。綾繪柊寤轟袱涓嚱鏁?/b>
鏁版嵁鐨勬斁緗綅緗繕寰楃悽紓ㄧ悽紓?/b>
5錛?1 鏅?2錛?0姝ゆ枃妗e畬鎴?/b>
Spline鐨勮綆楀湪CDoc閲岋紝Curve鐨勮綆楀湪CView閲?/b>
5. 29 鏅?錛?7 娣誨姞錛堟槑澶╁啀淇敼錛?/b>
5.30
Q: Spline閲岀殑temp鍊間嬌寰楁暟緇勮秺鐣岄棶棰?/b>
A: 綺懼害閫犳垚鐨勶紝涓や釜float鍨嬪彉閲弔鍜孴1[j1+1]閮戒負0.90000,浣唗>T1[j1+1]涓簍rue,
Tips錛?/b>
1錛?鏌ユ壘綾誨瀷寮哄埗杞崲浠ュ強綺懼害涓㈠け鐨勭煡璇?/b>
2錛?鐪嬫灄閿愮殑銆婇珮璐ㄩ噺C++緙栫▼銆嬶紝娉ㄦ剰榪欎簺緇嗚妭銆?/b>
5.31
宸插畬鎴愶細浣嶅浘浣滀負鑳屾櫙銆?/b>
Q:榧犳爣鎺у埗鐨勯棶棰?/b>
2銆丄PI,鍏ㄧОapplication program interface,鎰忔濇槸搴旂敤紼嬪簭緙栫▼鎺ュ彛(璇磋搗API騫朵笉浠呬粎鎸噖indows鑰岃█錛?windows鏀寔鐨凙PI鍙玾inapi)銆倃inapi灝辨槸搴旂敤紼嬪簭鍜寃indows涔嬮棿閫氳鐨勪竴涓紪紼嬬晫闈€倃indows鎻愪緵浜嗕笂鍗冧釜API鍑芥暟錛屼互鏂逛究紼嬪簭鍛樻潵緙栧啓搴旂敤紼嬪簭銆?/p>
3銆乄inSDK紼嬪簭璁捐灝辨槸API鏂瑰紡鐨剋indows紼嬪簭璁捐銆係DK,鍏ㄧОSoftware Developers Kit,鎰忔濇槸杞歡寮鍙戝伐鍏風銆?/p>
4銆丮FC,鍏ㄧОMicrosoft Foundation Classes,浼蔣鎶奧inAPI榪涜灝佽鐨勭被搴撱傚畠鏄竴涓被鐨勯泦鍚堬紝閫氳繃瑕嗙洊WinAPI錛屼負緙栫▼鎻愪緵浜嗕竴涓潰鍚戝璞$殑鐣岄潰銆傚畠浣縲indows紼嬪簭鍛樿兘澶熷埄鐢–++闈㈣薄瀵硅薄鐨勭壒鎬ц繘琛岀紪紼嬶紝綾諱技BCB鐨凮WL錛孌elphi鐨刅CL緇勪歡銆傚畠鎶婇偅浜涜繘琛孲DK緙栫▼鏃舵渶綣佺悙鐨勯儴鍒嗘彁渚涚粰紼嬪簭鍛橈紝浣夸箣涓撴敞浜庡姛鑳界殑瀹炵幇銆備綘涓嶅Θ鎶婂畠鎯寵薄鎴愮被浼糡C鎻愪緵鐨勫嚱鏁板簱鍚с?/p>
5銆乨os涓嬬殑C緙栫▼鐨刴ain()涓鏍鳳紝windows涓嬬殑鍏ュ彛鏄疻inMain()鍑芥暟銆?/p>
6銆乄inMain()鎵璧風殑浣滅敤錛氬垵濮嬪寲錛屽睍紺猴紝閿姣佸簲鐢ㄧ▼搴忕瓑銆?br>絎竴涓弬鏁幫細搴旂敤紼嬪簭鐨勫綋鍓嶅疄渚嬪彞鏌勩?br>絎簩涓弬鏁幫細搴旂敤紼嬪簭鐨勫墠涓涓疄渚嬪彞鏌勶紝鍒瀹冿紝瀵逛簬Win32浣嶈岃█錛屽畠涓鑸槸NULL.
絎笁涓弬鏁幫細鎸囧悜浠諱綍浼犵粰紼嬪簭鐨勫懡浠よ鍙傛暟銆侾STR浠h〃"鎸囧悜瀛楃涓茬殑鎸囬拡"銆?br>絎洓涓弬鏁幫細瀹冨憡璇夊簲鐢ㄧ▼搴忓浣曞垵濮嬪寲紿楀彛錛屽鏈澶у寲錛屾渶灝忓寲絳夌姸鎬併?/p>
7銆佸彞鏌?handle)錛?br>鍦ㄦ爣鍑咰搴撲腑鍙ユ焺鐢ㄦ潵瀵規枃浠惰緭鍏ヨ緭鍑恒?br>鍦╓indows鐜涓紝鍙ユ焺鏄敤鏉ユ爣璇嗛」鐩殑錛岃繖浜涢」鐩寘鎷細
*.妯″潡(module)
*.浠誨姟(task)
*.瀹炰緥(instance)
*.鏂囦歡(file)
*.鍐呭瓨鍧?block of memory)
*.鑿滃崟(menu)
*.鎺у埗(control)
*.瀛椾綋(font)
*.璧勬簮(resource),鍖呮嫭鍥炬爣(icon)錛屽厜鏍?cursor)錛屽瓧絎︿覆(string)絳?br>*.GDI瀵硅薄(GDI object),鍖呮嫭浣嶅浘(bitmap),鐢誨埛(brush),鍏冩枃浠?metafile),璋冭壊鏉?palette),鐢?絎?pen),鍖哄煙(region),浠ュ強璁懼鎻忚堪琛?device context)銆?br>WINDOWS紼嬪簭涓茍涓嶆槸鐢ㄧ墿鐞嗗湴鍧鏉ユ爣璇嗕竴涓唴瀛樺潡錛屾枃浠訛紝浠誨姟鎴栧姩鎬佽鍏ユā鍧楃殑錛岀浉鍙嶇殑錛學INDOWS API緇欒繖浜涢」鐩垎閰嶇‘瀹氱殑鍙ユ焺錛屽茍灝嗗彞鏌勮繑鍥炵粰搴旂敤紼嬪簭錛岀劧鍚庨氳繃鍙ユ焺鏉ヨ繘琛屾搷浣溿?/p>
紿楀彛鍙ユ焺錛?br>緋葷粺閫氳繃紿楀彛鍙ユ焺鏉ュ湪鏁翠釜緋葷粺涓敮涓鏍囪瘑涓涓獥鍙o紝鍙戦佷竴涓秷鎭椂蹇呴』鎸囧畾涓涓獥鍙e彞鏌勮〃鏄庤娑堟伅鐢遍偅涓獥鍙f帴鏀躲傝屾瘡涓獥鍙i兘浼氭湁鑷繁鐨勭獥鍙h繃紼嬶紝鎵浠ョ敤鎴風殑杈撳叆灝變細琚紜殑澶勭悊銆?/p>
8銆佹墍鏈夌殑鍛藉悕閲囩敤浜嗗寛鐗欏埄琛ㄧず娉曘傚娑堟伅鐨勫墠緙浣跨敤msg.鍙ユ焺浣跨敤h.鍑芥暟浣跨敤fn絳夈?/p>
9銆丮ainFrm.cpp銆丮ainFrm.h錛?br>榪欎袱涓枃浠跺皢浠嶤FrameWnd(SDI搴旂敤紼嬪簭)鎴朇MDIFrameWnd(MDI搴旂敤紼嬪簭)媧劇敓CMainFrame綾匯傚鏋滃湪AppWizard鐨凙pplication Options欏碉紙6姝ヤ腑鐨勭4姝ワ級涓夋嫨浜嗗搴旂殑鍙夐」鐨勮瘽錛孋MainFrame綾誨皢澶勭悊宸ュ叿鏉℃寜閽拰鐘舵佹潯鐨勫垱寤恒侻AINFRM.CPP鏂囦歡榪樺惈鏈塎FC搴旂敤紼嬪簭鎻愪緵鐨勯粯璁ゅ伐鍏鋒潯鎸夐挳鐨勫璞D鈥斺斿彨鍋歜uttons鏁扮粍銆?/p>
10銆丏OS紼嬪簭涓昏浣跨敤欏哄簭鐨勶紝榪囩▼椹卞姩鐨勭▼搴忚璁℃柟娉曘傞『搴忕殑錛岃繃紼嬮┍鍔ㄧ殑紼嬪簭鏈変竴涓槑鏄劇殑寮濮嬶紝鏄庢樉鐨勮繃紼嬪強涓涓槑鏄劇殑緇撴潫錛屽洜姝ょ▼搴忚兘鐩存帴鎺у埗紼嬪簭浜嬩歡鎴栬繃紼嬬殑欏哄簭銆傝櫧鐒跺湪欏哄簭鐨勮繃紼嬮┍鍔ㄧ殑紼嬪簭涓篃鏈夊緢澶氬鐞嗗紓甯哥殑鏂規硶錛屼絾榪欐牱鐨勫紓甯稿鐞嗕篃浠嶇劧鏄『搴忕殑錛岃繃紼嬮┍鍔ㄧ殑緇撴瀯銆?/p>
11銆乄indows鐨勯┍鍔ㄦ柟寮忔槸浜嬩歡椹卞姩錛屽氨鏄笉鐢變簨浠剁殑欏哄簭鏉ユ帶鍒訛紝鑰屾槸鐢變簨浠剁殑鍙戠敓鏉ユ帶鍒訛紝鎵鏈夌殑浜嬩歡鏄棤搴忕殑銆傚仛涓轟竴涓▼搴忓憳錛屽湪浣犵紪鍐欑▼搴忔椂錛屼綘騫朵笉鐭ラ亾鐢ㄦ埛鍏堟寜鍝釜鎸夌航錛屼篃涓嶇煡閬撶▼搴忓厛瑙﹀彂鍝釜娑堟伅銆備綘鐨勪換鍔″氨鏄姝e湪寮鍙戠殑搴旂敤紼嬪簭瑕佸彂鍑烘垨瑕佹帴鏀剁殑娑堟伅榪涜鎺掑簭鍜岀鐞嗐備簨浠墮┍鍔ㄧ▼搴忚璁℃槸瀵嗗垏鍥寸粫娑堟伅鐨勪駭鐢熶笌澶勭悊鑰屽睍寮鐨勶紝涓鏉℃秷鎭槸鍏充簬鍙戠敓鐨勪簨浠剁殑娑堟伅銆?/p>
12銆乄indows紼嬪簭鍒欒嚦灝戜袱涓富紼嬪簭錛?br>涓涓槸WinMain(),
int WINAPI WinMain(
銆銆銆銆銆銆銆銆銆銆HINSTANCE hInstance, 銆銆 // handle to current instance
銆銆銆銆銆銆銆銆銆銆HINSTANCE hPrevInstance, 銆// handle to previous instance
銆銆銆銆銆銆銆銆銆銆LPSTR lpCmdLine, 銆銆銆銆 // command line
銆銆銆銆銆銆銆銆銆銆int nCmdShow 銆銆銆銆 // show state
銆銆銆銆銆銆銆銆銆);
鍙︿竴涓槸紿楀彛榪囩▼鍑芥暟WndProc,瀹冪殑鍑芥暟鍘熷瀷涓?
long FAR PASCAL WndProc(HWND hWnd,WORD message,WORD wParam,LONG lParam);
13銆佺獥鍙e嚱鏁頒笌鍥炶皟鍑芥暟:
鍦╓indows涓紝搴旂敤紼嬪簭閫氳繃瑕佹眰Windows瀹屾垚鎸囧畾鎿嶄綔錛岃屾壙鎷呰繖欏歸氫俊浠誨姟鐨凙PI鍑芥暟灝辨槸Windows鐨勭浉搴旂獥鍙e嚱鏁癢ndProc銆傚簲鐢ㄧ▼搴忎笉鐩存帴璋冪敤浠諱綍紿楀彛鍑芥暟錛岃屾槸絳夊緟Windows璋冪敤紿楀彛鍑芥暟錛岃姹傚畬鎴愪換鍔℃垨榪斿洖淇℃伅銆備負淇濊瘉Windows璋冪敤榪欎釜紿楀彛鍑芥暟錛岃繖涓嚱鏁板繀欏誨厛鍚慦indows鐧昏錛岀劧鍚庡湪Windows瀹炴柦鐩稿簲鎿嶄綔鏃跺洖璋冿紝鎵浠ョ獥鍙e嚱鏁板張縐頒負鍥炶皟鍑芥暟銆俉ndProc鏄竴涓富鍥炶皟鍑芥暟錛學indows鑷沖皯鏈変竴涓洖璋冨嚱鏁般傚吀鍨嬬殑鍥炶皟鍑芥暟鏈夌獥鍙h繃紼嬨佸璇濇榪囩▼鍜岄挬瀛愬嚱鏁般傚疄闄呬笂錛屼篃璁告湁涓嶆涓涓殑紿楀彛榪囩▼銆備緥濡傦紝姣忎竴涓笉鍚岀殑紿楀彛綾婚兘鏈変竴涓笌涔嬬浉瀵瑰簲鐨勭獥鍙h繃紼嬨?/p>
15銆佸疄渚?鍦╓indows涓紝鑳藉嬈″悓鏃惰繍琛屽悓涓涓簲鐢ㄧ▼搴忥紝鍗寵繍琛屽涓壇鏈紝姣忎釜鍓湰鍙仛涓涓?#8220;瀹炰緥”銆?/p>
16銆丆 runtime鍑芥暟搴擄細
灝辮窡瀹冪殑鍚嶅瓧涓鏍?榪愯綾誨瀷淇℃伅
涓昏鏈塁Oject綾誨拰CRuntimeClass綾繪潵瀹炵幇,鐢ㄦ潵瀛樿串COject綾誨拰媧劇敓綾葷殑榪愯綾誨瀷淇℃伅,
1.綾葷殑鍩烘湰鎯呭喌:濡傜被鐨勫悕瀛?瀛樿串絀洪棿澶у皬,鐢ㄤ簬榪愯綾葷殑綾誨瀷紜畾.
2.ms鍦–++鐨勬爣鍑嗕笂,娣誨姞鍔ㄦ佸垱寤虹殑綾誨璞″姛鑳?涔熷氨鏄椂鏃舵彁鍒扮殑鍔ㄦ佸垱寤?br>3.涓茶鍖栧鐞?
The OS does not know main(), so C-runtime is first called and transfer control to main
it also provide library for common usage, such as math functions
17銆乄inMain()鍑芥暟鐨勮皟鐢ㄧ害瀹氭槸PASCAL銆?/p>
鍦ㄨ繖閲孭ASCAL鏄竴涓皟鐢ㄧ害瀹氾紝鐢變簬榪欑鏂瑰紡鏈鏃╃敱PASCAL閲囩敤錛屾墍浠ヨ繖涔堝彨銆?br>鍦∕SDN涓殑C++ Language Reference涓紝Calling Conventions榪欎竴绔犻兘鏄璋冪敤綰﹀畾鐨勩?/p>
綰﹀畾錛氬井杞噸瀹氫箟浜嗚澶氱害瀹氱被鍨嬶紝涓虹殑鏄彲浠ヨ浠g爜鏇村鏄撹法騫沖彴鎴栬呰法緙栬瘧鍣ㄣ?br>鍏跺疄錛岃皟鐢ㄧ害瀹氳瑙e喅涓や釜闂錛岄兘鏄拡瀵瑰爢鏍堟搷浣滐細
1銆傚弬鏁頒紶閫掔殑欏哄簭錛堟湰璐ㄦ槸鍘嬫爤鐨勯『搴忥級
2銆傝皝璐熻矗騫蟲爤錛堣皟鐢ㄨ呰繕鏄皟鐢ㄥ璞★級
涓涓嚱鏁扮殑澹版槑銆佸畾涔夊拰瀹炵幇涓殑璋冪敤鏂瑰紡涓鑸兘涓鑷淬?/p>
WINAPI鏍囪瘑絎︾殑瀹氫箟鏄細#define WINAPI __stdcall, __stdcall鎸嘩indow璋冪敤鍑芥暟鐨勪竴縐嶆柟寮忥紝涔熷氨鏄浣曞湪鍫嗕腑瀛樺彇鍑芥暟鍙傛暟鐨勬柟寮忋傝澶歐indows Api鍑芥暟璋冪敤澹版槑涓篲_stdcall鏂瑰紡銆?/p>
18銆佺敤浣嶇殑“鎴?#8221;鎿嶄綔錛堟搷浣滅“|”錛夋妸鑻ュ共涓父鏁扮粍鍚堣搗鏉ユ帶鍒舵秷鎭獥鍙f樉紺虹殑鎸夐挳鍜屽浘鏍囩瓑銆?/p>
19銆佸湪Windows搴旂敤紼嬪簭涓紝姣忎竴涓獥鍙i兘蹇呴』浠庡睘浜庝竴涓獥鍙g被錛岀獥鍙g被瀹氫箟浜嗙獥鍙f墍鍏鋒湁鐨勫睘鎬э紝濡傚畠鐨勬牱寮忋佸浘鏍囥侀紶鏍囨寚閽堛佽彍鍗曞悕縐板強紿楀彛榪囩▼鍚嶇瓑銆?br>紿楀彛縐嶇被鏄畾涔夌獥鍙e睘鎬х殑妯℃澘,榪欎簺灞炴у寘鎷獥鍙e紡鏍?榧犳爣褰㈢姸,鑿滃崟絳夌瓑,紿楀彛縐嶇被涔熸寚瀹氬鐞嗚綾諱腑鎵鏈夌獥鍙f秷鎭殑紿楀彛鍑芥暟.鍙湁鍏堝緩绔嬬獥鍙g綾?鎵嶈兘鏍規嵁紿楀彛縐嶇被鏉ュ垱寤篧indows搴旂敤紼嬪簭鐨勪竴涓垨澶氫釜紿楀彛.鍒涘緩紿楀彛鏃?榪樺彲浠ユ寚瀹氱獥鍙g嫭鏈夌殑闄勫姞鐗規?紿楀彛縐嶇被綆縐扮獥鍙g被,紿楀彛綾諱笉鑳介噸鍚?鍦ㄥ緩绔嬬獥鍙g被鍚?蹇呴』鍚慦indows鐧昏.寤虹珛紿楀彛綾誨氨鏄敤WNDCLASS緇撴瀯瀹氫箟涓涓粨鏋勫彉閲?
20銆乂isual C++鎻愪緵Alt+F8鍔熻兘閿紝榪涜鏂囦歡瑙勬牸鍖栵紝鏍規嵁鍛ㄥ洿鐨勪唬鐮佽錛屾紜緝榪涢夊畾鐨勪唬鐮佽銆傚父浣跨敤璇ユ寜閿彲浣垮緱鏂囦歡淇濇寔瑙勬牸鍖?娉紝Alt+F8鍔熻兘閿榪炵畫涓や釜CASE璇彞鍒欎細鍙戠敓澶勭悊閿欒錛屼笉鑳借鏍煎寲)銆?
21銆佹秷鎭細
涓涓秷鎭敱涓涓秷鎭悕縐?UINT)錛屽拰涓や釜鍙傛暟(WPARAM錛孡PARAM)銆傚綋鐢ㄦ埛榪涜浜嗚緭鍏ユ垨鏄獥鍙g殑鐘舵佸彂鐢熸敼鍙樻椂緋葷粺閮戒細鍙戦佹秷鎭埌鏌愪竴涓獥鍙c?/p>
22銆佷竴涓吀鍨嬬殑搴旂敤紼嬪簭搴旇媧誨姩鍦ㄧО涓?#8220;妗嗘灦紿楀彛”涓備竴涓鏋剁獥鍙f槸涓涓叏鍔熻兘鐨勪富紿楀彛錛岀敤鎴峰彲浠ユ敼鍙樺昂瀵搞佹渶灝忓寲銆佹渶澶у寲絳夈?/p>
23銆佹秷鎭満鍒訛細
緋葷粺灝嗕細緇存姢涓涓垨澶氫釜娑堟伅闃熷垪錛屾墍鏈変駭鐢熺殑娑堟伅閮藉洖琚斁鍏ユ垨鏄彃鍏ラ槦鍒椾腑銆傜郴緇熶細鍦ㄩ槦鍒椾腑鍙栧嚭姣忎竴鏉℃秷鎭紝鏍規嵁娑堟伅鐨勬帴鏀跺彞鏌勮屽皢璇ユ秷鎭彂閫佺粰鎷ユ湁璇ョ獥鍙g殑紼嬪簭鐨勬秷鎭驚鐜傛瘡涓涓繍琛岀殑紼嬪簭閮芥湁鑷繁鐨勬秷鎭驚鐜紝鍦ㄥ驚鐜腑寰楀埌灞炰簬鑷繁鐨勬秷鎭茍鏍規嵁鎺ユ敹紿楀彛鐨勫彞鏌勮皟鐢ㄧ浉搴旂殑紿楀彛榪囩▼銆傝屽湪娌℃湁娑堟伅鏃舵秷鎭驚鐜氨灝嗘帶鍒舵潈浜ょ粰緋葷粺鎵浠indows鍙互鍚屾椂榪涜澶氫釜浠誨姟銆?/p>
24銆侀緙栬瘧澶存枃浠?
VC++紼嬪簭涓鑸寘鍚殑澶存枃浠墮兘姣旇緝澶嶆潅錛屽鏋滄瘡嬈¢兘閫愯鍒嗘瀽鍙兘浼氳姳寰堝鏃墮棿錛屾墍浠C++榛樿璁劇疆鏄涓嬈$紪璇戞椂鍒嗘瀽鎵鏈夊ご鏂囦歡錛岀敓鎴?pch鏂囦歡錛岃繖涓枃浠跺緢澶э紝浣嗕互鍚庢瘡嬈$紪璇戞椂灝卞彲浠ヨ妭鐪佸緢澶氭椂闂淬傚鏋滃垹闄や簡榪欎釜鏂囦歡錛屼笅嬈$紪璇戞椂VC++浼氳嚜鍔ㄧ敓鎴愬畠銆?
StdAfx.h鏄瘡涓狹FC紼嬪簭鐨勭被涓繀欏誨寘鎷殑鏂囦歡錛屽畠涓鑸敱AppWizard鑷姩鐢熸垚錛屽寘鎷紪璇慚FC綾繪墍蹇呴』鐨勫畾涔夈?/p>
25銆乄indows鏀寔涓ょ綾誨瀷鐨勫璇濇錛氭ā寮忓拰鏃犳ā寮忓璇濇銆?br>妯″紡瀵硅瘽妗嗕竴鏃﹀嚭鐜板湪灞忓箷涓婏紝鍙湁褰撳畠閫鍑烘椂錛屽睆騫曚笂璇ュ簲鐢ㄧ▼搴忕殑鍏朵綑閮ㄥ垎鎵嶈兘鍝嶅簲銆?br>鏃犳ā寮忓璇濇鍑虹幇鍦ㄥ睆騫曚笂鏃訛紝紼嬪簭鐨勫叾浣欓儴鍒嗕篃鍙互浣滃嚭鍝嶅簲錛屽畠灝辮薄嫻姩鍦ㄤ笂闈竴鏍楓?/p>
26銆佸崟鏂囨。鐣岄潰(SDI)錛屽彧鏈変竴涓鏋剁獥鍙c?br>MDI 緋葷粺鍏佽鐢ㄦ埛鍦ㄥ悓涓搴旂敤紼嬪簭涓悓鏃跺彲浠ユ煡鐪嬪涓枃妗c?/p>
/*Win32搴旂敤紼嬪簭妗嗘灦涓昏鐢?鍒濆鍖栫獥鍙g被"錛?紿楀彛娉ㄥ唽綾?錛?紿楀彛鐨勫垱寤?浠?紿楀彛娑堟伅鍑芥暟"絳夌粍鎴?/
#include "stdafx.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //紿楀彛鍑芥暟璇存槑
/*
WinMain鍑芥暟鏄墍鏈墂indows搴旂敤紼嬪簭鐨勫叆鍙o紝綾諱技浜嶤璇█涓殑Main鍑芥暟錛屽叾鍔熻兘鏄畬鎴愪竴緋誨垪鐨勫畾涔夊拰鍒濆鍖栧伐浣滐紝騫朵駭鐢熸秷鎭驚鐜傛秷鎭驚鐜槸鏁翠釜紼嬪簭榪愯鐨勬牳蹇冦俉inMain鍑芥暟瀹炵幇浠ヤ笅鍔熻兘銆?br> 1. 娉ㄥ唽紿楀彛綾伙紝寤虹珛紿楀彛鍙婃墽琛屽叾瀹冨繀瑕佺殑鍒濆鍖栧伐浣滐紱
2. 榪涘叆娑堟伅寰幆錛屾牴鎹粠搴旂敤紼嬪簭娑堟伅闃熷垪鎺ュ彈鐨勬秷鎭紝璋冪敤鐩稿簲鐨勫鐞嗚繃紼?br> 3. 褰撴秷鎭驚鐜绱㈠埌WM_QUIT娑堟伅鏃剁粓姝㈢▼搴忚繍琛屻?/p>
WinMain鍑芥暟鏈変笁涓熀鏈殑緇勬垚閮ㄤ喚錛氬嚱鏁拌鏄庛佸垵濮嬪寲鍜屾秷鎭驚鐜?/p>
WinMain鍑芥暟鐨勮鏄庡涓嬶細
int WINAPI WinMain( //WinMain鍑芥暟璇存槑
HINSTANCE hInstance, //紼嬪簭褰撳墠瀹炰緥鍙ユ焺
HINSTANCE hPrevInstance, //搴旂敤紼嬪簭鍏跺畠瀹炰緥鍙ユ焺
LPSTR lpCmdLine, //鎸囧悜紼嬪簭鍛戒護琛屽弬鏁扮殑鎸囬拡
int nCmdShow //搴旂敤紼嬪簭寮濮嬫墽琛屾椂紿楀彛鏄劇ず鏂瑰紡鐨勬暣鏁板兼爣璇?br>)
鐢變簬Window鎿嶄綔緋葷粺鏄浠誨姟鐨勬搷浣滅郴緇燂紝鑳借繘琛屽浠誨姟鐨勭鐞嗭紝鍥犳錛寃indows搴旂敤紼嬪簭鍙兘琚茍琛岀殑澶氭鎵ц錛屽洜鑰屽彲鑳藉嚭鐜板悓涓涓▼搴忕殑澶氫釜紿楀彛鍚屾椂瀛樺湪鐨勬儏鍐碉紝Windows緋葷粺灝嗗簲鐢ㄧ▼搴忔瘡涓嬈℃墽琛岀О涓鴻搴旂敤紼嬪簭鐨勪竴涓疄渚嬶紙Instance錛夛紝騫剁敤涓涓疄渚嬪彞鏌勫敮涓鐨勬爣璇嗗畠銆?/p>
*/
int APIENTRY WinMain(HINSTANCE hInstance, //WinMain鍑芥暟璇存槑
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
/*
寤鴻閲囩敤Pascal鐨勫彉閲忓畾涔夐鏍鹼紝鍗沖湪紼嬪簭錛堝嚱鏁幫級寮濮嬪瀹氫箟鎵鏈夊彉閲?br> 铏界劧C錛嬶紜鐨勫彉閲忓畾涔夋瘮杈冪伒媧伙紝鏈▼搴忎負浜嗕嬌紼嬪簭鏄撲簬鐞嗚В,鏈噰鐢ㄨ繖縐嶆柟娉?br> */
char lpszClassName[]="紿楀彛"; //紿楀彛綾誨悕
char lpszTitle[]="Windows SDK緙栫▼涔嬩竴 紿楀彛紺轟緥紼嬪簭"; //紿楀彛鏍囬鍚?/p>
//---------------紿楀彛綾誨畾涔?------------------------------------
/*
紿楀彛綾葷殑瀹氫箟
鍦╓indows搴旂敤紼嬪簭涓紝紿楀彛瀹沖畾涔変簡紿楀彛鐨勫艦寮忎笌鍔熻兘銆傜獥鍙g被瀹氫箟閫氳繃緇欑獥鍙g被鏁版嵁緇撴瀯WNDCLASS璧嬪煎畬鎴愶紝璇ユ暟鎹粨鏋勪腑鍖呮嫭紿楀彛綾葷殑鍚勭灞炴э紝鍦ㄧ獥鍙g被瀹氫箟榪囩▼涓父鐢ㄥ埌浠ヤ笅鍑芥暟錛?br> */
WNDCLASS wndclass;
wndclass.style=0; //紿楀彛綾誨瀷涓虹己鐪佺被鍨?br> wndclass.lpfnWndProc=WndProc; //紿楀彛澶勭悊鍑芥暟涓篧ndProc
wndclass.cbClsExtra=0; //紿楀彛綾繪棤鎵╁睍
wndclass.cbWndExtra=0; //紿楀彛瀹炰緥鏃犳墿灞?br> wndclass.hInstance=hInstance; //褰撳墠瀹炰緥鍙ユ焺
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //浣跨敤緙虹渷鍥炬爣
/*
LoadIcon錛堬級錛氬湪搴旂敤紼嬪簭涓姞杞戒竴涓獥鍙e浘鏍?br> LoadIcon錛堬級鍑芥暟鍘熷瀷涓猴細
HICON LoadIcon錛?br> HINSTANCE hInstance,//鍥炬爣璧勬簮鎵鍦ㄧ殑妯″潡鍙ユ焺錛屼負NULL鍒欎嬌鐢ㄧ郴緇熼瀹氫箟鍥炬爣
LPCTSTR lpIconName //鍥炬爣璧勬簮鍚嶆垨緋葷粺棰勫畾涔夊浘鏍囨爣璇嗗悕
)
*/
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //紿楀彛閲囩敤綆ご鍏夋爣
/*
LoadCursor():鍦ㄥ簲鐢ㄧ▼搴忎腑鍔犺澆涓涓獥鍙e厜鏍?br> LoadCursor()鍑芥暟鍘熷瀷涓猴細
HCURSOR LoadCursor錛?br> HINSTANCE hInstance,//鍏夋爣璧勬簮鎵鍦ㄧ殑妯″潡鍙ユ焺錛屼負NULL鍒欎嬌鐢ㄧ郴緇熼瀹氫箟鍏夋爣
LPCTSTR lpCursorName //鍏夋爣璧勬簮鍚嶆垨緋葷粺棰勫畾涔夊厜鏍囨爣璇嗗悕
)
*/
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //紿楀彛鑳屾櫙涓虹櫧鑹?br> /*
GetStockObject錛堬級錛氳幏鍙栧凡緇忓畾涔夌殑鐢葷瑪銆佺敾鍒楓佸瓧浣撶瓑瀵硅薄鐨勫彞鏌?br> GetStockObject錛堬級鍑芥暟鍘熷瀷涓猴細
HGDIOBJ GetStockObject錛坕nt fnObject錛? //fnObject涓哄璞$殑鏍囪瘑鍚?/p>
*/
wndclass.lpszMenuName=NULL; //紿楀彛涓棤鑿滃崟
wndclass.lpszClassName=lpszClassName; //紿楀彛綾誨悕涓?紿楀彛瀹炰緥'
//------------------浠ヤ笅鏄繘琛岀獥鍙g被鐨勬敞鍐?--------------------------
/*
娉ㄥ唽紿楀彛綾?br> Windows緋葷粺鏈韓鎻愪緵閮ㄤ喚棰勫畾涔夌殑紿楀彛綾伙紝紼嬪簭鍛樹篃鍙互鑷畾涔夌獥鍙g被錛岀獥鍙g被蹇呴』鍏堟敞鍐屽悗浣跨敤銆傜獥鍙g被鐨勬敞鍐岀敱娉ㄥ唽鍑芥暟RegisterClass錛堬級瀹炵幇銆傚叾褰㈠紡涓?
RegisterClass(&wndclass)
&wndclass涓虹獥鍙g被緇撴瀯
RegisterClass鍑芥暟鐨勮繑鍥炲間負甯冨皵鍊?娉ㄥ唽鎴愬姛鍒欒繑鍥炵湡
*/
if (! RegisterClass(&wndclass)) //娉ㄥ唽紿楀彛錛岃嫢澶辮觸錛屽垯鍙戝嚭澹伴煶
{ MessageBeep(0);
return FALSE;
}
/*
鍒涘緩紿楀彛瀹炰緥
鍒涘緩涓涓獥鍙g被鐨勫疄渚嬬敱鍑芥暟CreateWindow()瀹炵幇,璇ュ嚱鏁扮殑鍘熷瀷涓?
HWND CreateWindow(LPCTSTR lpszClassName, //鍒涘緩紿楀彛錛岀獥鍙g被鍚?br> LPCTSTR lpszTitle, //紿楀彛瀹炰緥鐨勬爣棰樺悕
DWORD dwStyle, //紿楀彛鐨勯鏍?br> int x, //紿楀彛宸︿笂瑙掑潗鏍?br> int y, //紿楀彛宸︿笂瑙掑潗鏍?br> int nWidth, //紿楀彛鐨勫搴?br> int nHeight, //紿楀彛鐨勯珮搴?br> HWND hwndParent, //姝ょ獥鍙g埗紿楀彛
HWENU hMenu, //姝ょ獥鍙d富鑿滃崟
HINSTANCE hInstance, //搴旂敤紼嬪簭褰撳墠鍙ユ焺
LPVOID lpParam); //鎸囧悜涓涓紶閫掔粰紿楀彛鐨勫弬鏁板肩殑鎸囬拡
*/
//鍒涘緩紿楀彛鎿嶄綔
HWND hwnd; //紿楀彛緇撴瀯
hwnd=CreateWindow(lpszClassName, //鍒涘緩紿楀彛錛岀獥鍙g被鍚?br> lpszTitle, //紿楀彛瀹炰緥鐨勬爣棰樺悕
WS_OVERLAPPEDWINDOW, //紿楀彛鐨勯鏍?br> CW_USEDEFAULT,CW_USEDEFAULT, //紿楀彛宸︿笂瑙掑潗鏍囦負緙虹渷鍊?br> CW_USEDEFAULT,CW_USEDEFAULT, //紿楀彛鐨勯珮搴﹀拰瀹藉害涓虹己鐪佸?br> NULL, //姝ょ獥鍙f棤鐖剁獥鍙?br> NULL, //姝ょ獥鍙f棤涓昏彍鍗?br> hInstance, //搴旂敤紼嬪簭褰撳墠鍙ユ焺
NULL); //涓嶄嬌鐢ㄨ鍊?/p>
ShowWindow(hwnd,nCmdShow); //鏄劇ず紿楀彛
UpdateWindow(hwnd); //緇樺埗鐢ㄦ埛鍖?br>
/*
娑堟伅寰幆
windows搴旂敤紼嬪簭鐨勮繍琛屼互娑堟伅涓烘牳蹇冦倃indows灝嗕駭鐢熺殑娑堟伅鏀懼叆搴旂敤紼嬪簭鐨勬秷鎭槦鍒椾腑鑰屽簲鐢ㄧ▼搴廤inMain鍑芥暟鐨勬秷鎭驚鐜彁鍙栨秷鎭槦鍒椾腑鐨勬秷鎭紝騫跺皢鍏朵紶閫掔粰紿楀彛鍑芥暟涓虹浉搴斿鐞嗚繃紼嬪鐞嗐?br> MSG msg; //娑堟伅緇撴瀯
while( GetMessage(&msg,NULL,0,0)) //娑堟伅寰幆
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
*/
MSG msg; //娑堟伅緇撴瀯
/*GetMessage()浣滅敤錛氫粠娑堟伅闃熷垪涓鍙栦竴鏉℃秷鎭紝騫跺皢娑堟伅鏀懼湪涓涓狹SG緇撴瀯涓細
BOOL GetMessage(
LPMSG lpMsg, //鎸囧悜MSG緇撴瀯鐨勬寚閽?br> HWND hWnd,
UINT wMsgFilterMin, //鐢ㄤ簬娑堟伅榪囨護鐨勬渶灝忎俊鎭彿鍊?br> UINT wMsgFilterMax //鐢ㄤ簬娑堟伅榪囨護鐨勬渶澶т俊鎭彿鍊?濡傛渶灝忓煎拰鏈澶у煎潎涓?錛?鍒欎笉榪囨護娑堟伅
);
褰揋etMessage榪斿洖0鏃訛紝鍗蟲绱㈠埌WM_QUIT娑堟伅錛岀▼搴忓皢緇撴潫寰幆騫墮鍑?/p>
BOOL TranslateMessage( const MSG *lpMsg ); 璐熻矗鎶婃秷鎭殑铏氭嫙閿艱漿鎹負瀛楃淇℃伅
LRESULT DispatchMessage( const MSG *lpmsg ); 灝嗗弬鏁發pmsg鎸囧悜鐨勬秷鎭紶閫掔粰鎸囧畾鐨勭獥鍙?/p>
*/
while( GetMessage(&msg,NULL,0,0)) //娑堟伅寰幆
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam; //紼嬪簭緇堟鏃訛紝灝嗕俊鎭繑鍥炴搷浣滅郴緇?br>}
//-----------------------------紿楀彛鍑芥暟---------------------------------------
/*
紿楀彛娑堟伅澶勭悊鍑芥暟瀹氫箟浜嗗簲鐢ㄧ▼搴忓鎺ユ敹鍒扮殑涓嶅悓娑堟伅鐨勫搷搴旓紝瀹冨寘鍚簡搴旂敤紼嬪簭瀵瑰悇縐嶅彲鐢ㄦ帴鏀跺埌鐨勬秷鎭殑澶勭悊榪囩▼錛岄氬父銆錛岀獥鍙e嚱鏁扮敱涓涓垨澶氫釜switch...case璇彞緇勬垚錛屾瘡涓鏉ase璇彞
瀵瑰簲涓縐嶆秷鎭紝褰撳簲鐢ㄧ▼搴忔帴鏀跺埌涓涓秷鎭椂錛岀浉搴旂殑case璇彞琚嬋媧誨茍鎵ц鐩稿簲鐨勫搷搴旂▼搴忔ā鍧椼?br>紿楀彛鍑芥暟鐨勪竴鑸艦寮忓涓嬶細
LRESULT CALLBACK WindowProc( HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
Parameters
hwnd銆錛歔in] Handle to the window.
uMsg銆錛歔in] Specifies the message.
wParam錛歔in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
lParam錛歔in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
Return Value銆
The return value is the result of the message processing and depends on the message sent.
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case ...
....
break;
.........
case WM_DESTROY:
//void PostQuitMessage(int nExitCode)鍑芥暟鐨勪綔鐢ㄦ槸鍚戠▼搴忓彂閫乄M錛縌UIT娑堟伅錛宯ExitCode搴旂敤紼嬪簭閫鍑轟唬鐮?br> PostQuitMessage(0); //璋冪敤璇ュ嚱鏁板彂鍑篧M_QUIT娑堟伅
default: //緙虹渷娑堟伅澶勭悊鍑芥暟,浠ヤ繚璇佹墍鐨勫彂寰紿楀彛鐨勬秷鎭兘鑳借澶勭悊
return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}
*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0); //璋冪敤璇ュ嚱鏁板彂鍑篧M_QUIT娑堟伅
default: //緙虹渷娑堟伅澶勭悊鍑芥暟
return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}
/*
娉細
浜嬩歡椹卞姩鐨勭壒鐐癸細
Windows紼嬪簭璁捐鍥寸粫鐫浜嬩歡鎴栨秷鎭殑浜х敓椹卞姩浜х敓榪愯娑堟伅澶勭悊鍑芥暟銆俉indows紼嬪簭鐨勬墽琛岄『搴忓彇鍐充簬浜嬩歡鍙戠敓鐨勯『搴忥紝紼嬪簭鐨勬墽琛屾槸鐢遍『搴忎駭鐢熺殑娑堟伅椹卞姩鐨勶紝紼嬪簭鍛樺彲浠ラ拡瀵規秷鎭被鍨嬬紪鍐欐秷鎭鐞嗙▼搴忎互澶勭悊鎺ユ敹鐨勬秷鎭紝鎴栬呭彂鍑哄叾浠栨秷鎭互椹卞姩鍏朵粬澶勭悊紼嬪簭錛屼絾鏄笉蹇呴鍏堢‘瀹氭秷鎭殑浜х敓欏哄簭銆傝繖鏄潰鍚戝璞$紪紼嬩腑浜嬩歡椹卞姩鐨勬樉钁楃壒鐐廣?br> 浜嬩歡椹卞姩緙栫▼鏂規硶瀵逛簬緙栧啓浜や簰紼嬪簭寰堟湁鐢ㄥ錛岀敤榪欎竴鏂規硶緙栧啓鐨勭▼搴忎嬌紼嬪簭閬垮厤浜嗘鏉跨殑鎿嶄綔妯″紡錛屼粠鑰屼嬌鐢ㄦ埛鑳藉鎸夌収鑷繁鐨勬剰鎰塊噰鐢ㄧ伒媧誨鍙樼殑鎿嶄綔妯″紡銆?br> Windows搴旂敤紼嬪簭涓殑娑堟伅浼犻掓満鍒訛細
VC涓瓨鍦ㄥ嚑縐嶇郴緇熷畾涔夌殑娑堟伅鍒嗙被錛屽父鐢ㄧ殑娑堟伅鐢辯獥鍙f秷鎭佸垵濮嬪寲娑堟伅銆佽緭鍏ユ秷鎭佺郴緇熸秷鎭佸壀鍒囨澘娑堟伅銆佹枃褰撶晫闈㈡秷鎭丏DE錛堝姩鎬佹暟鎹氦鎹級娑堟伅銆佸簲鐢ㄧ▼搴忚嚜瀹氫箟娑堟伅絳夈傚簲鐢ㄧ▼搴忓彂閫佺殑娑堟伅鍙戦佽嚦娑堟伅闃熷垪錛岀郴緇熸牴鎹秷鎭埌杈劇殑欏哄簭瀵規秷鎭繘琛屽鐞嗭紝騫惰皟鐢ㄥ搷搴旂殑娑堟伅澶勭悊妯″潡浠g爜銆?br>*/