锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 2 娑堟伅綾誨瀷 3 娑堟伅闃熷垪(Message Queues) 4 闃熷垪娑堟伅(Queued Messages)鍜岄潪闃熷垪娑堟伅(Non-Queued Messages) 5 PostMessage(PostThreadMessage), SendMessage 6 GetMessage, PeekMessage 7 TranslateMessage, TranslateAccelerator 8(娑堟伅姝婚攣( Message Deadlocks) 9 BroadcastSystemMessage
姣忎釜紿楀彛浼氭湁涓涓О涓虹獥鍙h繃紼嬬殑鍥炶皟鍑芥暟(WndProc)錛屽畠甯︽湁鍥涗釜鍙傛暟錛屽垎鍒負錛氱獥鍙e彞鏌?Window Handle),娑堟伅ID(Message ID),鍜屼袱涓秷鎭弬鏁?wParam, lParam), 褰撶獥鍙f敹鍒版秷鎭椂緋葷粺灝變細璋冪敤姝ょ獥鍙h繃紼嬫潵澶勭悊娑堟伅銆傦紙鎵浠ュ彨鍥炶皟鍑芥暟錛?/p>
1) 緋葷粺瀹氫箟娑堟伅(System-Defined Messages)
鍦⊿DK涓簨鍏堝畾涔夊ソ鐨勬秷鎭紝闈炵敤鎴峰畾涔夌殑錛屽叾鑼冨洿鍦╗0x0000, 0x03ff]涔嬮棿錛?鍙互鍒嗕負浠ヤ笅涓夌被錛?br>
1>紿楀彛娑堟伅(Windows Message)
涓庣獥鍙g殑鍐呴儴榪愪綔鏈夊叧錛屽鍒涘緩紿楀彛錛岀粯鍒剁獥鍙o紝閿姣佺獥鍙g瓑銆傚彲浠ユ槸涓鑸殑紿楀彛錛屼篃鍙互鏄疍ialog,鎺т歡絳夈?br>
濡傦細WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL...
2>鍛戒護娑堟伅(Command Message)
涓庡鐞嗙敤鎴瘋姹傛湁鍏籌紝 濡傚崟鍑昏彍鍗曢」鎴栧伐鍏鋒爮鎴栨帶浠舵椂錛?灝變細浜х敓鍛戒護娑堟伅銆?br>
WM_COMMAND, LOWORD(wParam)琛ㄧず鑿滃崟欏癸紝宸ュ叿鏍忔寜閽垨鎺т歡鐨処D銆傚鏋滄槸鎺т歡, HIWORD(wParam)琛ㄧず鎺т歡娑堟伅綾誨瀷
3> 鎺т歡閫氱煡(Notify Message)
鎺т歡閫氱煡娑堟伅錛?榪欐槸鏈鐏墊椿鐨勬秷鎭牸寮忥紝 鍏禡essage, wParam, lParam鍒嗗埆涓猴細WM_NOTIFY, 鎺т歡ID錛屾寚鍚慛MHDR鐨勬寚閽堛侼MHDR鍖呭惈鎺т歡閫氱煡鐨勫唴瀹癸紝 鍙互浠繪剰鎵╁睍銆?br>
2) 紼嬪簭瀹氫箟娑堟伅(Application-Defined Messages)
鐢ㄦ埛鑷畾涔夌殑娑堟伅錛?瀵逛簬鍏惰寖鍥存湁濡備笅瑙勫畾錛?br>
WM_USER: 0x0400-0x7FFF (ex. WM_USER+10)
WM_APP(winver>4.0): 0x8000-0xBFFF (ex.WM_APP+4)
RegisterWindowMessage: 0xC000-0xFFFF
Windows涓湁涓ょ綾誨瀷鐨勬秷鎭槦鍒?br>
1) 緋葷粺娑堟伅闃熷垪(System Message Queue)
榪欐槸涓涓郴緇熷敮涓鐨凲ueue錛岃澶囬┍鍔?mouse, keyboard)浼氭妸鎿嶄綔杈撳叆杞寲鎴愭秷鎭瓨鍦ㄧ郴緇熼槦鍒椾腑錛岀劧鍚庣郴緇熶細鎶婃娑堟伅鏀懼埌鐩爣紿楀彛鎵鍦ㄧ殑綰跨▼鐨勬秷鎭槦鍒?thread-specific message queue)涓瓑寰呭鐞?br>
2) 綰跨▼娑堟伅闃熷垪(Thread-specific Message Queue)
姣忎竴涓狦UI綰跨▼閮戒細緇存姢榪欐牱涓涓嚎紼嬫秷鎭槦鍒椼?榪欎釜闃熷垪鍙湁鍦ㄧ嚎紼嬭皟鐢℅DI鍑芥暟鏃舵墠浼氬垱寤猴紝榛樿涓嶅垱寤?銆傜劧鍚庣嚎紼嬫秷鎭槦鍒椾腑鐨勬秷鎭細琚佸埌鐩稿簲鐨勭獥鍙h繃紼?WndProc)澶勭悊.
娉ㄦ剰錛?綰跨▼娑堟伅闃熷垪涓璚M_PAINT錛學M_TIMER鍙湁鍦≦ueue涓病鏈夊叾浠栨秷鎭殑鏃跺欐墠浼氳澶勭悊錛學M_PAINT娑堟伅榪樹細琚悎騫朵互鎻愰珮鏁堢巼銆傚叾浠栨墍鏈夋秷鎭互鍏堣繘鍏堝嚭錛團IFO錛夌殑鏂瑰紡琚鐞嗐?/p>
1)闃熷垪娑堟伅(Queued Messages)
娑堟伅浼氬厛淇濆瓨鍦ㄦ秷鎭槦鍒椾腑錛屾秷鎭驚鐜細浠庢闃熷垪涓彇娑堟伅騫跺垎鍙戝埌鍚勭獥鍙e鐞?br>
濡傞紶鏍囷紝閿洏娑堟伅銆?br>
2) 闈為槦鍒楁秷鎭?NonQueued Messages)
娑堟伅浼氱粫榪囩郴緇熸秷鎭槦鍒楀拰綰跨▼娑堟伅闃熷垪鐩存帴鍙戦佸埌紿楀彛榪囩▼琚鐞?br>
濡傦細 WM_ACTIVATE, WM_SETFOCUS, WM_SETCURSOR錛?WM_WINDOWPOSCHANGED
娉ㄦ剰: postMessage鍙戦佺殑娑堟伅鏄槦鍒楁秷鎭紝瀹冧細鎶婃秷鎭疨ost鍒版秷鎭槦鍒椾腑錛?SendMessage鍙戦佺殑娑堟伅鏄潪闃熷垪娑堟伅錛?琚洿鎺ラ佸埌紿楀彛榪囩▼澶勭悊
PostMessage:鎶婃秷鎭斁鍒版寚瀹氱獥鍙f墍鍦ㄧ殑綰跨▼娑堟伅闃熷垪涓悗绔嬪嵆榪斿洖銆?PostThreadMessage錛氭妸娑堟伅鏀懼埌鎸囧畾綰跨▼鐨勬秷鎭槦鍒椾腑鍚庣珛鍗寵繑鍥炪?br>
SendMessage錛氱洿鎺ユ妸娑堟伅閫佸埌紿楀彛榪囩▼澶勭悊錛?澶勭悊瀹屼簡鎵嶈繑鍥炪?/p>
PeekMessage浼氱珛鍗寵繑鍥?nbsp; 鍙互淇濈暀娑堟伅
GetMessage鍦ㄦ湁娑堟伅鏃惰繑鍥?nbsp;浼氬垹闄ゆ秷鎭?/p>
TranslateMessage: 鎶婁竴涓獀irtual-key娑堟伅杞寲鎴愬瓧絎︽秷鎭?character message)錛屽茍鏀懼埌褰撳墠綰跨▼鐨勬秷鎭槦鍒椾腑錛屾秷鎭驚鐜笅涓嬈″彇鍑哄鐞嗐?br>
TranslateAccelerator: 灝嗗揩鎹烽敭瀵瑰簲鍒扮浉搴旂殑鑿滃崟鍛戒護銆傚畠浼氭妸WM_KEYDOWN 鎴?WM_SYSKEYDOWN杞寲鎴愬揩鎹烽敭琛ㄤ腑鐩稿簲鐨刉M_COMMAND 鎴朩M_SYSCOMMAND娑堟伅錛?鐒跺悗鎶婅漿鍖栧悗鐨?WM_COMMAND鎴朩M_SYSCOMMAND鐩存帴鍙戦佸埌紿楀彛榪囩▼澶勭悊錛?澶勭悊瀹屽悗鎵嶄細榪斿洖銆?/p>
鍋囪鏈夌嚎紼婣鍜孊錛?鐜板湪鏈変互涓嬩笅姝ラ
1) 綰跨▼A SendMessage緇欑嚎紼婤, A絳夊緟娑堟伅鍦ㄧ嚎紼婤涓鐞嗗悗榪斿洖
2) 綰跨▼B鏀跺埌浜嗙嚎紼婣鍙戞潵鐨勬秷鎭紝騫惰繘琛屽鐞嗭紝 鍦ㄥ鐞嗚繃紼嬩腑錛孊涔熷悜綰跨▼A SendMessgae錛岀劧鍚庣瓑寰呬粠A榪斿洖銆?br>
鍥犱負姝ゆ椂錛?綰跨▼A姝g瓑寰呬粠綰跨▼B榪斿洖錛?鏃犳硶澶勭悊B鍙戞潵鐨勬秷鎭紝 浠庤屽鑷翠簡綰跨▼A,B鐩鎬簰絳夊緟錛?褰㈡垚姝婚攣銆傚涓嚎紼嬩篃鍙互褰㈡垚鐜艦姝婚攣銆?br>
鍙互浣跨敤 SendNotifyMessage鎴朣endMessageTimeout鏉ラ伩鍏嶅嚭鐜版閿併?/p>
鎴戜滑涓鑸墍鎺ヨЕ鍒扮殑娑堟伅閮芥槸鍙戦佺粰紿楀彛鐨勶紝 鍏跺疄錛?娑堟伅鐨勬帴鏀惰呭彲浠ユ槸澶氱澶氭牱鐨勶紝瀹冨彲浠ユ槸搴旂敤紼嬪簭(applications), 鍙畨瑁呴┍鍔?installable drivers), 緗戠粶璁懼(network drivers), 緋葷粺綰ц澶囬┍鍔?system-level device drivers)絳夛紝
BroadcastSystemMessage榪欎釜API鍙互瀵逛互涓婄郴緇熺粍浠跺彂閫佹秷鎭?/p>
榪欑鏂規硶鐨勪紭鐐規槸浣夸漢鑳藉閫氳繃鍙橀噺鐨勫悕瀛楁潵杈ㄥ埆鍙橀噺鐨勭被鍨?鑰屼笉姣斿幓鏌ユ壘瀹冪殑瀹氫箟.閬楁喚鐨勬槸,榪欑鏂規硶涓嶄粎浣垮彉閲忓悕瀛楅潪甯哥粫鍙?鑰屼笖浣挎敼鍙樺彉閲忕被鍨嬬殑宸ヤ綔鍙樺緱鍗佸垎鑹板法.鍦╓indows3.1涓?鏁村瀷鍙橀噺涓?6涓哄.濡傛灉鎴戜滑鍦ㄥ紑濮嬫椂閲囩敤浜嗕竴涓暣鍨嬪彉閲?浣嗘槸鍦ㄩ氳繃30---40涓嚱鏁扮殑璁$畻涔嬪悗,鍙戠幇閲囩敤鏁村瀷鍙橀噺瀹藉害涓嶅,榪欐椂鎴戜滑涓嶄粎瑕佹敼鍙樿繖涓彉閲忕殑綾誨瀷,鑰屼笖瑕佹敼鍙樿繖涓彉閲忓湪榪?0--40涓嚱鏁頒腑鐨勫悕瀛?
鍥犱負涓嶅垏瀹為檯,闄や簡涓浜涢〗鍥虹殑Windows紼嬪簭鍛樺宸茬粡娌℃湁浜哄啀浣跨敤"鍖堢墮鍒╄〃紺烘硶"浜?姣棤鐤戦棶,鍦ㄦ煇縐嶅満鍚堝畠渚濈劧瀛樺湪,浣嗗ぇ閮ㄥ垎浜虹幇鍦ㄥ凡緇忔姏寮冨畠浜?涓鑸岃█,杈撳叆鍓嶇紑鏄竴縐嶇碂緋曠殑鎯蟲硶,鍥犱負瀹冩妸鍙橀噺浜庡叾綾誨瀷绱х揣鍦扮粦鍦ㄤ簡涓璧?
瀵逛簬30琛屼互涓嬬殑鍑芥暟錛屽寛鐗欏埄鏂規硶涓鑸湁浼樺娍銆?/p>
灝ゅ叾鏄鐣岄潰緙栫▼錛屾湁浼樺娍銆?/p>
浣嗗浜庢湁寮虹儓鐨勭畻娉曡姹傘佸挨鍏舵槸鏈夊緢澶氭娊璞$被鍨嬬殑C++紼嬪簭錛屽寛鐗欏埄鏂規硶綆鐩存槸涓涓伨闅俱?/p>
鐪嬩綘鐢ㄥ湪浠涔堝湴鏂廣?/p>
鐜板湪鏈変簡寰堝ソ鐨処DE宸ュ叿,濡?VC,SourceInsight絳?
閫変腑鍙橀噺,浼氳嚜鍔ㄦ彁紺哄憡璇変綘瀹冪殑澹版槑鍜屽畾涔?榪欐牱
鍖堢墮鍒╁懡鍚嶆硶灝辨病鏈夊緢澶х殑蹇呰浜?
鏃犻潪灝辨槸涓轟簡紼嬪簭鍙鎬ц緝濂?
瀹為檯涓婅壇濂界殑浠g爜涔﹀啓涔犳儻姣斿己鍒朵嬌鐢ㄥ寛鐗欏埄鍛藉悕娉曟洿閲嶈.
緋葷粺鎬с傛暣浣撴с傚彲璇繪с傚垎綾昏娓呮銆傝鏈夋敞閲婏紒
鍖堢墮鍒╁懡鍚嶆硶鏄井杞帹騫跨殑涓縐嶅叧浜庡彉閲忋佸嚱鏁般佸璞°佸墠緙銆佸畯瀹氫箟絳夊悇縐嶇被鍨嬬殑絎﹀彿鐨勫懡鍚嶈鑼冦傚寛鐗欏埄鍛藉悕娉曠殑涓昏鎬濇兂鏄細鍦ㄥ彉閲忓拰鍑芥暟鍚嶄腑鍔犲叆鍓嶇紑浠ュ榪涗漢浠紼嬪簭鐨勭悊瑙c傚畠鏄敱寰蔣鍐呴儴鐨勪竴涓寛鐗欏埄浜哄彂璧蜂嬌鐢ㄧ殑錛岀粨鏋滃畠鍦ㄥ井杞唴閮ㄩ愭笎嫻佽璧鋒潵錛屽茍涓旀帹騫跨粰浜嗗叏涓栫晫鐨刉indows寮鍙戜漢鍛樸備笅闈㈠皢浠嬬粛鍖堢墮鍒╁懡鍚嶆硶錛屽悗闈㈢殑渚嬪瓙閲屼篃浼氬敖閲忛伒瀹堝畠鍜屼笂闈㈢殑浠g爜椋庢牸銆傝繕鏄偅鍙ヨ瘽錛屽茍涓嶆槸瑕佹眰鎵鏈夌殑璇昏呴兘瑕佸幓閬靛畧錛屼絾鏄笇鏈涜鑰呬綔涓轟竴涓幇浠g殑杞歡寮鍙戜漢鍛橀兘鍘婚伒瀹堝畠銆?/p>
a Array 鏁扮粍
b BOOL (int) 甯冨皵(鏁存暟)
by Unsigned Char (Byte) 鏃犵鍙峰瓧絎?瀛楄妭)
c Char 瀛楃(瀛楄妭)
cb Count of bytes 瀛楄妭鏁?/p>
cr Color reference value 棰滆壊(鍙傝?鍊?/p>
cx Count of x (Short) x鐨勯泦鍚?鐭暣鏁?
dw DWORD (unsigned long) 鍙屽瓧(鏃犵鍙烽暱鏁存暟)
f Flags (usually multiple bit values) 鏍囧織(涓鑸槸鏈夊浣嶇殑鏁板?
fn Function 鍑芥暟
g_ global 鍏ㄥ眬鐨?/p>
h Handle 鍙ユ焺
i Integer 鏁存暟
l Long 闀挎暣鏁?/p>
lp Long pointer 闀挎寚閽?/p>
m_ Data member of a class 涓涓被鐨勬暟鎹垚鍛?/p>
n Short int 鐭暣鏁?/p>
p Pointer 鎸囬拡
s String 瀛楃涓?/p>
sz Zero terminated String 浠?緇撳熬鐨勫瓧絎︿覆
tm Text metric 鏂囨湰瑙勫垯
u Unsigned int 鏃犵鍙鋒暣鏁?/p>
ul Unsigned long (ULONG) 鏃犵鍙烽暱鏁存暟
w WORD (unsigned short) 鏃犵鍙風煭鏁存暟
x,y x, y coordinates (short) 鍧愭爣鍊?鐭暣鏁?/p>
v void 絀?/p>
鏈夊叧欏圭洰鐨勫叏灞鍙橀噺鐢╣_寮濮嬶紝綾繪垚鍛樺彉閲忕敤m_錛屽眬閮ㄥ彉閲忚嫢鍑芥暟杈冨ぇ鍒欏彲鑰冭檻鐢╨_鐢ㄤ互鏄劇ず璇存槑鍏舵槸灞閮ㄥ彉閲忋?/p>
鍓嶇紑 綾誨瀷 渚嬪瓙
g_ 鍏ㄥ眬鍙橀噺 g_Servers
C 綾繪垨鑰呯粨鏋勪綋 CDocument錛孋PrintInfo
m_ 鎴愬憳鍙橀噺 m_pDoc錛宮_nCustomers
VC甯哥敤鍓嶇紑鍒楄〃錛?/p>
鍓嶇紑 綾誨瀷 鎻忚堪 渚嬪瓙
ch char 8浣嶅瓧絎?nbsp; chGrade
ch TCHAR 16浣峌NICODE綾誨瀷瀛楃 chName
b BOOL 甯冨皵鍙橀噺 bEnabled
n int 鏁村瀷錛堝叾澶у皬鐢辨搷浣滅郴緇熷喅瀹氾級 nLength
n UINT 鏃犵鍙鋒暣鍨嬶紙鍏跺ぇ灝忕敱鎿嶄綔緋葷粺鍐沖畾錛?nbsp; nLength
w WORD 16浣嶆棤絎﹀彿鏁村瀷 wPos
l LONG 32浣嶆湁絎﹀彿鏁村瀷 lOffset
dw DWORD 32浣嶆棤絎﹀彿鏁村瀷 dwRange
p * Ambient memory model pointer 鍐呭瓨妯″潡鎸囬拡錛屾寚閽堝彉閲?nbsp; pDoc
lp FAR* 闀挎寚閽?nbsp; lpDoc
lpsz LPSTR 32浣嶅瓧絎︿覆鎸囬拡 lpszName
lpsz LPCSTR 32浣嶅父閲忓瓧絎︿覆鎸囬拡 lpszName
lpsz LPCTSTR 32浣峌NICODE綾誨瀷甯擱噺鎸囬拡 lpszName
h handle Windows瀵硅薄鍙ユ焺 hWnd
lpfn (*fn)() 鍥炶皟鍑芥暟鎸囬拡 Callback Far pointer to CALLBACK function lpfnAbort
Windows瀵硅薄鍚嶇О緙╁啓錛?/p>
Windows瀵硅薄 渚嬪瓙鍙橀噺 MFC綾?nbsp; 渚嬪瓙瀵硅薄
HWND hWnd; CWnd* pWnd;
HDLG hDlg; CDialog* pDlg;
HDC hDC; CDC* pDC;
HGDIOBJ hGdiObj; CGdiObject* pGdiObj;
HPEN hPen; CPen* pPen;
HBRUSH hBrush; CBrush* pBrush;
HFONT hFont; CFont* pFont;
HBITMAP hBitmap; CBitmap* pBitmap;
HPALETTE hPalette; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn;
HMENU hMenu; CMenu* pMenu;
HWND hCtl; CStatic* pStatic;
HWND hCtl; CButton* pBtn;
HWND hCtl; CEdit* pEdit;
HWND hCtl; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;
2銆佽В鍐沖姙娉曪細
銆銆鍦ㄥ浘褰㈠浘璞″鐞嗙紪紼嬭繃紼嬩腑,鍙岀紦鍐叉槸涓縐嶅熀鏈殑鎶鏈傛垜浠煡閬?濡傛灉紿椾綋鍦ㄥ搷搴擶M_PAINT娑堟伅鐨勬椂鍊欒榪涜澶嶆潅鐨勫浘褰㈠鐞嗭紝閭d箞紿椾綋鍦ㄩ噸緇樻椂鐢變簬榪囬鐨勫埛鏂拌屽紩璧烽棯鐑佺幇璞°傝В鍐寵繖涓闂鐨勬湁鏁堟柟娉曞氨鏄弻緙撳啿鎶鏈?/p>
銆銆鍥犱負紿椾綋鍦ㄥ埛鏂版椂錛屾昏鏈変竴涓摝闄ゅ師鏉ュ浘璞$殑榪囩▼OnEraseBkgnd錛屽畠鍒╃敤鑳屾櫙鑹插~鍏呯獥浣撶粯鍥懼尯錛岀劧鍚庡湪璋冪敤鏂扮殑緇樺浘浠g爜榪涜閲嶇粯錛岃繖鏍蜂竴鎿︿竴鍐欓犳垚浜嗗浘璞¢鑹茬殑鍙嶅樊銆傚綋WM_PAINT鐨勫搷搴斿緢棰戠箒鐨勬椂鍊欙紝榪欑鍙嶅樊涔熷氨瓚婂彂鏄庢樉銆備簬鏄垜浠氨鐪嬪埌浜嗛棯鐑佺幇璞°?/p>
銆銆鎴戜滑浼氬緢鑷劧鐨勬兂鍒幫紝閬垮厤鑳屾櫙鑹茬殑濉厖鏄渶鐩存帴鐨勫姙娉曘備絾鏄偅鏍風殑璇濓紝紿椾綋涓婁細鍙樼殑涓鍥㈢碂銆傚洜涓烘瘡嬈$粯鍒跺浘璞$殑鏃跺欓兘娌℃湁灝嗗師鏉ョ殑鍥捐薄娓呴櫎錛岄犳垚浜嗗浘璞$殑孌嬬暀錛屼簬鏄獥浣撻噸緇樻椂錛岀敾闈㈠線寰浼氬彉鐨勪貢涓冨叓緋熴傛墍浠ュ崟綰殑紱佹鑳屾櫙閲嶇粯鏄笉澶熺殑銆傛垜浠繕瑕佽繘琛岄噸鏂扮粯鍥撅紝浣嗚姹傞熷害寰堝揩錛屼簬鏄垜浠兂鍒頒簡浣跨敤BitBlt鍑芥暟銆傚畠鍙互鏀寔鍥懼艦鍧楃殑澶嶅埗錛岄熷害寰堝揩銆傛垜浠彲浠ュ厛鍦ㄥ唴瀛樹腑浣滃浘錛岀劧鍚庣敤姝ゅ嚱鏁板皢鍋氬ソ鐨勫浘澶嶅埗鍒板墠鍙幫紝鍚屾椂紱佹鑳屾櫙鍒鋒柊錛岃繖鏍峰氨娑堥櫎浜嗛棯鐑?/font>銆備互涓婁篃灝辨槸鍙岀紦鍐茬粯鍥劇殑鍩烘湰鐨勬濊礬銆?/p>
錛撱佸叿浣撴楠わ細 銆BOOL CDrawView::OnEraseBkgnd(CDC* pDC) 銆銆 int x=GetSystemMetrics(SM_CXSCREEN); 銆銆return 0;
銆銆鍋囪鎴戜滑寤虹珛浜嗕竴涓狣raw鐨勫伐紼嬶紝鎴戜滑瑕佸湪DrawView涓繘琛岀粯鍥炬搷浣溿?br>
銆銆鍦ㄥ弻緙撳啿鏂規硶涓紝棣栧厛瑕佸仛鐨勬槸灞忚斀鑳屾櫙鍒鋒柊銆傝儗鏅埛鏂板叾瀹炴槸鍦ㄥ搷搴擶M_ERASEBKGND娑堟伅銆傛垜浠湪瑙嗙被錛圕DrawView錛変腑娣誨姞瀵硅繖涓秷鎭殑鍝嶅簲錛屽彲浠ョ湅鍒扮己鐪佺殑浠g爜濡備笅錛?/font>
銆{
銆 //return CDrawView::OnEraseBkgnd(pDC);
銆銆return TRUE;
銆}
鎺ヤ笅鏉ユ槸鍙岀紦鍐茬殑瀹炵幇姝ラ錛?br>
錛?錛夊鍔犳垚鍛樺彉閲?/font>錛堝湪DrawView.h鏂囦歡涓級
銆//鍙傛暟澹版槑
銆銆CBitmap* m_pOldBitmap;
銆銆 CBitmap* m_pMemBitmap; //澹版槑鍐呭瓨涓壙杞戒復鏃跺浘璞$殑浣嶅浘
銆銆CDC* m_pMemDC; //澹版槑鐢ㄤ簬緙撳啿浣滃浘鐨勫唴瀛楧C
錛?錛夊垵濮嬪寲鍙橀噺錛堝湪DrawView鐨勬瀯閫犲嚱鏁頒腑錛?br>
銆銆m_pMemDC=new CDC();
銆銆m_pMemBitmap=new CBitmap();
錛?錛夊鍔犳秷鎭搷搴斿嚱鏁?/font>WM_CREATE錛?font color=#000000>鍦―rawView.cpp涓?/font>錛?br>
銆int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
銆{
銆銆 if (CView::OnCreate(lpCreateStruct) == -1)
銆銆銆 return -1;
銆銆 int y=GetSystemMetrics(SM_CYSCREEN);
銆銆CDC* pDC=GetDC();
銆銆m_pMemDC->CreateCompatibleDC(pDC); //渚濋檮紿楀彛DC鍒涘緩鍏煎鍐呭瓨DC
銆銆m_pMemBitmap->CreateCompatibleBitmap(pDC,x,y); //鍒涘緩鍏煎浣嶅浘
銆 銆m_pOldBitmap=m_pMemDC->SelectObject(m_pMemBitmap); //灝嗕綅鍥鵑夎繘鍐呭瓨DC,鍘熶綅鍥句繚瀛樺埌m_pOldBitmap
銆銆 CBrush brush(RGB(255,255,255));
銆銆m_pMemDC->FillRect(CRect(0,0,x,y),&brush); //璁劇疆瀹㈡埛鍖鴻儗鏅負鐧借壊
銆銆ReleaseDC(pDC);
銆}
錛?錛変慨鏀筄nDraw()鍑芥暟(DrawView.cpp涓?
銆銆void CDrawView::OnDraw(CDC* pDC)
銆銆{
銆銆銆CDocument* pDoc = GetDocument();
銆銆銆CRect rc;
銆銆銆GetClientRect(&rc);
銆銆銆DrawSomething(); //鍦ㄨ繖涓嚱鏁伴噷浣犲彲浠ョ敾浣犳兂鐢葷殑涓滆タ
銆銆銆pDC->BitBlt(0,0,rc.Width(),rc.Height(),m_pMemDC,0,0,SRCCOPY);
銆銆銆銆//榪欓噷灝辨槸灝嗗唴瀛橀噷闈㈢殑鐢誨竷澶嶅埗鍒版樉紺鴻澶囩殑buffer浜?br>銆銆}
錛?錛夎嚜宸辯殑緇樺浘鍑芥暟(DrawView.cpp涓?
銆銆void DrawSomething()
銆銆{
銆銆m_pMemDC->Rectangle(0,0,100,100); //姝ゅ鐢諱簡涓煩褰?br> 銆銆 Invalidate();
銆銆}
錛?錛塪elete鎺塶ew鐨勪笢瑗?/font>錛堝湪DrawView鐨勬瀽鏋勫嚱鏁頒腑錛?br>
銆銆delete m_pBitmap;
銆delete m_pMemDC;
]]>
銆銆鎴戜滑浼氬緢鑷劧鐨勬兂鍒幫紝閬垮厤鑳屾櫙鑹茬殑濉厖鏄渶鐩存帴鐨勫姙娉曘備絾鏄偅鏍風殑璇濓紝紿椾綋涓婁細鍙樼殑涓鍥㈢碂銆傚洜涓烘瘡嬈$粯鍒跺浘璞$殑鏃跺欓兘娌℃湁灝嗗師鏉ョ殑鍥捐薄娓呴櫎錛岄犳垚浜嗗浘璞$殑孌嬬暀錛屼簬鏄獥浣撻噸緇樻椂錛岀敾闈㈠線寰浼氬彉鐨勪貢涓冨叓緋熴傛墍浠ュ崟綰殑紱佹鑳屾櫙閲嶇粯鏄笉澶熺殑銆傛垜浠繕瑕佽繘琛岄噸鏂扮粯鍥撅紝浣嗚姹傞熷害寰堝揩錛屼簬鏄垜浠兂鍒頒簡浣跨敤BitBlt鍑芥暟銆傚畠鍙互鏀寔鍥懼艦鍧楃殑澶嶅埗錛岄熷害寰堝揩銆傛垜浠彲浠ュ厛鍦ㄥ唴瀛樹腑浣滃浘錛岀劧鍚庣敤姝ゅ嚱鏁板皢鍋氬ソ鐨勫浘澶嶅埗鍒板墠鍙幫紝鍚屾椂紱佹鑳屾櫙鍒鋒柊錛岃繖鏍峰氨娑堥櫎浜嗛棯鐑併備互涓婁篃灝辨槸鍙岀紦鍐茬粯鍥劇殑鍩烘湰鐨勬濊礬銆?/p>
銆銆鍏堟寜鏅氬仛鍥劇殑鏂規硶榪涜緙栫▼銆傚嵆鍦ㄨ綾葷殑OnDraw鍑芥暟涓坊鍔犵粯鍥句唬鐮併傚湪姝ゆ垜浠粯鍒惰嫢騫插悓蹇冨渾錛屼唬鐮佸涓嬶細
CBCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint ptCenter;
CRect rect,ellipseRect;
GetClientRect(&rect);
ptCenter = rect.CenterPoint();
for(int i=20;i>0;i--)
{
ellipseRect.SetRect(ptCenter,ptCenter);
ellipseRect.InflateRect(i*10,i*10);
pDC->Ellipse(ellipseRect);
}
緙栬瘧榪愯紼嬪簭錛屽皾璇曟敼鍙樼獥鍙eぇ灝忥紝鍙互鍙戠幇闂儊鐜拌薄銆?/p>
銆銆鍦ㄥ弻緙撳啿鏂規硶涓紝棣栧厛瑕佸仛鐨勬槸灞忚斀鑳屾櫙鍒鋒柊銆傝儗鏅埛鏂板叾瀹炴槸鍦ㄥ搷搴擶M_ERASEBKGND娑堟伅銆傛垜浠湪瑙嗙被涓坊鍔犲榪欎釜娑堟伅鐨勫搷搴旓紝鍙互鐪嬪埌緙虹渷鐨勪唬鐮佸涓嬶細
BOOL CMYView::OnEraseBkgnd(CDC* pDC)
{
return CView::OnEraseBkgnd(pDC);
}
鏄皟鐢ㄧ埗綾葷殑OnEraseBkgnd鍑芥暟錛屾垜浠睆钄芥璋冪敤錛屽彧欏葷洿鎺eturn TRUE;鍗沖彲銆?/p>
銆銆涓嬮潰鏄唴瀛樼紦鍐蹭綔鍥劇殑姝ラ銆?/p>
CPoint ptCenter;
CRect rect,ellipseRect;
GetClientRect(&rect);
ptCenter = rect.CenterPoint();
CDC dcMem; //鐢ㄤ簬緙撳啿浣滃浘鐨勫唴瀛楧C
CBitmap bmp; //鍐呭瓨涓壙杞戒復鏃跺浘璞$殑浣嶅浘
dcMem.CreateCompatibleDC(pDC); //渚濋檮紿楀彛DC鍒涘緩鍏煎鍐呭瓨DC
bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height());//鍒涘緩鍏煎浣嶅浘
dcMem.SelectObject(&bmp); //灝嗕綅鍥鵑夋嫨榪涘唴瀛楧C
dcMem.FillSolidRect(rect,pDC->GetBkColor());//鎸夊師鏉ヨ儗鏅~鍏呭鎴峰尯錛屼笉鐒朵細鏄粦鑹?br> for(int i=20;i>0;i--) //鍦ㄥ唴瀛楧C涓婂仛鍚屾牱鐨勫悓蹇冨渾鍥捐薄
{
ellipseRect.SetRect(ptCenter,ptCenter);
ellipseRect.InflateRect(i*10,i*10);
dcMem.Ellipse(ellipseRect);
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//灝嗗唴瀛楧C涓婄殑鍥捐薄鎷瘋礉鍒板墠鍙?br> dcMem.DeleteDC(); //鍒犻櫎DC
bm.DeleteObject(); //鍒犻櫎浣嶅浘
鐢變簬澶嶆潅鐨勭敾鍥炬搷浣滆漿鍏ュ悗鍙幫紝鎴戜滑鐪嬪埌鐨勬槸閫熷害寰堝揩鐨勫鍒舵搷浣滐紝鑷劧涔熷氨娑堥櫎浜嗛棯鐑佺幇璞°?/p>
| HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); |
| DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); |
| BOOL CDirectAccessHDDlg::WriteSectors(BYTE bDrive, DWORD dwStartSector, WORD wSectors, LPBYTE lpSectBuff) // 瀵圭鐩樻墖鍖烘暟鎹殑鍐欏叆 { 銆if (bDrive == 0) return 0; 銆char devName[] = "\\\\.\\A:"; 銆devName[4] ='A' + bDrive - 1; 銆HANDLE hDev = CreateFile(devName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 銆if (hDev == INVALID_HANDLE_VALUE) return 0; 銆SetFilePointer(hDev, 512 * dwStartSector, 0, FILE_BEGIN); 銆DWORD dwCB; 銆BOOL bRet = WriteFile(hDev, lpSectBuff, 512 * wSectors, &dwCB, NULL); 銆CloseHandle(hDev); 銆return bRet; } BOOL CDirectAccessHDDlg::ReadSectors(BYTE bDrive, DWORD dwStartSector, WORD wSectors, LPBYTE lpSectBuff) // 瀵圭鐩樻墖鍖烘暟鎹殑璇誨彇 { 銆if (bDrive == 0) return 0; 銆char devName[] = "\\\\.\\A:"; 銆devName[4] ='A' + bDrive - 1; 銆HANDLE hDev = CreateFile(devName, GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 銆if (hDev == INVALID_HANDLE_VALUE) return 0; 銆SetFilePointer(hDev, 512 * dwStartSector, 0, FILE_BEGIN); 銆DWORD dwCB; 銆BOOL bRet = ReadFile(hDev, lpSectBuff, 512 * wSectors, &dwCB, NULL); 銆CloseHandle(hDev); 銆return bRet; } |
| if (ReadSectors(uDiskID, m_uFrom, (UINT)dwSectorNum, bBuf) == FALSE) { 銆MessageBox("鎵閫夌鐩樺垎鍖轟笉瀛樺湪錛?, "閿欒", MB_OK | MB_IConERROR); 銆return; } |
| for (DWORD i = 0; i < dwSectorNum * 512; i++) { 銆sprintf(cBuf, "%s%02X ", cBuf, bBuf[i]); 銆if ((i % 512) == 511) sprintf(cBuf, "%s\r\n絎?d鎵囧尯\r\n", cBuf, (int)(i / 512) + m_uFrom); 銆if ((i % 16) == 15) sprintf(cBuf, "%s\r\n", cBuf); 銆else if ((i % 16) == 7) sprintf(cBuf, "%s- ", cBuf); } |
![]() |
| file.Open(fileDlg.GetPathName(), Cfile::modeCreate | Cfile::modeReadWrite); …… if (ReadSectors(uDiskID, m_uFrom, (UINT)dwSectorNum, bBuf) == FALSE) { 銆MessageBox("鎵閫夌鐩樺垎鍖轟笉瀛樺湪錛?, "閿欒", MB_OK | MB_IConERROR); 銆return; } file.Write(bBuf, dwSectorNum * 512); file.Close(); |
| file.Open(fileDlg.GetPathName(), Cfile::modeReadWrite); DWORD dwSectorNum = file.GetLength(); if (dwSectorNum % 512 != 0) return; 銆dwSectorNum /= 512; 銆unsigned char* bBuf = new unsigned char[dwSectorNum * 512]; 銆file.Read(bBuf, dwSectorNum * 512); 銆if (WriteSectors(uDiskID, m_uFrom, (UINT)dwSectorNum, bBuf) == FALSE) { MessageBox("鎵閫夌鐩樺垎鍖轟笉瀛樺湪錛?, "閿欒", MB_OK | MB_IConERROR); return; 銆} 銆file.Close(); 銆delete[] bBuf; |
| unsigned char bBuf[512]; UINT i = 0; BOOL bRet = TRUE; while (m_bAllDisk){ 銆memset(bBuf, 0xFF, sizeof(bBuf)); 銆bRet = WriteSectors(uDiskID, i, 1, bBuf); 銆memset(bBuf, 0, sizeof(bBuf)); 銆bRet = WriteSectors(uDiskID, i, 1, bBuf); 銆if (bRet == FALSE){ if (i == 0) 銆MessageBox("鎵閫夌鐩樺垎鍖轟笉瀛樺湪錛?, "閿欒", MB_OK | MB_IConERROR); else 銆MessageBox("紓佺洏鏁版嵁鎿﹂櫎瀹屾瘯錛?, "閿欒", MB_OK | MB_IConERROR); 銆return; 銆} 銆i++; } |
瀵逛簬鍙互鎺ユ敹鏁版嵁鐨勬帶浠訛紝濡傜紪杈戞帶浠舵潵璇達紝UpdateData()鍑芥暟鑷沖叧閲嶈銆傚綋鎺т歡鍐呭鍙戠敓鍙樺寲鏃訛紝瀵瑰簲鐨勬帶浠跺彉閲忕殑鍊煎茍娌℃湁璺熺潃鍙樺寲錛屽悓
鏍鳳紝褰撴帶浠跺彉閲忓煎彉鍖栨椂錛屾帶浠跺唴瀹逛篃涓嶄細璺熺潃鍙樸?br>UpdateData()鍑芥暟灝辨槸瑙e喅榪欎釜闂鐨勩?/p>
UpdateData(true);鎶婃帶浠跺唴瀹硅鍏ユ帶浠跺彉閲?br>UpdateData(false);鐢ㄦ帶浠跺彉閲忕殑鍊兼洿鏂版帶浠?/p>
濡傦細鏈夌紪杈戞帶浠禝DC_EDIT1錛屽搴旂殑鍙橀噺涓哄瓧絎︿覆m_Edit1錛?br>1銆佷慨鏀瑰彉閲忓煎茍鏄劇ず鍦ㄦ帶浠朵腑錛?br>m_Edit1 = _T("緇撴灉涓?0");
UpdateData(false);
2銆佽鍙栨帶浠剁殑鍊煎埌鍙橀噺涓細
鐢–lassWizard涓篒DC_EDIT1娣誨姞EN_CHANGE娑堟伅澶勭悊鍑芥暟錛?br>void CEditView::OnChangeEdit1()
{
UpdateData(true);
}
UINT_PTR SetTimer( HWND hWnd, // 紿楀彛鍙ユ焺 UINT_PTR nIDEvent, // 瀹氭椂鍣↖D錛屽涓畾鏃跺櫒鏃訛紝鍙互閫氳繃璇D鍒ゆ柇鏄摢涓畾鏃跺櫒 UINT uElapse, // 鏃墮棿闂撮殧,鍗曚綅涓烘縐? TIMERPROC lpTimerFunc // 鍥炶皟鍑芥暟 );渚嬪
SetTimer(m_hWnd,1,1000,NULL); //涓涓?縐掕Е鍙戜竴嬈$殑瀹氭椂鍣?/pre> 鍦∕FC紼嬪簭涓璖etTimer琚皝瑁呭湪CWnd綾諱腑錛岃皟鐢ㄥ氨涓嶇敤鎸囧畾紿楀彛鍙ユ焺浜嗭紝渚嬪:
UINT SetTimer(1,100,NULL);鍑芥暟鍙嶅洖鍊煎氨鏄涓涓弬鏁板?錛岃〃紺烘瀹氭椂鍣ㄧ殑ID鍙楓?br>
絎簩涓弬鏁拌〃紺鴻絳夊緟100姣鏃墮棿鍐嶉噸鏂板鐞嗕竴嬈°傜涓変釜鍙傛暟鍦ㄨ繖縐嶆柟娉曚腑涓鑸敤NULL銆?br>娉ㄦ剰錛?/strong>璁劇疆絎簩涓弬鏁版椂瑕佹敞鎰忥紝濡傛灉璁劇疆鐨勭瓑寰呮椂闂存瘮澶勭悊鏃墮棿鐭紝紼嬪簭灝變細鍑洪棶棰樹簡銆?br>
1.2 璋冪敤鍥炶皟鍑芥暟
姝ゆ柟娉曢鍏堝啓涓涓涓嬫牸寮忕殑鍥炶皟鍑芥暟
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);鐒跺悗鍐嶇敤SetTimer(1,100,TimerProc)鍑芥暟鏉ュ緩涓涓畾鏃跺櫒錛岀涓変釜鍙傛暟灝辨槸鍥炶皟鍑芥暟鍦板潃銆?br>
浜屻佸涓畾鏃跺櫒鐨勫疄鐜頒笌搴旂敤
鎴戜滑鍦ㄥ畨瑁呭畾鏃跺櫒鏃墮兘涓哄叾鎸囧畾浜咺D錛屼嬌鐢ㄥ涓畾鏃跺櫒鏃訛紝璇D灝卞彂鎸ヤ綔鐢ㄤ簡銆?br>涓嶄嬌鐢∕FC鏃訛紝褰撴帴鏀跺埌WM_TIMER娑堟伅錛學PARAM wParam涓殑鍊間究鏄瀹氭椂鍣ㄧ殑ID
浣跨敤MFC鏃跺氨鏇寸畝鍗曚簡錛屾垜浠負鍏跺鍔燱M_TIME鐨勬秷鎭鐞嗗嚱鏁癘nTimer鍗沖彲錛岃鐪嬪涓嬩緥瀛?void CTimerTestDlg::OnTimer(UINT nIDEvent) { switch (nIDEvent) { case 24: ///澶勭悊ID涓?4鐨勫畾鏃跺櫒 Draw1(); break; case 25: ///澶勭悊ID涓?5鐨勫畾鏃跺櫒 Draw2(); break; } CDialog::OnTimer(nIDEvent); }褰撲綘鐢ㄥ洖璋冨嚱鏁版椂錛屾垜浠彲浠ユ牴鎹畁Timerid鐨勫兼潵鍒ゆ柇鏄摢涓畾鏃跺櫒錛屼緥濡?void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime) { switch(nTimerid) { case 1: ///澶勭悊ID涓?鐨勫畾鏃跺櫒 Do1(); break; case 2: ///澶勭悊ID涓?鐨勫畾鏃跺櫒 Do2(); break; } }涓夈佸彇娑堝畾鏃跺櫒
涓嶅啀浣跨敤瀹氭椂鍣ㄥ悗錛屾垜浠簲璇ヨ皟鐢↘illTimer鏉ュ彇娑堝畾鏃訛紝KillTimer鐨勫師鍨嬪涓?br>BOOL KillTimer( HWND hWnd, // 紿楀彛鍙ユ焺 UINT_PTR uIDEvent // ID );鍦∕FC紼嬪簭涓垜浠彲浠ョ洿鎺ヨ皟鐢↘illTimer(int nIDEvent)鏉ュ彇娑堝畾鏃跺櫒銆?br>
鏈枃鎻愪緵鐨勪緥瀛愪唬鐮佸湪榪愯鏃跺氨鍙互鐪嬪埌涓や釜瀹氭椂鍣ㄩ兘鍦ㄥ伐浣滐紝鑰屼笖絎竴涓湪榪愯10嬈″悗灝變細琚獽ILL鎺夈?br>
]]>
涓轟簡鏂逛究鐞嗚В錛屽厛鑰冭檻涓緇存儏鍐典笅鐨勭嚎鎬ф彃鍊?
瀵逛簬涓涓暟鍒梒錛屾垜浠亣璁綾[a]鍒癱[a+1]涔嬮棿鏄嚎鎬у彉鍖栫殑
閭d箞瀵逛簬嫻偣鏁皒(a<=x<a+1)錛宑(x)=c[a+1]*(x-a)+c[a]*(1+a-x);
榪欎釜濂界悊瑙e惂錛?
鎶婅繖縐嶆彃鍊兼柟寮忔墿灞曞埌浜岀淮鎯呭喌
瀵逛簬涓涓簩緇存暟緇刢錛屾垜浠亣璁懼浜庝換鎰忎竴涓誕鐐規暟i,c(a,i)鍒癱(a+1,i)涔嬮棿鏄嚎鎬у彉鍖栫殑,c(i,b)鍒癱(i,b+1)涔嬮棿涔熸槸綰挎у彉鍖栫殑(a,b閮芥槸鏁存暟)
閭d箞瀵逛簬嫻偣鏁扮殑鍧愭爣(x,y)婊¤凍(a<=x<a+1,b<=y<b+1)錛屾垜浠彲浠ュ厛鍒嗗埆姹傚嚭c(x,b)鍜宑(x,b+1):
c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
濂斤紝鐜板湪宸茬粡鐭ラ亾c(x,b)鍜宑(x,b+1)浜嗭紝鑰屾牴鎹亣璁綾(x,b)鍒癱(x,b+1)涔熸槸綰挎у彉鍖栫殑錛屾墍浠?
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
榪欏氨鏄弻綰挎ф彃鍊鹼紝
鍥懼儚鐨勫弻綰挎ф彃鍊兼斁澶х畻娉曚腑錛岀洰鏍囧浘鍍忎腑鏂板垱閫犵殑璞$礌鍊鹼紝鏄敱婧愬浘鍍忎綅緗湪瀹冮檮榪戠殑2*2鍖哄煙4涓偦榪戣薄绱犵殑鍊奸氳繃鍔犳潈騫沖潎璁$畻寰楀嚭鐨勩傚弻綰挎у唴鎻掑肩畻娉曟斁澶у悗鐨勫浘鍍忚川閲忚緝楂橈紝涓嶄細鍑虹幇鍍忕礌鍊間笉榪炵畫鐨勭殑鎯呭喌銆傜劧鑰屾綆楁硶鍏鋒湁浣庨氭護娉㈠櫒鐨勬ц川錛屼嬌楂橀鍒嗛噺鍙楁崯錛屾墍浠ュ彲鑳戒細浣垮浘鍍忚疆寤撳湪涓瀹氱▼搴︿笂鍙樺緱妯$硦銆?/span>

瀵逛簬鏍囧噯鐨勫弻綰挎у樊鍊肩畻娉曪紝X鏂瑰悜鐨勭嚎鎬ф彃鍊鹼細
[閫氱敤1]
[閫氱敤2]
鍏蜂綋鍒版垜浠墍瀹炵幇鐨勭畻娉曚腑錛屾垜浠嬌Q11銆丵12銆丵21銆丵22涓哄厜鏍呬笂鐩擱偦鐨勫洓鐐癸紝鍗砅鍙兘钀戒簬榪欏洓鐐瑰叾涓竴鐐逛笂銆?#916;col鏄綋鍓嶅儚绱犵鍍忕礌鎵灞炲尯鍩熷師鐐圭殑姘村鉤璺濈錛屾瘮濡傚浘2錛屽悇縐嶄笉鍚岀殑棰滆壊浠h〃涓涓尯鍩燂紝鍖哄煙鍘熺偣涓哄尯鍩熷乏涓婅鐨勫儚绱犮?
δ R2 = Color Q22 −Color Q12 鈭?#916;col+Color Q12 鈭?56 (1)
δ R1 = Color Q21 −Color Q11 鈭?#916;col+Color Q11 鈭?56 (2)
鍏朵腑錛?#916;col=(DestColNumber鈭?(SrcWidth鈮?)/DestWidth))&255錛?Color(X)琛ㄧず鐐筙鐨勯鑹詫紝鍏蜂綋綆楁硶浣跨敤鐨勬槸24浣嶇湡褰╄壊鏍煎紡銆?/span>
鍋氬畬X鏂瑰悜鐨勬彃鍊煎悗鍐嶅仛Y鏂瑰悜鐨勬彃鍊鹼紝瀵逛簬涓鑸儏鍐碉紝鏈夛細
[閫氱敤3]
鑰屾垜浠殑鍏蜂綋綆楁硶涓紝Y鏂瑰悜鐨勭嚎鎬ф彃鍊兼柟娉曞(3)鎵紺恒?#916;row鏄綋鍓嶅儚绱犵鍍忕礌鎵灞炲尯鍩熷師鐐圭殑鍨傜洿璺濈錛屾瘮濡傚浘2錛屽悇縐嶄笉鍚岀殑棰滆壊浠h〃涓涓尯鍩燂紝鍖哄煙鍘熺偣涓哄尯鍩熷乏涓婅鐨勫儚绱犮?
Color P = δ R2 鈭?56+ δ R2 −δ R1 鈭?#916;row 鈮?6 (3)
鍏朵腑錛?#916;row=(DestRowNumber鈭?(SrcHeight鈮?)/DestHeight))&255錛岀敱浜庡墠闈負浜嗕究浜庤綆楀乏縐諱簡16浣嶏紝鍥犳鏈鍚庨渶瑕佸彸縐?6浣嶄繚鎸佸尮閰嶃?/span>
綾?C 浼爜濡備笅錛?/span>
鎴戜滑浠ユ斁澶т袱鍊嶄負渚嬶紝璇存槑閫夊彇Q12, Q22, Q11, Q21鐨勮繃紼嬨傛簮鍥懼儚3*3鍖哄煙鏀懼ぇ涓虹洰鏍囧尯鍩?*6鍖哄煙銆傝浠ヤ笅涓虹洰鏍囧浘鍍忥細
|
A |
A |
B |
B |
|
|
|
A |
A |
B |
B |
|
|
|
|
|
C |
C |
|
|
|
|
|
C |
C |
|
|
|
|
|
|
|
D |
D |
|
|
|
|
|
D |
D |
鐩爣鍥懼儚A鍍忕礌鍖哄煙瀵瑰簲鐨?span>Q21錛?span>Q22錛?span>Q11錛?span>Q12錛屼互綰㈣壊鍖哄煙涓哄師鐐瑰悜鍙充笅鏂規墿灞曠殑2*2鍖哄煙銆?/span>
|
Q21 |
Q22 |
|
|
Q11 |
Q12 |
|
|
|
|
|
鐩爣鍥懼儚B鍍忕礌鍖哄煙瀵瑰簲鐨?span>Q21錛?span>Q22錛?span>Q11錛?span>Q12錛屼互钃濊壊鍖哄煙涓哄師鐐瑰悜鍙充笅鏂規墿灞曠殑2*2鍖哄煙銆?/span>
|
|
Q21 |
Q22 |
|
|
Q11 |
Q12 |
|
|
|
|
鐩爣鍥懼儚C鍍忕礌鍖哄煙瀵瑰簲鐨?span>Q21錛?span>Q22錛?span>Q11錛?span>Q12錛屼互緇胯壊鍖哄煙涓哄師鐐瑰悜鍙充笅鏂規墿灞曠殑2*2鍖哄煙銆?/span>
|
|
|
|
|
|
Q21 |
Q22 |
|
|
Q11 |
Q12 |
鐩爣鍥懼儚D鍍忕礌鍖哄煙瀵瑰簲鐨?span>Q21錛?span>Q22錛?span>Q11錛?span>Q12錛岀洰鏍囧浘鍍忓浜庢渶鍚庝袱琛岀殑杈圭晫鎯呭喌錛屽皢Q21錛?span>Q22錛?span>Q11錛?span>Q12榪欏洓涓偣鐨勫艱涓轟竴鏍楓?/span>
|
|
|
|
|
|
|
|
|
|
|
Q11=Q12=Q22=Q21 |


嫻佺▼鍥懼彸杈硅櫄綰挎涓負鐩稿叧榪囩▼鐨勬敞瑙c?/span>
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;
涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓?/strong>
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);
浜屻佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨?/font>
strcpy(temp,"123");
涓夈佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString
浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪:
鍥涖丅STR銆乢bstr_t涓嶤ComBSTR
浜斻乂ARIANT 銆乢variant_t 涓?COleVariant
| 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. |
鍏佸叾瀹冧竴浜汣OM鏁版嵁綾誨瀷
涓冦丄NSI涓嶶nicode
Unicode縐頒負瀹藉瓧絎﹀瀷瀛椾覆,COM閲屼嬌鐢ㄧ殑閮芥槸Unicode瀛楃涓層?/p>
鍏佸叾瀹?/strong>
涔濄佹敞鎰忎簨欏?/strong>
鍋囧闇瑕佷嬌鐢ㄥ埌ConvertBSTRToString姝ょ被鍑芥暟,闇瑕佸姞涓婂ご鏂囦歡comutil.h,騫跺湪setting涓姞鍏omsupp.lib鎴栬呯洿鎺ュ姞涓?pragma comment( lib, "comsupp.lib" )
,szstr);
;2銆傚湪stdafx.cpp涓姞鍏?
int myInt;
鐒跺悗鍦╯tdafx.h涓姞鍏?
extern int myInt
榪欐牱瀹氫箟浠ュ悗鏃犺鍦ㄤ粈涔堟枃浠朵腑閮芥槸鍙鐨?
3銆傛瘮杈冭鑼冪殑鏄紝鍏堝畾涔変竴涓狦lbs.h錛屾妸鎵鏈夌殑鍏ㄥ眬鍙橀噺鍘熷瀹氫箟鏀捐繘鍘匯傜劧鍚庡畾涔変竴涓狤xterns.h錛屾妸浣犲厛鍓嶅畾涔夊湪Glbs.h涓殑鍙橀噺閮藉姞涓奺xtern銆傛敞鎰忥細濡傛灉浣犲湪Glbs.h涓緗簡鍒濆鹼紝閭d箞鍦‥xterns.h涓氨涓嶈鍔犲間簡銆傜劧鍚庤皟鐢ㄦ椂錛岀涓嬈¤皟鐢ㄧ殑錛僫 nclude <Glbs.h>錛屼互鍚庤皟鐢ㄧ殑錛僫 nclude <Externs.h>
鍙︼細
闂細濡備綍鍦╒C++涓嬌鐢ㄥ叏灞鍙橀噺錛屼互浣挎枃妗d腑鐨勬墍鏈夌被閮借兘璁塊棶銆?br>銆銆絳旓細鎶婅鍙橀噺鏀懼埌璇ュ簲鐢ㄧ▼搴忕被鐨勫ご鏂囦歡涓殑attribute澶勩傜劧鍚庯紝鍦ㄧ▼搴忕殑浠諱綍鍦版柟錛屼綘閮藉彲浠ョ敤涓嬮潰鐨勬柟娉曟潵璁塊棶璇ュ彉閲忥細
銆銆CMyApp *app=錛圕MyApp*錛堿fxGet-App錛堬級錛?br>銆銆app->MyGlobalVariable=…
銆銆鐢ㄨ繖涓柟娉曪紝涓嶄絾鍙互瀹氫箟鍏ㄥ眬鍙橀噺錛屼篃鍙互瀹氫箟鍏ㄥ眬瀵硅薄銆?br>銆銆渚嬪錛?br>銆銆MyClass MyObject錛?br>銆銆CMyApp*app=錛圕MyApp*錛堿fxGet-App錛堬級錛?br>銆銆app->MyObject.MyFunction錛堬級錛?/font>
VC涓嬌鐢ㄥ叏灞鍙橀噺鐨?縐嶅姙娉曞強闃查敊鎺柦
1. 瀵逛簬鍏ㄥ眬鍙橀噺瀛樺湪鍜屽嚱鏁頒竴鏍風殑闂錛屼負浜嗗湪鍏朵粬CPP鏂囦歡涓兘澶熻闂繖浜涘彉閲忥紝蹇呴』鍦ㄤ富鏂囦歡鐨凥鏂囦歡涓姞涓奺xtern澹版槑錛屾牸寮忓涓嬶細
extern varibletype var; 錛堝0鏄庯級
鍦ㄤ富鏂囦歡鐨凜PP鏂囦歡涓畾涔?br>varibletype var; 錛堝畾涔夛級
渚嬪瓙:
AppWizard寤虹珛涓涓猅est宸ョ▼
閭d箞鍦═est.h涓0鏄巈xtern CString cs;
鍦═est.app瀹氫箟CString cs;
濡傛灉瑕佸畾涔夋暣涓伐紼嬬殑鍏ㄥ眬鍙橀噺錛屽湪浠諱綍涓涓狢PP鏂囦歡涓繘琛屽畾涔夛紝鐒跺悗鍦ㄩ渶瑕佸紩鐢ㄨ繖涓彉閲忕殑鏂囦歡涓繘琛屽0鏄庛傚鍏ㄥ眬鍙橀噺寰堝鍙互閫夋嫨浣跨敤瀹氫箟鍏ㄥ眬鍙橀噺鐨勩俬鏂囦歡錛屽湪闇瑕佺殑鍦版柟鐩存帴include澶存枃浠跺嵆鍙紝涓嶉渶瑕佸啓閭d箞澶歟xtern浜嗐?br>2.搴旂敤紼嬪簭綾葷殑涓誨ご鏂囦歡澶勫畾涔夊彉閲弙aribletype var錛岀劧鍚庯紝鍦ㄧ▼搴忕殑浠諱綍鍦版柟錛岄兘鍙互鐢ㄤ笅闈㈢殑鏂規硶鏉ヨ闂鍙橀噺錛?nbsp;
銆銆CClassApp *app=(CClassApp*)AfxGetApp();
銆銆app->var=
銆綾諱技鐨勶紝浠ヤ笂鏂規硶涔熷彲浠ュ畾涔夊叏灞瀵硅薄
渚嬪瓙:
AppWizard寤虹珛涓涓猅est宸ョ▼
閭d箞鍦═est.h涓0鏄?CString cs;
浣跨敤鐨勬椂鍊機TestApp *app=(CTestApp*)AfxGetApp();
app->cs="Global"
闃查敊鎺柦錛?br>鑻ュ畾涔夌殑鍑芥暟鍜屽叏灞鍙橀噺鍦ㄥ涓枃浠跺寘鍚笖閫犳垚宓屽鎴栧嬈¤皟鐢ㄧ殑璇濓紝榪欐牱灝嗗鑷磋繖涓ご鏂囦歡姣忚鍖呭惈渚濇錛屽嚱鏁版垨鍙橀噺灝辮閲嶆柊瀹氫箟涓嬈★紝鍦ㄩ摼鎺ョ紪璇戞椂浼氬鑷撮噸瀹氫箟閿欒銆備負姝ら渶瑕佷嬌鐢ㄤ竴縐嶈縐頒負Guard macro鐨勬妧鏈潵淇濊瘉涓嶅嚭閿欍傚湪涓涓ご鏂囦歡寮澶村姞涓?nbsp;
#ifndef _MACRO_1_
#define _MACRO_1_
鍦ㄦ枃浠舵湯灝懼鍔?nbsp;
#endif
鎵撳紑VC錛嬶紜6.0錛屽緩绔嬩竴涓熀浜庡璇濇鐨凪FC搴旂敤紼嬪簭SCommTest;
閫夋嫨Project鑿滃崟涓婣dd To Project瀛愯彍鍗曚腑鐨?Components and Controls…閫夐」錛屽湪寮瑰嚭鐨勫璇濇涓弻鍑籖egistered ActiveX Controls欏癸紙紼嶇瓑涓浼氾紝榪欎釜榪囩▼杈冩參錛夛紝鍒欐墍鏈夋敞鍐岃繃鐨凙ctiveX鎺т歡鍑虹幇鍦ㄥ垪琛ㄦ涓?閫夋嫨Microsoft Communications Control, version 6.0錛岋紝鍗曞嚮Insert鎸夐挳灝嗗畠鎻掑叆鍒版垜浠殑Project涓潵錛屾帴鍙楃己鐪佺殑閫夐」銆傦紙濡傛灉浣犲湪鎺т歡鍒楄〃涓湅涓嶅埌Microsoft Communications Control, version 6.0錛岄偅鍙兘鏄綘鍦ㄥ畨瑁匳C6鏃舵病鏈夋妸ActiveX涓欏歸変笂錛岄噸鏂板畨瑁匳C6錛岄変笂ActiveX灝卞彲浠ヤ簡錛夛紝
榪欐椂鍦–lassView瑙嗙獥涓氨鍙互鐪嬪埌CMSComm綾諱簡錛岋紙娉ㄦ剰錛氭綾誨湪ClassWizard涓湅涓嶅埌錛岄噸鏋刢lw鏂囦歡涔熶竴鏍鳳級錛屽茍涓斿湪鎺т歡宸ュ叿鏍廋ontrols涓嚭鐜頒簡鐢佃瘽鍥炬爣錛堝鍥?鎵紺猴級錛岀幇鍦ㄨ鍋氱殑鏄敤榧犳爣灝嗘鍥炬爣鎷栧埌瀵硅瘽妗嗕腑錛岀▼搴忚繍琛屽悗錛岃繖涓浘鏍囨槸鐪嬩笉鍒扮殑銆?/span>

3.鍒╃敤ClassWizard瀹氫箟CMSComm綾繪帶鍒跺璞?/span>
鎵撳紑ClassWizard錛?gt;Member Viariables閫夐」鍗★紝閫夋嫨CSCommTestDlg綾伙紝涓篒DC_MSCOMM1娣誨姞鎺у埗鍙橀噺錛歮_ctrlComm錛岃繖鏃朵綘鍙互鐪嬩竴鐪嬶紝鍦ㄥ璇濇澶存枃浠朵腑鑷姩鍔犲叆浜?/{{AFX_INCLUDES() 錛僫 nclude "mscomm.h" //}}AFX_INCLUDES 銆?/span>
鍐嶆墦寮ClassWizard錛?gt;Member Viariables閫夐」鍗★紝閫夋嫨CSCommTestDlg綾伙紝 涓篒DC_EDIT_RXDATA娣誨姞CString鍙橀噺m_strRXData錛?涓篒DC_EDIT_TXDATA娣誨姞CString鍙橀噺m_strTXData銆傝鏄庯細 m_strRXData鍜宮_strTXData鍒嗗埆鐢ㄦ潵鏀懼叆鎺ユ敹鍜屽彂閫佺殑瀛楃鏁版嵁銆?/span>
鎵撳紑ClassWizard錛?gt;Message Maps錛岄夋嫨綾籆SCommTestDlg錛岄夋嫨IDC_MSCOMM1錛屽弻鍑繪秷鎭疧nComm錛屽皢寮瑰嚭鐨勫璇濇涓皢鍑芥暟鍚嶆敼涓篛nComm銆?/span>
榪欎釜鍑芥暟鏄敤鏉ュ鐞嗕覆鍙f秷鎭簨浠剁殑錛屽姣忓綋涓插彛鎺ユ敹鍒版暟鎹紝灝變細浜х敓涓涓覆鍙f帴鏀舵暟鎹紦鍐插尯涓湁瀛楃鐨勬秷鎭簨浠訛紝鎴戜滑鍒氭墠娣誨姞鐨勫嚱鏁板氨浼氭墽琛岋紝鎴戜滑鍦∣nComm()鍑芥暟鍔犲叆鐩稿簲鐨勫鐞嗕唬鐮佸氨鑳藉疄鐜拌嚜宸叉兂瑕佺殑鍔熻兘浜嗐傝浣犲湪鍑芥暟涓姞鍏ュ涓嬩唬鐮侊細
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //璁劇疆BYTE鏁扮粍 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //浜嬩歡鍊間負2琛ㄧず鎺ユ敹緙撳啿鍖哄唴鏈夊瓧絎?br> { ////////浠ヤ笅浣犲彲浠ユ牴鎹嚜宸辯殑閫氫俊鍗忚鍔犲叆澶勭悊浠g爜
variant_inp=m_ctrlComm.GetInput(); //璇葷紦鍐插尯
safearray_inp=variant_inp; //VARIANT鍨嬪彉閲忚漿鎹負ColeSafeArray鍨嬪彉閲?br> len="safearray"_inp.GetOneDimSize(); //寰楀埌鏈夋晥鏁版嵁闀垮害
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//杞崲涓築YTE鍨嬫暟緇?br> for(k=0;k<len;k++) //灝嗘暟緇勮漿鎹負Cstring鍨嬪彉閲?br> {
BYTE bt=*(char*)(rxdata+k); //瀛楃鍨?br> strtemp.Format("%c",bt); //灝嗗瓧絎﹂佸叆涓存椂鍙橀噺strtemp瀛樻斁
m_strRXData+=strtemp; //鍔犲叆鎺ユ敹緙栬緫妗嗗搴斿瓧絎︿覆
}
}
UpdateData(FALSE); //鏇存柊緙栬緫妗嗗唴瀹?br>}
鍒扮洰鍓嶄負姝㈣繕涓嶈兘鍦ㄦ帴鏀剁紪杈戞涓湅鍒版暟鎹紝鍥犱負鎴戜滑榪樻病鏈夋墦寮涓插彛錛屼絾榪愯紼嬪簭涓嶅簲璇ユ湁浠諱綍閿欒錛屼笉鐒訛紝浣犺偗瀹氬摢鍎挎病鐪嬩粩緇嗭紝鍥犱負鎴戞槸鎵撳紑VC6瀵圭収鐫鍋氫竴姝ュ啓涓琛岀殑錛岃繍琛岃瘯璇曘傛病閿欏惂錛熼偅涔堝仛涓嬩竴姝ワ細
浣犲彲浠ュ湪浣犻渶瑕佺殑鏃跺欐墦寮涓插彛錛屼緥濡傚湪紼嬪簭涓仛涓涓紑濮嬫寜閽紝鍦ㄨ鎸夐挳鐨勫鐞嗗嚱鏁頒腑鎵撳紑涓插彛銆傜幇鍦ㄦ垜浠湪涓誨璇濇鐨凜SCommTestDlg::OnInitDialog()鎵撳紑涓插彛錛屽姞鍏ュ涓嬩唬鐮侊細
// TODO: Add extra initialization here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //閫夋嫨com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//鎵撳紑涓插彛
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //娉㈢壒鐜?600錛屾棤鏍¢獙錛?涓暟鎹綅錛?涓仠姝綅
m_ctrlComm.SetInputModel(1); //1錛氳〃紺轟互浜岃繘鍒舵柟寮忔鍙栨暟鎹?br>m_ctrlComm.SetRThreshold(1);
//鍙傛暟1琛ㄧず姣忓綋涓插彛鎺ユ敹緙撳啿鍖轟腑鏈夊浜庢垨絳変簬1涓瓧絎︽椂灝嗗紩鍙戜竴涓帴鏀舵暟鎹殑OnComm浜嬩歡
m_ctrlComm.SetInputLen(0); //璁劇疆褰撳墠鎺ユ敹鍖烘暟鎹暱搴︿負0
m_ctrlComm.GetInput();//鍏堥璇葷紦鍐插尯浠ユ竻闄ゆ畫鐣欐暟鎹?/span>
鐜板湪浣犲彲浠ヨ瘯璇曠▼搴忎簡錛屽皢涓插彛綰挎帴濂藉悗錛?span style="FONT-SIZE: 12pt; COLOR: #999999">涓嶄細鎺ワ紵鍘葷湅鐪嬫垜鍐欑殑涓插彛鎺ョ嚎鍩烘湰鏂規硶錛夛紝鎵撳紑
涓插彛璋冭瘯鍔╂墜錛屽茍灝嗕覆鍙h鍦╟om2錛岄変笂鑷姩鍙戦侊紝涔熷彲浠ョ瓑浼氭墜鍔ㄥ彂閫併傚啀鎵ц浣犵紪鍐欑殑紼嬪簭錛屾帴鏀舵閲屽簲璇ユ湁鏁版嵁鏄劇ず浜嗐?/span>鍏堜負鍙戦佹寜閽坊鍔犱竴涓崟鍑繪秷鎭嵆BN_CLICKED澶勭悊鍑芥暟錛屾墦寮ClassWizard錛?gt;Message Maps錛岄夋嫨綾籆SCommTestDlg錛岄夋嫨IDC_BUTTON_MANUALSEND錛屽弻鍑籅N_CLICKED娣誨姞OnButtonManualsend()鍑芥暟錛屽茍鍦ㄥ嚱鏁頒腑娣誨姞濡備笅浠g爜錛?/span>
void CSCommTestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //璇誨彇緙栬緫妗嗗唴瀹?br>m_ctrlComm.SetOutput(COleVariant(m_strTXData));//鍙戦佹暟鎹?br>}
榪愯紼嬪簭錛屽湪鍙戦佺紪杈戞涓殢鎰忚緭鍏ョ偣浠涔堬紝鍗曞嚮鍙戦佹寜閽紝鍟婏紒鐪嬬湅錛屽湪鍙︿竴绔殑涓插彛璋冭瘯鍔╂墜錛堟垨鍒殑璋冭瘯宸ュ叿錛夋帴鏀舵閲屽嚭鐜頒簡浠涔堛?/span>
濡傛灉浣犵湡鏄垵嬈℃秹鐚庝覆鍙g紪紼嬶紝鍙堜竴嬈℃垚鍔燂紝閭h璇村0璋㈣阿鎴戜簡錛屽洜涓烘垜絎竴嬈″仛涓插彛紼嬪簭鏃跺彲璐瑰姴浜嗭紝閭f椂緗戜笂鐨勮祫鏂欎篃涓嶅ソ鎵俱傚紑寮鐜╃瑧錛岃阿璋綘鐨勬敮鎸侊紝鏈変粈涔堝ソ涓滆タ鍒繕浜嗙粰鎴戝瘎涓浠姐?/span>
璇存槑錛?/span>
鐢變簬鐢ㄥ埌VC鎺т歡錛屽湪娌℃湁瀹夎VC鐨勮綆楁満涓婅繍琛屾椂瑕佷粠VC涓妸mscomm32.ocx銆乵svcrt.dll銆乵fc42.dll鎷峰埌Windows鐩綍涓嬬殑System瀛愮洰褰曚腑錛坵in2000涓篠ystem32錛夊茍鍐嶈繘琛屾敞鍐岃緗?/span>
3.1 static_cast
鐢ㄦ硶錛歴tatic_cast < type-id > ( expression )
璇ヨ繍綆楃鎶奺xpression杞崲涓簍ype-id綾誨瀷錛屼絾娌℃湁榪愯鏃剁被鍨嬫鏌ユ潵淇濊瘉杞崲鐨勫畨鍏ㄦс傚畠涓昏鏈夊涓嬪嚑縐嶇敤娉曪細
鈶犵敤浜庣被灞傛緇撴瀯涓熀綾誨拰瀛愮被涔嬮棿鎸囬拡鎴栧紩鐢ㄧ殑杞崲銆?br>銆銆榪涜涓婅杞崲錛堟妸瀛愮被鐨勬寚閽堟垨寮曠敤杞崲鎴愬熀綾昏〃紺猴級鏄畨鍏ㄧ殑錛?br>銆銆榪涜涓嬭杞崲錛堟妸鍩虹被鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚瀛愮被琛ㄧず錛夋椂錛岀敱浜庢病鏈夊姩鎬佺被鍨嬫鏌ワ紝鎵浠ユ槸涓嶅畨鍏ㄧ殑銆?br>鈶$敤浜庡熀鏈暟鎹被鍨嬩箣闂寸殑杞崲錛屽鎶奿nt杞崲鎴恈har錛屾妸int杞崲鎴恊num銆傝繖縐嶈漿鎹㈢殑瀹夊叏鎬т篃瑕佸紑鍙戜漢鍛樻潵淇濊瘉銆?br>鈶㈡妸絀烘寚閽堣漿鎹㈡垚鐩爣綾誨瀷鐨勭┖鎸囬拡銆?br>鈶f妸浠諱綍綾誨瀷鐨勮〃杈懼紡杞崲鎴恦oid綾誨瀷銆?/font>
娉ㄦ剰錛歴tatic_cast涓嶈兘杞崲鎺塭xpression鐨刢onst銆乿olitale銆佹垨鑰卂_unaligned灞炴с?/font>
3.2 dynamic_cast
鐢ㄦ硶錛歞ynamic_cast < type-id > ( expression )
璇ヨ繍綆楃鎶奺xpression杞崲鎴恡ype-id綾誨瀷鐨勫璞°俆ype-id蹇呴』鏄被鐨勬寚閽堛佺被鐨勫紩鐢ㄦ垨鑰卾oid *錛?br>濡傛灉type-id鏄被鎸囬拡綾誨瀷錛岄偅涔坋xpression涔熷繀欏繪槸涓涓寚閽堬紝濡傛灉type-id鏄竴涓紩鐢紝閭d箞expression涔熷繀欏繪槸涓涓紩鐢ㄣ?/font>
dynamic_cast涓昏鐢ㄤ簬綾誨眰嬈¢棿鐨勪笂琛岃漿鎹㈠拰涓嬭杞崲錛岃繕鍙互鐢ㄤ簬綾諱箣闂寸殑浜ゅ弶杞崲銆?br>鍦ㄧ被灞傛闂磋繘琛屼笂琛岃漿鎹㈡椂錛宒ynamic_cast鍜宻tatic_cast鐨勬晥鏋滄槸涓鏍風殑錛?br>鍦ㄨ繘琛屼笅琛岃漿鎹㈡椂錛宒ynamic_cast鍏鋒湁綾誨瀷媯鏌ョ殑鍔熻兘錛屾瘮static_cast鏇村畨鍏ㄣ?br>class B{
public:
int m_iNum;
virtual void foo();
};
class D:public B{
public:
char *m_szName[100];
};
void func(B *pb){
D *pd1 = static_cast<D *>(pb);
D *pd2 = dynamic_cast<D *>(pb);
}
鍦ㄤ笂闈㈢殑浠g爜孌典腑錛屽鏋減b鎸囧悜涓涓狣綾誨瀷鐨勫璞★紝pd1鍜宲d2鏄竴鏍風殑錛屽茍涓斿榪欎袱涓寚閽堟墽琛孌綾誨瀷鐨勪換浣曟搷浣滈兘鏄畨鍏ㄧ殑錛?br>浣嗘槸錛屽鏋減b鎸囧悜鐨勬槸涓涓狟綾誨瀷鐨勫璞★紝閭d箞pd1灝嗘槸涓涓寚鍚戣瀵硅薄鐨勬寚閽堬紝瀵瑰畠榪涜D綾誨瀷鐨勬搷浣滃皢鏄笉瀹夊叏鐨勶紙濡傝闂甿_szName錛夛紝
鑰宲d2灝嗘槸涓涓┖鎸囬拡銆?/font>
鍙﹀瑕佹敞鎰忥細B瑕佹湁铏氬嚱鏁幫紝鍚﹀垯浼氱紪璇戝嚭閿欙紱static_cast鍒欐病鏈夎繖涓檺鍒躲?br>榪欐槸鐢變簬榪愯鏃剁被鍨嬫鏌ラ渶瑕佽繍琛屾椂綾誨瀷淇℃伅錛岃岃繖涓俊鎭瓨鍌ㄥ湪綾葷殑铏氬嚱鏁拌〃錛?br>鍏充簬铏氬嚱鏁拌〃鐨勬蹇碉紝璇︾粏鍙<Inside c++ object model>錛変腑錛屽彧鏈夊畾涔変簡铏氬嚱鏁扮殑綾繪墠鏈夎櫄鍑芥暟琛紝
娌℃湁瀹氫箟铏氬嚱鏁扮殑綾繪槸娌℃湁铏氬嚱鏁拌〃鐨勩?/font>
鍙﹀錛宒ynamic_cast榪樻敮鎸佷氦鍙夎漿鎹紙cross cast錛夈傚涓嬩唬鐮佹墍紺恒?br>class A{
public:
int m_iNum;
virtual void f(){}
};
class B:public A{
};
class D:public A{
};
void foo(){
B *pb = new B;
pb->m_iNum = 100;
D *pd1 = static_cast<D *>(pb); //compile error
D *pd2 = dynamic_cast<D *>(pb); //pd2 is NULL
delete pb;
}
鍦ㄥ嚱鏁癴oo涓紝浣跨敤static_cast榪涜杞崲鏄笉琚厑璁哥殑錛屽皢鍦ㄧ紪璇戞椂鍑洪敊錛涜屼嬌鐢?dynamic_cast鐨勮漿鎹㈠垯鏄厑璁哥殑錛岀粨鏋滄槸絀烘寚閽堛?/font>
3.3 reinpreter_cast
鐢ㄦ硶錛歳einpreter_cast<type-id> (expression)
type-id蹇呴』鏄竴涓寚閽堛佸紩鐢ㄣ佺畻鏈被鍨嬨佸嚱鏁版寚閽堟垨鑰呮垚鍛樻寚閽堛?br>瀹冨彲浠ユ妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝涔熷彲浠ユ妸涓涓暣鏁拌漿鎹㈡垚涓涓寚閽堬紙鍏堟妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝
鍦ㄦ妸璇ユ暣鏁拌漿鎹㈡垚鍘熺被鍨嬬殑鎸囬拡錛岃繕鍙互寰楀埌鍘熷厛鐨勬寚閽堝鹼級銆?/font>
璇ヨ繍綆楃鐨勭敤娉曟瘮杈冨銆?/font>
3.4 const_cast
鐢ㄦ硶錛歝onst_cast<type_id> (expression)
璇ヨ繍綆楃鐢ㄦ潵淇敼綾誨瀷鐨刢onst鎴杤olatile灞炴с傞櫎浜哻onst 鎴杤olatile淇グ涔嬪錛?type_id鍜宔xpression鐨勭被鍨嬫槸涓鏍風殑銆?br>甯擱噺鎸囬拡琚漿鍖栨垚闈炲父閲忔寚閽堬紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱
甯擱噺寮曠敤琚漿鎹㈡垚闈炲父閲忓紩鐢紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱甯擱噺瀵硅薄琚漿鎹㈡垚闈炲父閲忓璞°?/font>
Voiatile鍜宑onst綾昏瘯銆備婦濡備笅涓渚嬶細
class B{
public:
int m_iNum;
}
void foo(){
const B b1;
b1.m_iNum = 100; //comile error
B b2 = const_cast<B>(b1);
b2. m_iNum = 200; //fine
}
涓婇潰鐨勪唬鐮佺紪璇戞椂浼氭姤閿欙紝鍥犱負b1鏄竴涓父閲忓璞★紝涓嶈兘瀵瑰畠榪涜鏀瑰彉錛?br>浣跨敤const_cast鎶婂畠杞崲鎴愪竴涓父閲忓璞★紝灝卞彲浠ュ瀹冪殑鏁版嵁鎴愬憳浠繪剰鏀瑰彉銆傛敞鎰忥細b1鍜宐2鏄袱涓笉鍚岀殑瀵硅薄銆?br>
VC欏圭洰鏂囦歡璇存槑
.dsp
.dsw (developer studio worksapce )宸ヤ綔鍖烘枃浠訛紝閲嶈鎬т竴鑸紝鍥犱負瀹冧俊鎭笉鎴戯紝瀹規槗鎭㈠銆傚畠鍙互鎸囧悜涓涓垨澶氫釜.dsp鏂囦歡
.c錛氭簮浠g爜鏂囦歡錛屾寜C璇█鐢ㄦ硶緙栬瘧澶勭悊銆?br>.cpp錛氭簮浠g爜鏂囦歡錛屾寜C++璇硶緙栬瘧澶勭悊銆?br>.rc錛氳祫婧愭枃浠躲?br>
浠ヤ笅鏂囦歡鍦ㄩ」鐩腑鏄彲涓㈠純鐨勶紝鏈変簺鏂囦歡鍒犻櫎鍚庯紝VC浼氳嚜鍔ㄧ敓鎴愮殑銆?br>.clw ClassWizard淇℃伅鏂囦歡,瀹為檯涓婃槸INI鏂囦歡鐨勬牸寮?鏈夊叴瓚e彲浠ョ爺絀朵竴涓?鏈夋椂鍊機lassWizard鍑洪棶棰?鎵嬪伐淇敼CLW鏂囦歡鍙互瑙e喅.濡傛灉姝ゆ枃浠朵笉瀛樺湪鐨勮瘽,姣忔鐢–lassWizard鐨勬椂鍊欑粯鎻愮ず浣犳槸鍚﹂噸寤?
.ncb 鏃犵紪璇戞祻瑙堟枃浠?no compile browser)銆傚綋鑷姩瀹屾垚鍔熻兘鍑洪棶棰樻椂鍙互鍒犻櫎姝ゆ枃浠躲俠uild鍚庝細鑷姩鐢熸垚銆?br>.opt 宸ョ▼鍏充簬寮鍙戠幆澧冪殑鍙傛暟鏂囦歡銆傚宸ュ叿鏉′綅緗瓑淇℃伅錛?鍙涪寮?
.aps (AppStudio File),璧勬簮杈呭姪鏂囦歡,浜岃繘鍒舵牸寮?涓鑸笉鐢ㄥ幓綆′粬.
.plg 鏄紪璇戜俊鎭枃浠?緙栬瘧鏃剁殑error鍜寃arning淇℃伅鏂囦歡錛堝疄闄呬笂鏄竴涓猦tml鏂囦歡錛?涓鑸敤澶勪笉澶?鍦═ools->Options閲岄潰鏈変釜閫夐」鍙互鎺у埗榪欎釜鏂囦歡鐨勭敓鎴? (寤虹珛鏃ュ織鏂囦歡)
.hpj (Help Project)鏄敓鎴愬府鍔╂枃浠剁殑宸ョ▼,鐢╩icrosfot Help Compiler鍙互澶勭悊.
.mdp (Microsoft DevStudio Project)鏄棫鐗堟湰鐨勯」鐩枃浠?濡傛灉瑕佹墦寮姝ゆ枃浠剁殑璇?浼氭彁紺轟綘鏄惁杞崲鎴愭柊鐨凞SP鏍煎紡.
.bsc 鏄敤浜庢祻瑙堥」鐩俊鎭殑,濡傛灉鐢⊿ource Brower鐨勮瘽灝卞繀欏繪湁榪欎釜鏂囦歡.濡傛灉涓嶇敤榪欎釜鍔熻兘鐨勮瘽,鍙互鍦≒roject Options閲岄潰鍘繪帀Generate Browse Info File,鍙互鍔犲揩緙栬瘧閫熷害.
.map 鏄墽琛屾枃浠剁殑鏄犲儚淇℃伅綰綍鏂囦歡,闄ら潪瀵圭郴緇熷簳灞傞潪甯哥啛鎮?榪欎釜鏂囦歡涓鑸敤涓嶇潃.
.pch (Pre-Compiled File)鏄緙栬瘧鏂囦歡,鍙互鍔犲揩緙栬瘧閫熷害,浣嗘槸鏂囦歡闈炲父澶?
.pdb (Program Database)璁板綍浜嗙▼搴忔湁鍏崇殑涓浜涙暟鎹拰璋冭瘯淇℃伅,鍦ㄨ皟璇曠殑鏃跺欏彲鑳芥湁鐢?
.exp 鍙湁鍦ㄧ紪璇慏LL鐨勬椂鍊欐墠浼氱敓鎴?璁板綍浜咲LL鏂囦歡涓殑涓浜涗俊鎭?涓鑸篃娌′粈涔堢敤.