锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
瑙e喅鍔炴硶錛氬湪浼犻佺嚎紼婸ostMessage娑堟伅鍓嶅鏍堝尯涓婄殑鏁版嵁new涓浠芥斁鍒板爢鍖轟笂錛屽爢鍖虹殑鏁版嵁鏄▼搴忓憳鎵嬪姩鍒?br />寤哄拰鎵嬪姩鍥炴敹鐨勶紝鐒跺悗鎶婅繖浜涙暟鎹紶閫佸埌鍙︿竴綰跨▼錛岀敱鍙︿竴綰跨▼鍘繪墜鍔ㄩ噴鏀綿elete銆?br />
闂鐨勪駭鐢燂細鐢變簬宸ヤ綔綰跨▼澶勭悊鐨勭箒蹇欙紝鏈変竴浜涙暟鎹湪UI綰跨▼閫鍑烘椂榪樻病榪斿洖錛屽綋UI綰跨▼閫鍑哄悗錛屾暟鎹繑鍥?br />鐢卞伐浣滅嚎紼婸ostMessage鍒癠I綰跨▼錛孶I綰跨▼宸茬粡鎺ユ敹涓嶅埌娑堟伅錛屾晠鏈兘鎵嬪姩閲婃斁宸ヤ綔綰跨▼浼犺繃鏉ョ殑鍫嗗尯鍐呭瓨錛?br />閫犳垚鍐呭瓨娉勬紡銆?br />
鍚庢潵錛屾煡鍒板涓嬬綉绔欙細
http://stackoverflow.com/questions/3807945/mfc-data-forwarding-to-main-thread-via-postmessage
鍙戠幇PostMessage鏄湁榪斿洖鍊肩殑錛屽彂閫佸け璐ヨ繑鍥瀎alse銆?br />
鏁呬笂闈㈢殑闂鏈変簡瑙e喅鏂規硶錛?br />UI綰跨▼錛堟帴鏀剁嚎紼嬶級閫鍑哄悗宸ヤ綔綰跨▼錛堝彂閫佺嚎紼嬶級PostMessage鏄繑鍥瀎alse鐨勶紝鏁呭彲浠ュ埄鐢ㄨ繖涓繑鍥炲兼潵鍐沖畾鐢卞摢涓嚎紼嬫潵閲婃斁榪欐
PostMessage涓紶閫掔殑鍐呭瓨錛屽鏋滀紶閫佸け璐ワ紝鍒欑敱褰撳墠PostMessage鐨勭嚎紼嬭礋璐f墜鍔ㄥ洖鏀訛紝濡傛灉鍙戦佹垚鍔熷氨鐢?br />鎺ユ敹綰跨▼鏉ヨ礋璐f墜鍔ㄥ洖鏀躲?/p>
3.鍦ㄧ獥鍙g被涓噸杞絇reTranslateMessage騫惰皟鐢ㄥ皢鍙ユ焺瀛樺偍鍦╩_hAccelTable涓殑::TranslateAccelerator.灝?:TranslateAccelerator榪斿洖鐨?br>鐨勫間綔涓篜reTranslateMessage鐨勮繑鍥炲?
//virtual BOOL PreTranslateMessage(MSG *pMsg);鍑芥暟鍘熷瀷
BOOL CMainWindow::PreTranslateMessage(MSG *pMsg)

{
if(CWnd::PreTranslateMessage(pMsg))
return TRUE;
return ((m_hAccelTable != NULL) && ::TranslateAccelerator(m_hWnd,m_hAccelTable,pMsg));
}
bm_open1.LoadBitmap(IDB_OPEN1);
bm_open2.LoadBitmap(IDB_OPEN2);
(鍑芥暟LoadBitmap鐢ㄤ簬鍔犺澆浣嶅浘鍒癈Bitmap綾葷殑瀵硅薄)鍦ㄨ鍥劇被鐨勬垚鍛樺嚱鏁癘nDraw()涓坊鍔犱互涓嬩唬鐮?
CWnd * parent=GetParent();
CMenu * pmenubar=parent->GetMenu();
CMenu * pmenu=pmenubar->GetSubMenu(2);
pmenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&bm_open1,&bm_open2);
銆銆鍓嶄笁琛屽緱鍒版寚鍚戣彍鍗曠殑鎸囬拡,絎洓琛岃皟鐢ㄥ嚱鏁癝etMenuItemBitmaps寰鑿滃崟涓鍔犲浘鏍?鍏蜂綋鍙傛暟鐨勫惈涔夊彲鍙傝鏈夊叧浠嬬粛MFC鍙婂叾鎴愬憳鍑芥暟鐨勪功鍗沖彲.
灝辨槸鐘簡榪欎釜閿欒,鎴戠綉涓婅蛋浜嗗緢涔?
鐒跺悗鎴戝彂鐜板彟涓綃囨枃绔犲彲浠ュ疄鐜板悓鏍風殑鏁堟灉,涓嶈寰楃綉欏靛湴鍧浜?鑷繁鍐欏嚭鏉?
鍦ㄥ簲鐢ㄧ▼搴忕殑妗嗘灦綾籆MainFrame娣誨姞CBitmap綾葷殑瀵硅薄,涓嶅Θ鍙栧悕涓篵m_open1鍜宐m_open2,
鍚屾牱鍦ㄦ瀯閫犲嚱鏁頒腑娣誨姞濡備笅浠g爜:
bm_open1.LoadBitmap(IDB_OPEN1);
bm_open2.LoadBitmap(IDB_OPEN2);
鐒跺悗鍦–MainFrame::OnCreate()涓坊鍔犲涓嬩唬鐮?(娉ㄦ剰,榪欓噷鍜屼笂闈笉鍚屼簡,涓嶇敤鑾峰緱鐖剁被鐨勬寚閽堜簡)
CMenu * pmenubar=GetMenu();
CMenu * pmenu=pmenubar->GetSubMenu(2);
pmenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&bm_open1,&bm_open2);
鏈鍚庡疄鐜扮殑鏁堟灉涓鏍?涓昏鍥版壈鎴戠殑闂鏄浘鐗囧ぇ灝忔病璋冩暣濂芥樉紺轟笉鍑烘潵.鐗逛綔姝ょ瑪璁?
if(nChar==VK_LEFT && ::GetKeyState(VK_CONTROL)<0) 
{
MessageBox("left","test",MB_OK);
}
涓婄綉鏌ヤ簡璧勬枡閮芥槸鍦≒reTranslateMessage瀵規秷鎭繘琛屽垽鏂?铏界劧鏈濂界殑鏂規硶鏄湪榪欓噷瀹炵幇,浣嗘垜姣旇緝鍠滄灝濊瘯,鎯沖湪榪欓噷瀹炵幇.
緗戜笂閮借鍦≒reTranslateMessage瀹炵幇,鎴戝氨鍦ㄦ垜鐨勫伐紼嬩腑鍘葷湅鐪婸reTranslateMessage鍑芥暟,褰撴垜鏌ヤ簡MSDN鍚庣粓浜庢槑鐧戒簡,鎴戠殑娑堟伅
鍏ㄧ敱榛樿鐨勫嚱鏁板鐞嗕簡,鍒癘nkeyDown鍑芥暟涓氨澶勭悊涓嶄簡浜?鎴戞妸PreTranslateMessage鍑芥暟鏀規垚涓嬮潰鐨勬牱瀛愬氨鍙互浜?
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 

{
// TODO: Add your specialized code here and/or call the base class
return 0;//CDialog::PreTranslateMessage(pMsg);
}
榪欓噷榪樻湁涓涓棶棰?鍏充簬GetKeyState鐨?鏌SDN鍚庣煡閬撳畠鐨勮繑鍥炲兼湁涓夌鐘舵佺殑,鏈夋寜涓嬪拰寮硅搗浠ュ強綾諱技浜庡ぇ灝忓啓杞敭鐨勮Е鍙戞?
浣嗗湪榪欓噷鎴戜滑涓嶇敤鍒拌Е鍙戞?鎸変笅榪斿洖璐熷?寮硅搗榪斿洖姝e?濡傛灉涓婇潰鎴戜滑娌℃湁瀵笹etKeyState鐨勮繑鍥炲煎垽鏂璐?
褰撲綘絎竴嬈℃寜宸﹂敭鏃?涔熶細寮瑰嚭涓涓璇濇,鍘熷洜鏄疓etKeyState榪斿洖闈為浂鍊?
鑻ヤ綘絎竴嬈℃寜Ctrl+left鏃朵篃浼氬脊鍑哄璇濇,浣嗙浜屾涓嶇敤鎸塁trl鍙寜宸﹂敭涔熶細寮瑰嚭瀵硅瘽妗?鍥犱負浣犻偅鏃跺凡緇忚Е鍙戜簡Ctrl閿?鍐嶆寜涓嬈?br>Ctrl+left;涓嬫鎸塴eft灝變笉浼氬脊鍑哄璇濇浜?閭f椂Ctrl澶辨晥浜?(榪欓噷鏄け鏁堣繕鏄脊璧峰垎涓嶆竻浠?璋冭瘯鐪嬪畠鐨勮繑鍥炲?搴旇鏄脊鍑?鍥犱負
鎸変笅Ctrl鐨勫兼椂瀹冪殑鍊奸兘鍦?127鍜?128涓ゅ煎彉鍖?鍗蟲渶楂樹綅(the high-order bit)鏄?,鏈浣庝綅(the low-order bit)鎭掍負1)
浣嗘劅瑙変笂榪樻槸澶辨晥,涓嶇劧涔熶笉鐢ㄧ浜屾鏉ユ仮澶岰trl鐨勪嬌鐢?!!!!!!
鎵浠ヤ笂闈㈢殑GetKeyState蹇呴』鍒ゆ柇榪斿洖鍊肩殑姝h礋!
/Files/dragon/Addrctext.rar
鏈涓昏鏄湪淇敼鐨勪唬鐮佸湪榪欓噷:
CString strWndClass = AfxRegisterWndClass(
CS_DBLCLKS,
AfxGetApp ()->LoadStandardCursor(IDC_CROSS),
(HBRUSH) (COLOR_3DFACE+1),
AfxGetApp ()->LoadStandardIcon (IDI_WINLOGO)
);
鏈鍚庢垜浼氱敤LoadCursor鍔犺澆鑷繁鐢葷殑榧犳爣鍥炬爣鐨?
棣栧厛,"鎻掑叆"->"璧勬簮"->"Cursor"->"鏂板緩"
浼氭湁涓涓紪杈戝浘鏍囩殑紿楀彛,鐒跺悗浣犻殢渚跨敾涓浘妗?/p>
鐒跺悗灝辨寜淇濆瓨鏂囦歡,娉ㄦ剰,榪欓噷瑕佹妸淇濆瓨鐨勬枃浠朵繚瀛樺埌浣犵殑宸ョ▼鏂囦歡澶逛笅,鍗?.dsw鏂囦歡鎵鍦ㄧ殑浣嶇疆.
淇濆瓨鍚?浣犵殑宸ョ▼鏂囦歡澶逛笅浼氬鍑轟袱涓枃浠?涓涓槸*.rc,涓涓槸resourch.h
絎笁姝?鍦‵ileView閲屽彸鍑籖esource Files閫夋嫨"娣誨姞鏂囦歡鍒扮洰褰?,鐒跺悗鎵撳紑浣犵殑璧勬簮鏂囦歡*.rc;
姝ゆ椂浣犱細澶氬嚭涓涓祫婧愯鍥?榪欐椂涓嶈鍙屽嚮*.rc涓嶇劧瀹冧細鍦ㄥ彸緙栬緫妗嗘墦寮鐨?搴旇鐐瑰嚮涓嬫柟鐨勮祫婧愯鍥?
鍐嶆煡鐪嬭鍥鵑噷鏂囦歡澶逛笅鐨勬枃浠?鐐瑰嚮鎵鏈?鍙?,鏈鍚庡湪宸︾紪杈戞浼氭樉紺轟綘鐨勮祫婧愪簡!鍙屽嚮浣犺嚜宸卞畾涔夌殑鍥?br>鏍囧彸緙栬緫妗嗕細鍑虹幇瀹冪殑緙栬緫紿楀彛,榪欓噷鍥炲埌鏂囦歡瑙嗗浘,浣犱細鍙戠幇Resource Files澶氫簡涓涓?.cur鏂囦歡
鍐嶆妸澧炲姞鐨剅esource.h鏂囦歡娣誨姞鍒癏eader Files涓?
榪欐椂浣犳煡鐪媟esource.h鏂囦歡,鍏跺疄瀹冨凡緇忓府浣犲畾涔変簡浣犵殑榧犳爣ID,浣犺嚜宸辨墜鍔ㄥ湪宸ョ▼鏂囦歡澶逛笅鐢ㄦ枃鏈紪杈?br>鍣ㄦ煡鐪?.rc鏂囦歡,鍏跺疄瀹冨凡緇忓府浣犲仛浜嗗ソ澶氬伐浣?
鏈鍚庡啀鎶妑esource.h鏂囦歡鍖呭惈鍒?.cpp鏂囦歡涓嬩慨鏀逛笂闈㈢殑浠g爜鍗沖彲!
#include"resource.h"


CString strWndClass = AfxRegisterWndClass (
CS_DBLCLKS,
AfxGetApp ()->LoadCursor(IDC_CURSOR1),
(HBRUSH) (COLOR_3DFACE+1),
AfxGetApp ()->LoadStandardIcon (IDI_WINLOGO)
);
鏈鍚庝唬鐮?閲岄潰鏈夊彟涓綃囨枃绔?鎴戠湅浜嗛偅綃囪嚜宸卞啀鎬葷粨榪欑瘒鐨?:
/Files/dragon/Addretext1.rar
dc.SetViewportOrg(rect.Width(),0);//鎶婂師鐐圭Щ鑷寵鍙g殑鍙充笂瑙?br> dc.Rectangle(0,0,-200,200);
dc.SetViewportOrg(0,0);//縐誨洖鍘熸潵鐨勪綅緗?br> dc.Rectangle(0,0,200,200);
}
鐢變簬SetViewportOrg鐨勫弬鏁版槸璁懼鍧愭爣,涓庨昏緫鍧愭爣鏃犲叧,鎵浠ュ綋瀹冪Щ鍔ㄥ潗鏍囪醬鏃朵笌涓婁竴嬈$殑鍧愭爣杞寸殑浣嶇疆鏃?br>鍏崇殑,騫朵笖GetClientDC鑾峰緱鐨勬槸璁懼鍧愭爣,鏇村姞鍙互鐩鎬俊瀹冩瘡涓嬈¤緗殑鍧愭爣鐨勬紜?瀹冪殑涓昏浣滅敤鏄?灝嗗師鐐?br>(宸︿笂瑙?縐昏嚦鍙傛暟鎸囧畾鐨勭偣.
鑷充簬SetWindowOrg鏄噰鐢ㄩ昏緫鍧愭爣榪涜璁劇疆鍧愭爣鍘熺偣鐨?瀹冨彲浠ュ湪瀵瑰簲鐨勯昏緫鏄犲皠妯″紡涓嬭繘琛岃緗師鐐?闄や簡
榛樿鐨勫潗鏍囩郴鏄師鐐瑰湪宸︿笂瑙?鍚戜負姝?鍚戝彸涓烘澶?鍏跺畠闈炶嚜瀹氫箟妯″紡閮芥槸鍘熺偣鍦ㄥ乏涓婅,鍚戜笅涓鴻礋,鍚戝彸涓烘鐨?
鍜屾垜浠暟瀛︾殑浜岀淮鍧愭爣緋諱竴鏍?涓轟簡鏇村ソ鐨勪綋鐜板嚭SetWindowOrg鎴戝皢紿楀彛鍒嗗埆鍙樻垚鎴戜滑鏁板涓婂洓涓儚闄?瀹冪殑
浣滅敤鏄繖鏍風殑:鏈変竴鐐筽oint1,鍏堝皢瀹冧粠璁懼鍧愭爣鍙樻垚璇ユ槧灝勬ā寮忎笅鐨勯昏緫鍧愭爣(娉ㄦ剰:涓鑸澶囧潗鏍囩偣鏄?,+ 閫昏緫
鍧愭爣杞崲鍚庢槸+,-鐨?鐢辨槧灝勬ā寮忓喅瀹?,鐒跺悗瀹冪Щ鍔ㄥ畠鐨勫瀵圭О鐐逛嬌寰楀潗鏍囩郴璺熺潃縐誨姩,褰撳畠鐨勫瀵圭О鐐瑰埌杈懼師鐐?br>鏃?鍘熸潵鐨勫師鐐瑰氨鍒拌揪point1鐨勪綅緗?(SetWindowOrg鐨勫弬鏁板氨鏄痯oint1鐨勫瀵圭О鐐?
CRect rect;
GetClientRect(&rect);
娌¤緗墠宸茬粡鏄鍥涜薄闄愪簡!
絎竴璞¢檺:
CClientDC dc(this);
dc.SetMapMode(MM_LOENGLISH);
CPoint point1(0,rect.Height());//鎶婂師鐐圭Щ鍒板乏涓嬭
dc.DPtoLP(&point1);//鍏堝皢璁懼鍧愭爣鍙樻垚閫昏緫鍧愭爣!SetWindowOrg瑕佹眰鐨?
dc.SetWindowOrg(-point1.x,-point1.y);//涓や釜璐熷彿鍙栧瀵圭О鐐?縐誨縐扮偣浣垮緱鏁翠釜鍧愭爣璺熺潃縐諱嬌瀵圭О鐐圭Щ鍒板師鐐?br> CRect rect1(0,0,200,200);
dc.Rectangle(&rect1);
絎簩璞¢檺:
CClientDC dc(this);
dc.SetMapMode(MM_LOENGLISH);
CPoint point1(rect.Width(),rect.Height());//鎶婂師鐐圭Щ鍒板彸涓嬭
dc.DPtoLP(&point1);//閫昏緫鍧愭爣鏄浉瀵逛簬MM_LOENGLISH榪涜杞崲鐨?寰楀埌鐨勫潗鏍囪偗瀹氭槸(+,-)
dc.SetWindowOrg(-point1.x,-point1.y);
dc.Rectangle(0,0,-200,200);
絎笁璞¢檺:
CClientDC dc(this);
dc.SetMapMode(MM_LOENGLISH);
CPoint point1(rect.Width(),0);//鎶婂師鐐圭Щ鍒板彸涓婅
dc.DPtoLP(&point1);
dc.SetWindowOrg(-point1.x,-point1.y);
dc.Rectangle(0,0,-200,-200);
涓婇潰鐨凷etWindowOrg鍒嗗紑鐢葷殑,鎴戣鐨勬晥鏋滄槸瑕佸儚涓婇潰鐨凷etViewportOrg榪欐牱榪炵潃鐢?
鍏跺疄鍦ㄧЩ瀹屼竴涓師鐐瑰悗,鎶婂師鐐圭Щ鍥?0,0)鍐嶇Щ榪囧氨鍙互鍋氬埌浜?(絎洓璞¢檺蹇界暐)
CRect rect;
GetClientRect(&rect);
int width=rect.Width();
int height=rect.Height();
CClientDC dc(this);
dc.SetMapMode(MM_LOENGLISH);
CPoint point1(0,height);
dc.DPtoLP(&point1);
dc.SetWindowOrg(-point1.x,-point1.y);
CRect rect1(0,0,200,200);
dc.Rectangle(&rect1);
dc.SetWindowOrg(0,0);
point1=CPoint(width,height);
dc.DPtoLP(&point1);
dc.SetWindowOrg(-point1.x,-point1.y);
dc.Rectangle(0,0,-200,200);
dc.SetWindowOrg(0,0);
point1=CPoint(width,0);
dc.DPtoLP(&point1);
dc.SetWindowOrg(-point1.x,-point1.y);
dc.Rectangle(0,0,-200,-200);
濡傛灉鎴戜腑闂存病鏈夌敤dc.SetWindowOrg(0,0);灝辮鎬濊冧簡!
CClientDC dc(this);
dc.SetMapMode(MM_LOENGLISH);
CPoint point1(0,height);
dc.DPtoLP(&point1);
dc.SetWindowOrg(-point1.x,-point1.y);
CRect rect1(0,0,200,200);
dc.Rectangle(&rect1);
//鍏堟槑紜笂涓姝ユ垜浠殑鍧愭爣鍘熺偣鍦ㄥ乏涓嬭,瑕佹妸鍘熺偣縐誨埌鍙充笅瑙?姝ゆ椂鍙充笅瑙掔浉瀵瑰綋鏃剁殑鍧愭爣緋繪槸(width,0)
point1=CPoint(width,0);//縐昏嚦(width,0)
dc.DPtoLP(&point1);//鍙樻崲鎴愪負閫昏緫鍧愭爣,浣嗙鍙峰彉涓?+,-),鍥犱負鍦∕M_LOENGLISH鏄犲皠妯″紡涓?br> dc.SetWindowOrg(-point1.x,point1.y);//(width,0)涓?+,0)鍒欏畠鐨勫縐扮偣搴斾負(-,0)鎵嶅,
//鍙灝唒oint1鍓嶄竴涓彉鍙峰嵆鍙?絎簩涓負0涓嶇敤鍙?
dc.Rectangle(0,0,-200,200);
//鍏堟槑紜笂涓姝ユ垜浠殑鍧愭爣鍘熺偣鍦ㄥ彸涓嬭,瑕佹妸鍘熺偣縐誨埌鍙充笂瑙?姝ゆ椂鍙充笂瑙掔浉瀵瑰綋鏃剁殑鍧愭爣緋繪槸(0,height)
point1=CPoint(0,height);//縐昏嚦(0,height)
dc.DPtoLP(&point1);//鍙樻崲鎴愪負閫昏緫鍧愭爣,浣嗙鍙峰彉涓?+,-),鍥犱負鍦∕M_LOENGLISH鏄犲皠妯″紡涓?br> dc.SetWindowOrg(point1.x,point1.y);//(0,height)涓?0,+)鍒欏畠鐨勫縐扮偣搴斾負(0,-)鎵嶅,鍜岄昏緫鍧愭爣鍚屽彿,涓嶇敤鍙?
dc.Rectangle(0,0,-200,-200);
鍙互鐪嬪嚭SetWindowOrg姣忎竴嬈℃墽琛岄兘鏀瑰彉涓嬈″潗鏍囩郴鐨勪綅緗?!
榪欎釜鏂規硶鏀瑰彉瀛愮獥鍙?(鍙沖嚮)寮瑰嚭紿楀彛,欏剁駭紿楀彛鐨勫ぇ灝?浣嶇疆鍜孼欏哄簭!
浠庢垜鐨勭湅娉曟潵瑙夊緱,Z欏哄簭鏄浉瀵規樉紺哄櫒騫抽潰鐨勫瀭鐩存柟鍚戠獥鍙f樉紺虹殑欏哄簭!
鍙傛暟:
pWndInsertAfter
鍦▃搴忎腑鐨勪綅浜庤緗綅鐨勭獥鍙e墠涓涓獥鍙e彞鏌勩傝鍙傛暟蹇呴』涓轟竴涓狢Wnd鎸囬拡錛屾垨涓嬪垪鍊肩殑鍦板潃(鍥犱負鍙傛暟鏄寚閽?涔嬩竴錛?br>wndBottom 灝嗙獥鍙g疆浜嶼搴忕殑搴曢儴;濡傛灉CWnd鏄竴涓《灞傜獥鍙?榪欎釜紿楀彛灝嗗け鍘婚《綰т綅緗?瀹冨皢鏀懼湪鎵鏈夌獥鍙g殑搴曢儴!
wndTop 灝嗙獥鍙g疆浜嶼搴忕殑欏墮儴
wndTopMost 灝嗙獥鍙g疆浜庢墍鏈夐潪欏跺眰紿楀彛涔嬩笂銆傚嵆浣跨獥鍙f湭琚縺媧葷獥鍙d篃灝嗕繚鎸侀《綰т綅緗?br>wndNoTopMost 灝嗙獥鍙g疆浜庢墍鏈夐潪欏跺眰紿楀彛涔嬩笂錛堝嵆鍦ㄦ墍鏈夐《灞傜獥鍙d箣鍚庯級銆傚鏋滅獥鍙e凡緇忔槸闈為《灞傜獥鍙e垯璇ユ爣蹇椾笉璧蜂綔鐢ㄣ?br>wndTop灝辨槸瑕佸皢瀹冩斁鍒癦欏哄簭鐨勯浣嶇疆;
x: 浠ュ鎴峰潗鏍囨寚瀹氱獥鍙f柊浣嶇疆鐨勫乏杈圭晫.
Y: 浠ュ鎴峰潗鏍囨寚瀹氱獥鍙f柊浣嶇疆鐨勯《杈圭晫.
cx:浠ュ儚绱犳寚瀹氱獥鍙g殑鏂扮殑瀹藉害.
cy:浠ュ儚绱犳寚瀹氱獥鍙g殑鏂扮殑楂樺害.
uFlags:紿楀彛灝哄鍜屽畾浣嶇殑鏍囧織銆傝鍙傛暟鍙互鏄笅鍒楀肩殑緇勫悎錛?br>銆銆SWP_ASNCWINDOWPOS錛氬鏋滆皟鐢ㄨ繘紼嬩笉鎷ユ湁紿楀彛錛岀郴緇熶細鍚戞嫢鏈夌獥鍙g殑綰跨▼鍙戝嚭闇姹傘傝繖灝遍槻姝㈣皟鐢ㄧ嚎紼嬪湪鍏朵粬綰跨▼澶勭悊闇姹傜殑鏃跺欏彂鐢熸閿併?br>銆銆SWP_DEFERERASE錛氶槻姝駭鐢焀M_SYNCPAINT娑堟伅銆?br>銆銆SWP_DRAWFRAME錛氬湪紿楀彛鍛ㄥ洿鐢諱竴涓竟妗嗭紙瀹氫箟鍦ㄧ獥鍙g被鎻忚堪涓級銆?br>銆銆SWP_FRAMECHANGED錛氱粰紿楀彛鍙戦乄M_NCCALCSIZE娑堟伅錛屽嵆浣跨獥鍙e昂瀵告病鏈夋敼鍙樹篃浼氬彂閫佽娑堟伅銆傚鏋滄湭鎸囧畾榪欎釜鏍囧織錛屽彧鏈夊湪鏀瑰彉浜嗙獥鍙e昂瀵告椂鎵嶅彂閫乄M_NCCALCSIZE銆?br>銆銆SWP_HIDEWINDOW;闅愯棌紿楀彛銆?br>銆銆SWP_NOACTIVATE錛氫笉嬋媧葷獥鍙c傚鏋滄湭璁劇疆鏍囧織錛屽垯紿楀彛琚縺媧伙紝騫惰璁劇疆鍒板叾浠栨渶楂樼駭紿楀彛鎴栭潪鏈楂樼駭緇勭殑欏墮儴錛堟牴鎹弬鏁癶WndlnsertAfter璁劇疆錛夈?br>銆銆SWP_NOCOPYBITS錛氭竻闄ゅ鎴峰尯鐨勬墍鏈夊唴瀹廣傚鏋滄湭璁劇疆璇ユ爣蹇楋紝瀹㈡埛鍖虹殑鏈夋晥鍐呭琚繚瀛樺茍涓斿湪紿楀彛灝哄鏇存柊鍜岄噸瀹氫綅鍚庢嫹璐濆洖瀹㈡埛鍖恒?br>銆銆SWP_NOMOVE錛氱淮鎸佸綋鍓嶄綅緗紙蹇界暐X鍜孻鍙傛暟錛夈?br>銆銆SWP_NOOWNERZORDER錛氫笉鏀瑰彉z搴忎腑鐨勬墍鏈夎呯獥鍙g殑浣嶇疆銆?br>銆銆SWP_NOREDRAW:涓嶉噸鐢繪敼鍙樼殑鍐呭銆傚鏋滆緗簡榪欎釜鏍囧織錛屽垯涓嶅彂鐢熶換浣曢噸鐢誨姩浣溿傞傜敤浜庡鎴峰尯鍜岄潪瀹㈡埛鍖猴紙鍖呮嫭鏍囬鏍忓拰婊氬姩鏉★級鍜屼換浣曠敱浜庣獥鍥炵Щ鍔ㄨ岄湶鍑虹殑鐖剁獥鍙g殑鎵鏈夐儴鍒嗐傚鏋滆緗簡榪欎釜鏍囧織錛屽簲鐢ㄧ▼搴忓繀欏繪槑紜湴浣跨獥鍙f棤鏁堝茍鍖洪噸鐢葷獥鍙g殑浠諱綍閮ㄥ垎鍜岀埗紿楀彛闇瑕侀噸鐢葷殑閮ㄥ垎銆?br>銆銆SWP_NOREPOSITION錛涗笌SWP_NOOWNERZORDER鏍囧織鐩稿悓銆?br>銆銆SWP_NOSENDCHANGING錛氶槻姝㈢獥鍙f帴鏀禬M_WINDOWPOSCHANGING娑堟伅銆?br>銆銆SWP_NOSIZE錛氱淮鎸佸綋鍓嶅昂瀵革紙蹇界暐cx鍜宑y鍙傛暟錛夈?br>銆銆SWP_NOZORDER錛氱淮鎸佸綋鍓峑搴忥紙蹇界暐pWndInsertAfter鍙傛暟錛夈?br>銆銆SWP_SHOWWINDOW錛氭樉紺虹獥鍙c?br>銆銆榪斿洖鍊鹼細濡傛灉鍑芥暟鎴愬姛錛岃繑鍥炲間負闈為浂錛涘鏋滃嚱鏁板け璐ワ紝榪斿洖鍊間負闆躲傝嫢鎯寵幏寰楁洿澶氶敊璇秷鎭紝璇瘋皟鐢℅etLastError鍑芥暟銆?br>銆銆澶囨敞錛氬鏋滆緗簡SWP_SHOWWINDOW鍜孲WP_HIDEWINDOW鏍囧織錛屽垯紿楀彛涓嶈兘琚Щ鍔ㄥ拰鏀瑰彉澶у皬銆傚鏋滀嬌鐢⊿etWindowLoog鏀瑰彉浜嗙獥鍙g殑鏌愪簺鏁版嵁錛屽垯蹇呴』璋冪敤鍑芥暟SetWindowPos鏉ヤ綔鐪熸鐨勬敼鍙樸備嬌鐢ㄤ笅鍒楃殑緇勫悎鏍囧織錛歋WP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED銆?br>銆銆鏈変袱縐嶆柟娉曞皢紿楀彛璁句負鏈欏跺眰紿楀彛錛氫竴縐嶆槸灝嗗弬鏁皃WndInsertAfter璁劇疆涓簑ndTopMost騫剁‘淇濇病鏈夎緗甋WP_NOZORDER鏍囧織錛涘彟涓縐嶆槸璁劇疆紿楀彛鍦╖搴忎腑鐨勪綅緗互浣垮叾鍦ㄥ叾浠栧瓨鍦ㄧ殑紿楀彛涔嬩笂銆傚綋涓涓獥鍙h緗負鏈欏跺眰紿楀彛鏃訛紝灞炰簬瀹冪殑鎵鏈夌獥鍙e潎涓烘渶欏跺眰紿楀彛錛岃屽畠鐨勬墍鏈夎呯殑z搴忓茍涓嶆敼鍙樸?br>銆銆濡傛灉wndTopMost鍜寃ndNoTopMost鏍囧織鍧囨湭鎸囧畾錛屽嵆搴旂敤紼嬪簭瑕佹眰紿楀彛鍦ㄦ縺媧葷殑鍚屾椂鏀瑰彉鍏跺湪Z搴忎腑鐨勪綅緗椂錛屽湪鍙傛暟hWndinsertAfter涓寚瀹氱殑鍊煎彧鏈夊湪涓嬪垪鏉′歡涓墠浣跨敤錛?br>銆銆鍦╤WndlnsertAfter鍙傛暟涓病鏈夎瀹歸ndNoTopMost鍜寃ndTopMost鏍囧織銆?br>銆銆鐢県Wnd鍙傛暟鏍囪瘑鐨勭獥鍙d笉鏄縺媧葷獥鍙c?br>銆銆濡傛灉鏈皢涓涓潪嬋媧葷獥鍙h瀹氬埌z搴忕殑欏剁錛屽簲鐢ㄧ▼搴忎笉鑳芥縺媧昏紿楀彛銆傚簲鐢ㄧ▼搴忓彲浠ユ棤浠諱綍闄愬埗鍦版敼鍙樿嬋媧葷獥鍙e湪Z搴忎腑鐨勪綅緗紝鎴栨縺媧諱竴涓獥鍙e茍灝嗗叾縐誨埌鏈楂樼駭紿楀彛鐨勯《閮ㄦ垨闈炴渶楂樼駭紿楀彛鐨勯《閮ㄣ?br>銆銆濡傛灉涓涓《灞傜獥鍙h閲嶅畾浣嶅埌z搴忕殑搴曢儴錛坵ndBottom錛夋垨鍦ㄤ換浣曢潪鏈楂樺簭鐨勭獥鍙d箣鍚庯紝璇ョ獥鍙e氨涓嶅啀鏄渶欏跺眰紿楀彛銆傚綋涓涓渶欏跺眰紿楀彛琚疆涓洪潪鏈欏剁駭錛屽垯瀹冪殑鎵鏈夎呯獥鍙e拰鎵灞炶呯獥鍙e潎涓洪潪鏈欏跺眰紿楀彛銆?br>銆銆涓涓潪鏈欏剁紿楀彛鍙互鎷ユ湁涓涓渶欏剁紿楀彛錛屼絾鍙嶄箣鍒欎笉鍙互銆備換浣曞睘浜庨《灞傜獥鍙g殑紿楀彛錛堜緥濡備竴涓璇濇錛夋湰韜氨琚疆涓洪《灞傜獥鍙o紝浠ョ‘淇濇墍鏈夎灞炵獥鍙i兘鍦ㄥ畠浠殑鎵鏈夎呬箣涓娿?br>銆銆濡傛灉搴旂敤紼嬪簭涓嶅湪鍓嶅彴錛屼絾搴旇浣嶄簬鍓嶅彴錛屽氨搴旇皟鐢⊿etForegroundWindow鍑芥暟鏉ヨ緗?/p>
鎴戞墜鍔ㄥ垱寤轟簡鍑犱釜鎺т歡,鐒跺悗璋冪敤涓嬮潰鐨勫嚱鏁拌繘琛岃緗畉ab欏哄簭!鏈緗箣鍓嶆槸鎸夋帶浠剁殑鍒涘緩欏哄簭涓簍ab欏哄簭:
void CTest4Dlg::OnSetOrder()
{
CWnd * pNum1=GetDlgItem(IDC_NUM1);
CWnd * pNum2=GetDlgItem(IDC_NUM2);
CWnd * pResult=GetDlgItem(IDC_RESULT);
CWnd * pEqual=GetDlgItem(IDC_EQUAL);
CWnd * pClear=GetDlgItem(IDC_CLEAR);
CWnd * pSetOrder=GetDlgItem(IDC_SETORDER);
EquBtn.SetWindowPos(&wndTop,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);//wndTop鏄緗負Z欏哄簭鐨勬渶欏墮儴!
Num2.SetWindowPos(pEqual,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
SetOrder.SetWindowPos(pNum2,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
Result.SetWindowPos(pSetOrder,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
Clear.SetWindowPos(pResult,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
}
寮濮嬫椂瀹冪殑tab欏哄簭鏄繖鏍風殑,濡備笅鍥?
褰撴寜浜嗚緗寜閽?OnSetOrder)鍚?濡備笅鍥?
絎簩縐嶆柟娉曞ソ涓鐐?浣嗗疄鐜拌搗鏉ヤ篃姣旇緝闅句竴鐐?
1.鏂板緩涓涓熀浜庡璇濇鐨勫伐紼媡est3;鎴戞妸"紜畾"鍜?鍙栨秷"閮藉垹闄や簡!
2.鍦ㄥ璇濇涓彃鍏ュ鍥劇殑鎺т歡(鍏朵腑Button1鐨処D鏄疘DOK)
3.鍙沖嚮宸ョ▼娣誨姞涓涓狹FC綾?綾誨悕涓篊MyEdit
4.鐒跺悗鍙沖嚮榪欎釜鏂扮被娣誨姞WM_KEYDOWN娑堟伅鍑芥暟OnKeyDown;騫跺姞濡備笅浠g爜:
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
{
CTest3Dlg * pwnd=(CTest3Dlg *)GetParent();//涓轟釜鏄富瀵硅瘽妗嗙被,鎵浠ュ湪CPP鏂囦歡涓姞#include "test3Dlg.h"
//涓嶈鍦ㄥご鏂囦歡涓姞,鍦ㄥご鏂囦歡涓細鍑洪敊鐨?
pwnd->NextDlgCtrl();
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
5.鐒跺悗灝嗕富瀵硅瘽妗嗕腑鐨勪袱涓紪杈戞瀹氫箟鍏寵仈鍙橀噺:
鍦╟lasswizard涓夋嫨 member variables 閫夐」錛宑lass name閫夋嫨瀵硅瘽妗嗙被錛宑ontrol ids涓夋嫨緙栬緫妗嗙殑id鍙鳳紝鐒跺悗閫夋嫨add variable鎸夋壄銆傚湪瀵硅瘽妗嗕腑 categary閫夋嫨control錛?variable type 鍒氭墠瀹氫箟鐨勭被m_myedit1,m_myedit2;閭f椂瀹冧細鎻愮ず浣犲姞澶存枃浠?br>"MyEdit.h" 浣犳鏃跺氨鍦ㄥご鏂囦歡Test3Dlg.h鍔?include "MyEdit.h"
6.涓轟簡璁╃劍鐐硅惤鍦ㄦ寜閽?鏃?鑻ユ寜涓嬪洖杞﹀搷搴旀寜閽?鐨勫嚱鏁?鎴戝姞浜嗕袱涓嚱鏁?
void CTest3Dlg::OnOK()//鍏朵腑榪欎釜灝辨槸鎸夐挳1鐨勫搷搴斿嚱鏁?br>{
// TODO: Add extra validation here
MessageBox("dragon");
//CDialog::OnOK();//鎴戜負浜嗕笉璁╅粯璁ょ殑OnOK鍑芥暟鎵ц,灝嗗畠灞忚斀浜?
}
void CTest3Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)//鍙沖嚮綾繪坊鍔犵殑!
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
OnOK();
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
1.閫氳繃Create鍑芥暟鎵嬪姩鍒涘緩涓涓狪P鎺т歡.
寮濮嬫椂鎴戝湪OnInitDialog()鍑芥暟涓繖鏍峰啓鐨?
CIPAddressCtrl IPAddress;
UINT nID=101;
IPAddress.Create(WS_CHILD |WS_VISIBLE ,CRect(20,20,300,43),this,nID);
浣嗚繍琛屼箣鍚庣湅涓嶅埌鏈塈P鎺т歡鍑烘潵,鍚庢潵鎵嶅彂鐜板師鏉ユ垜鐨処PAddress鏄竴涓眬閮ㄥ彉閲?褰揙nInitDialog()鍑芥暟榪斿洖鏃?榪欎釜鍙橀噺灝辨挙閿浜?
鎵浠ヤ笉浼氭湁鎺т歡鍑烘潵!!
鍙鎶奀IPAddressCtrl IPAddress;鏀懼埌澶存枃浠朵腑瀹氫箟涓烘垚鍛樺彉閲忓氨OK浜?
濡傛灉涓婇潰鐨凜reate鍑芥暟鐨勭涓涓弬鏁版病鏈墊WS_VISIBLE;鎴戜滑鍙互Create鍑芥暟鍚庡姞榪欎竴鍙?IPAddress.ShowWindow(SW_SHOW);
鎰熻涓奀reate鍑芥暟鍦ㄦ瘡涓涓帶浠墮噷閮芥湁,鍒涘緩鐨勬柟娉曚篃鏄ぇ鍚屽皬寮備簡鍚?
2.涓嬮潰鐨勬槸鎴戝湪鍩轟簬涓涓璇濇鐨勫伐紼嬩腑娣誨姞涓涓狪P鎺т歡涓墍鍐欑殑:
鍏堣幏寰楁帶浠剁殑鎸囬拡:
CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
void ClearAddress( );
榪欎釜鍑芥暟灝咺P鎺т歡閲岀殑鍐呭娓呯┖.
BOOL IsBlank( ) const;
榪欎釜鍑芥暟鏄綋IP鎺т歡閲屼竴涓暟瀛楅兘娌℃湁鎵嶈繑鍥炵湡鐨?鍏ㄤ負0閮借繑鍥炲亣,0涔熸槸鏁板瓧!璋冪敤ClearAddress( )鍚庡垰濂藉彲浠ヤ嬌IsBlank()鍙嶅洖鐪?
嫻嬭瘯浠g爜濡備笅:
pIP->ClearAddress();
if(pIP->IsBlank())
{
MessageBox("IP鍏ㄤ負絀?);
}
int GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3);
int GetAddress(DWORD& dwAddress);
褰撴帶浠跺唴瀹逛負絀烘椂,鍗蟲病鏈夋暟瀛?榪?涔熸病鏈?榪斿洖0,0,0,0.鍜屾帶浠跺叏涓?鐨勬儏鍐典竴鏍?
鑾峰緱IP鍦板潃:(涓ょ鏂規硶,閫夊叾涓)
BYTE nf1,nf2,nf3,nf4;
pIP->GetAddress(nf1,nf2,nf3,nf4);
CString str;
str.Format("%d.%d.%d.%d",nf1,nf2,nf3,nf4);//榪欓噷鐨刵f寰楀埌鐨勫兼槸IP鍊間簡.
MessageBox(str);
/*
DWORD dw;
pIP->GetAddress(dw);
CString str;
WORD hiWord=HIWORD(dw);
WORD loWord=LOWORD(dw);
BYTE nf1=HIBYTE(hiWord);
BYTE nf2=LOBYTE(hiWord);
BYTE nf3=HIBYTE(loWord);
BYTE nf4=LOBYTE(loWord);
str.Format("%d.%d.%d.%d",nf1,nf2,nf3,nf4);
MessageBox(str);
*/
void SetAddress(BYTE nField0, BYTE nField1, BYTE nField2, BYTE nField3);
void SetAddress(DWORD dwAddress);
璁劇疆IP鍦板潃:(涓ょ鏂規硶,閫夊叾涓)
pIP->SetAddress(127,0,0,1);
pIP->SetAddress((DWORD)0x7F000001);//榪欎袱琛岀殑鏁堟灉閮芥槸涓鏍風殑!
void SetFieldRange(int nField, BYTE nLower, BYTE nUpper);
璁劇疆姣忎竴涓煙鐨勮寖鍥?(nField鏄?鍒?鐨勫?nLower鍜宯Upper鐨勮寖鍥撮兘鏄?鍒?55.鍙互瓚呭嚭鑼冨洿,浣嗘帶浠朵篃榪樻槸榛樿璁劇疆鍥?鍒?55鐨?
pIP->SetFieldRange(0,5,127);//璁劇疆姣忎竴涓煙鐨勮寖鍥?絎竴涓弬鏁版槸鍩熺殑涓嬫爣,絎簩鍜岀涓変釜鏄寖鍥?
pIP->SetFieldRange(1,5,127);//褰撹緭鍏ユ瘮5灝戞椂,濡?,褰撳け鍘昏緭鍏ョ劍鐐規椂,瀹冧細閲嶇疆涓?.
pIP->SetFieldRange(2,5,127);//褰撹緭鍏ユ瘮127澶ф椂,濡?28,瀹冧細鑷姩鍙樺洖127
pIP->SetFieldRange(3,5,127);
void SetFieldFocus(WORD nField);
nField鐨勫間負0鍒?;琛ㄧず鍩熺殑涓嬫爣!璇ュ嚱鏁版槸浣胯緭鍏ョ劍鐐硅惤鍦ㄥ洓涓煙鐨勬寚瀹氬煙涓?
榪欎釜鍑芥暟瑕佸湪娑堟伅鍝嶅簲鏃舵墠鑳戒綋鐜板嚭鏉?
嫻嬭瘯浠g爜:
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
pIP->SetFieldFocus(2);
}
璇存槑:GetLogicalDriveStrings鍑芥暟灝嗕竴涓紦鍐插尯lpBuffer濉叆鍦ㄨ綆楁満涓婂瓨鍦ㄧ殑紜洏鐩樼.
鍙傛暟璇存槑:
nBufferLength鏄紦鍐插尯lpBuffer鐨勫ぇ灝?浠ュ瓧鑺備負鍗曚綅.瀹冪殑澶у皬涓嶅寘鍚渶鍚庣殑絀哄瓧絎?濡傛灉瀹冪殑鍊間負闆?緙撳啿鍖轟笉鍙敤.
lpBuffer鎸囧悜涓涓帴鏀跺悇縐嶄互闆剁粨灝劇殑瀛楃涓茬紦鍐插尯,涓涓┖瀛楃鐢ㄦ潵鍖哄垎鍚勪釜鍙敤紜洏鐨?鏈鍚庡湪鏈熬鏈夊啀浠ョ┖瀛楃緇撳熬,鍋囧
浣犵殑鐢佃剳涓婃湁C,D涓や釜紜洏鐩樼,鍒欏畠鑳藉緱鍒頒竴涓瓧絎︿覆鏄?
'C',':','\',' ','D',':','\',' ',' '
鍗?C:\<null>D:\<null><null>
榪斿洖鍊?
濡傛灉鍑芥暟鎴愬姛緇撴潫,榪斿洖鍊兼槸鑾峰緱鐨勫瓧絎︿覆闀垮害,浠ュ瓧鑺備負鍗曚綅,涓嶅寘鎷渶鍚庣殑涓涓┖瀛楃,濂藉儚涓婇潰鐨勫瓧絎︿覆鑾峰緱鐨勯暱搴﹀氨鏄?;紜洏
鐩樼鐨勪釜鏁拌嚜涔樹互4灝辨槸浜?璁頒綇:涓涓狝NSI-ASCII鐮佺殑絀哄瓧絎︽槸涓涓瓧鑺?鑰屼竴涓猆nicode鐮佺殑絀哄瓧絎︽槸涓や釜瀛楄妭.濡傛灉榪欎釜緙撳啿鍖轟笉
澶熷ぇ,榪斿洖鍊間細姣攏BufferLength澶?榪欐槸緙撳啿鍖鴻姹傚幓鑾峰緱鍏ㄩ儴紜洏鐩樼鐨勫師鍥?
濡傛灉鍑芥暟澶辮觸,榪欎釜榪斿洖鍊兼槸0;鐢℅etLastError鍙互鎹曡幏榪欎釜閿欒淇℃伅!
絎竴縐? (濡傛灉鏄熀浜庡璇濇鐨勫伐紼?鎴戜滑鍏堟坊鍔犺彍鍗曞拰鍔犻熼敭璧勬簮,鐒跺悗鍙沖嚮涓誨璇濇灞炴ф坊鍔犺彍鍗?
棣栧厛鍦ㄨ祫婧愭枃浠禔ccelerator涓坊鍔犲揩鎹烽敭璧勬簮 ID閫夋嫨浣犺鍏寵仈鑿滃崟欏圭殑鍚嶇О 鐒跺悗鍐嶈緗綘鐨勫揩鎹烽敭.浠涔?涓嬩竴姝?鍦?h鏂囦歡涓姞鍏ヤ竴涓?nbsp; HACCEL hAccel;鍙橀噺 鐒跺悗鍦∣nInitDialog鎴栧垵濮嬪寲涓姞鍏Accel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1)); 鍚庨潰鐨勫弬鏁版槸鍔犻熼敭璧勬簮鏂囦歡鍚?
鏈鍚庡湪PreTranslateMessage(MSG* pMsg) 涓姞鍏?
if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
return true;
榪欐牱 浠ュ悗鍙鍦ˋccelerator璧勬簮鏂囦歡涓坊鍔犲揩鎹烽敭灝卞彲浠ヤ簡
娉ㄦ剰錛?娣?/span>鍔犲揩鎹烽敭鐨処D涓瀹氳涓庤彍鍗旾D涓鏍?/span> 榪欐牱鎵嶈兘鍝嶅簲.鐜板湪鍙渶瑕佸湪姝よ彍鍗曢」涓姞鍏nCommand娑堟伅鐨勫鐞嗗氨鍙互浜?
絎簩縐? 榪樻槸鍦ㄨ祫婧愭枃浠禔ccelerator涓坊鍔犲揩鎹烽敭璧勬簮 ID鑷繁瀹氫箟涓涓?鐒跺悗鍐嶈緗綘鐨勫揩鎹烽敭.涓嬩竴姝?..灝辨槸鍦?h鏂囦歡涓畾涔変竴涓揩鎹烽敭瀵硅薄
HACCEL m_hAccel;
鐒跺悗鍦?cpp鏂囦歡涓垵濮?br> m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
IDR_ACCELERATOR1涓轟綘鐨勫姞閫熻祫婧愬悕縐?娉ㄦ剰涓嶆槸鍒氬垰瀹氫箟鐨勫姞閫熼敭ID.
鍐嶆坊鍔燩reTranslateMessage娑堟伅澶勭悊 鍦ㄩ噷闈㈠姞鍏ヤ互涓嬩唬鐮?
//淇濆瓨蹇嵎閿鍚敤
if(m_hAccel != NULL)
{
if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
return TRUE;
}
鍐嶆坊鍔燨nCommand娑堟伅澶勭悊 鍔犲叆浠ヤ笅浠g爜:
//鍝嶅簲鍔犻熼敭
switch(LOWORD(wParam))
{
case SHOW_DIAL0G: //鍔犻熼敭ID
//...娣誨姞澶勭悊璇彞
break;
case SHOW_DIALOG_02: //鍔犻熼敭ID
//...娣誨姞澶勭悊璇彞
break;
}
鑷繁鍔犵殑:鍦ㄦ垜鐪嬬殑浠g爜涓?瀹冩槸鍒╃敤瀵硅瘽妗嗗姞鑿滃崟鐨?褰撳姞浜嗚彍鍗曞悗,鎶婅彍鍗曟寕鍒板璇濇,鐒跺悗鍝嶅簲涓涓彍鍗曢」.鍐嶅湪瀵硅瘽妗嗙被涓姞铏氬嚱鏁癙reTranslateMessage,鍦ㄤ簺鏁伴噷鐨勪唬鐮佸涓?
if( pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_F2)
this->PostMessage(WM_COMMAND,IDM_SHOW);//IDM_SHOW鏄搷搴旂殑鑿滃崟欏笽D
}
return CDialog::PreTranslateMessage(pMsg);
榪欐牱鎴戝氨鍙互鍝嶅簲F2鐨勫姞閫熼敭浜?!
杞澆:http://www.cnblogs.com/thankgoodness/articles/1136617.html
鏂板緩涓涓熀浜庡璇濇鐨勫伐紼?
(1)鎴戝姞杞界殑宸ュ叿鏍忔湁鍗佷釜64*42鐨勬寜閽?鎵浠ュ璇濊浜嬪厛鎷夊緱姣斿伐鍏鋒爮瀹?
(2)鎻掑叆涓涓伐鍏鋒爮,鍒濆ID涓篒DR_TOOLBAR1;鐒跺悗鍦ㄤ笂闈㈠姞鍗佷釜64*42鐨勬寜閽?鎴戝姞杞界殑浣嶅浘鏄?nbsp; 640*42鐨?榪欎釜鍙互綆楀嚭鏉ュ惂!
(3)鍦–**Dlg綾繪坊鍔犱竴涓狢ToolBar鍙橀噺m_ToolBar;鍐嶅湪榪欎釜綾繪坊鍔燨nInitDialog()鍑芥暟,鍦ㄨ繖鍑芥暟閲屾坊鍔犲涓嬩唬鐮佸姞杞藉伐鍏鋒潯鍒板璇濇!
if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
m_ToolBar.ShowWindow(SW_SHOW);
鐒跺悗緙栬瘧榪愯!
(4)鍙沖嚮浣犵殑宸ュ叿鏍忕偣灞炴?鐪嬪埌鏂囦歡鍚嶇殑鍐呭鏄?res\toolbar1.bmp;榪欎笅浣犱篃鑷劧鎯沖埌宸ョ▼涓嬬殑res鏂囦歡澶逛簡鍚?灝嗕綘瑕佸姞鍏ョ殑鍥劇墖鏀瑰悕涓簍oolbar1.bmp澶嶅埗鍒皉es鏂囦歡涓嬪幓瑕嗙洊鍘熸潵鐨則oolbar1.bmp;榪欐椂VC浼氬脊鍑轟竴涓璇濇璇?........\toolbar1.bmp榪欎釜鏂囦歡宸插湪Microsoft Developer Studio涔嬪琛ヤ慨鏀?浣犺閲嶆柊杞藉叆瀹冨悧?"
浣犳寜"鏄?灝辮浜?
榪欐椂浣犵紪杈戠殑宸ュ叿鏍忕浉搴斾細鏈夊彉鍖栫殑浜?
(5)緙栬瘧榪愯鍚庢槸榪樹笉琛岀殑,閭f椂鎴戞妸鎴戝伐鍏鋒爮鐨勫乏鏁扮涓涓寜閽敼浜咺D鍐嶇紪璇戣繍琛屽氨OK浜?/span>!
榪欎釜欏哄簭涓嶈兘鍊掑晩,鍛靛懙!鍥犱負toolbar1.bmp鍘熷厛涓嶅瓨鍦ㄧ殑,緙栬瘧榪愯鏃跺畠浼氳嚜宸辯敓鎴愮殑,浣嗘垜浠敓鎴愬悗鍐嶅幓瑕嗙洊灝變笉涓鏍蜂簡!
浠ヤ笅鏄垜鍋氭垚鍔熺殑鐣岄潰鍜岀敤鍒扮殑toolbar1.bmp鍥?鍥犱負涓嶈兘涓婁紶bmp鏍煎紡,鎴戞妸鍚庣紑鏀規垚jpg鎵嶄笂浼犱簡)

绱т綔絎旇涔嬬敤,濡傛灉瑙夊緱榪欎釜綆鍗曞嬁鍢茬瑧!
濡傦細
// 鎵撳紑HKEY_LOCAL_MACHINE涓婚敭涓嬬殑SoftWare\\Cleaner\\Cleaner瀛愰敭
HKEY hKEY;
HKEY hKeyRoot = HKEY_LOCAL_MACHINE;
long ret0=(::RegOpenKeyEx(hKeyRoot,"SoftWare\\Cleaner\\Cleaner",0,KEY_READ,&hKEY));
if(ret0!=ERROR_SUCCESS)//濡傛灉鏃犳硶鎵撳紑hKEY,鍒欎腑姝㈢▼搴忕殑鎵ц
{
AfxMessageBox("閿欒錛氭棤娉曟墦寮鏈夊叧鐨刪KEY");
return;
}
2. 璇誨彇娉ㄥ唽琛?br> LONG RegQueryValueEx(
HKEY hKey, // handle to key鎵撳紑娉ㄥ唽琛ㄦ寚閽?br> LPCTSTR lpValueName, // value name瑕佽鍙栫殑閿悕縐?br> LPDWORD lpReserved, // reserved must be NULL. 蹇呴』鏄疦ULL
LPDWORD lpType, // type buffer錛岄敭綾誨瀷銆傛垜鏈甯哥敤REG_SZ,REG_DWORD
LPBYTE lpData, // data buffer銆備繚瀛樻煡璇㈢粨鏋滅殑緙撳啿鍖?br> LPDWORD lpcbData // size of data buffer銆傜紦鍐插尯澶у皬
);
濡傦細
// hKEY鏄笂闈㈡墦寮鏃跺緱鍒扮殑鎸囬拡銆?br> LPBYTE getValue = new BYTE[80];//寰楀埌鐨勯敭鍊?br> DWORD keyType = REG_SZ;//瀹氫箟鏁版嵁綾誨瀷
DWORD DataLen = 80;//瀹氫箟鏁版嵁闀垮害
CString strUser = _T("Version");//瑕佹煡璇㈢殑閿悕縐?br> long ret1=::RegQueryValueEx(hKEY,strUser,NULL,&keyType,getValue,&DataLen);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox("閿欒錛氭棤娉曟煡璇㈡湁鍏崇殑娉ㄥ唽琛ㄤ俊鎭?);
return;
}
3. 鍐欐敞鍐岃〃
LONG RegSetValueEx(
HKEY hKey, // handle to key銆傛墦寮娉ㄥ唽琛ㄧ殑鎸囬拡
LPCTSTR lpValueName, // value name 瑕佸啓鍏ョ殑閿?br> DWORD Reserved, // reserved 蹇呴』鏄?
DWORD dwType, // value type 鍐欏叆鍊肩被鍨?br> CONST BYTE *lpData, // value data 瑕佸啓鍏ョ殑鏁版嵁
DWORD cbData // size of value data 銆傛暟鎹甋IZE
);
濡傦細
// 鍐欐敞鍐岃〃銆備慨鏀筕ersion涓?.0.12
// 鍐欏叆CString綾誨瀷鐨勬暟鎹?br>CString strVersion = _T("Version");//瑕佸啓鍏ョ殑閿悕縐?br>LPCTSTR strVersionValue = "1.0.12";
long ret = ::RegSetValueEx(hKEY, strVersion, 0, REG_SZ, (const BYTE *) strVersionValue, strlen(strVersionValue)+1);
if(ret!=ERROR_SUCCESS)
{
AfxMessageBox("閿欒錛氭棤娉曟煡璇㈡湁鍏崇殑娉ㄥ唽琛ㄤ俊鎭?);
return;
}
[/code]
4. 鍒涘緩涓涓柊閿?br>LONG RegCreateKeyEx(
HKEY hKey, // handle to open key銆傛墦寮鐨勬敞鍐岃〃鎸囬拡
LPCTSTR lpSubKey, // subkey name銆傚瓙閿悕縐?br> DWORD Reserved, // reserved銆傚繀欏諱負0
LPTSTR lpClass, // class string銆傚凡緇忓瓨鍦ㄦ椂鐢紝涓鑸負NULL
DWORD dwOptions, // special options
//榛樿鍊糝EG_OPTION_VOLATILE錛屼繚瀛樺湪娉ㄥ唽琛紝涓嬫寮鏈轟粛鐒跺瓨鍦?br> //REG_OPTION_VOLATILE錛屼繚瀛樺湪鍐呭瓨
//REG_OPTION_BACKUP_RESTORE
REGSAM samDesired, // desired security access銆傛搷浣滄潈闄愩備竴鑸琄EY_ALL_ACCESS錛岄櫎闈炴湁鐗規畩闇瑕侊紝璇鋒煡闃匨SDN
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance銆傜戶鎵挎с備竴鑸負NULL
PHKEY phkResult, // key handle 銆傝繑鍥炶閿奸晣銆?br> LPDWORD lpdwDisposition // disposition value buffer
//REG_CREATED_NEW_KEY The key did not exist and was created.
//REG_OPENED_EXISTING_KEY The key existed and was simply opened without being changed.
);
5. 鍒犻櫎涓涓敭
LONG RegDeleteKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey // subkey name
);
6. 鍒犻櫎涓涓敭鍊?br>LONG RegDeleteValue(
HKEY hKey, // handle to key
LPCTSTR lpValueName // value name銆傚煎悕縐幫紝涓嶆槸鎵撳紑鐨勯偅涓寚閽堬紝鏄煡璇㈠埌鐨勬寚閽堬紝濡傛灉涓虹┖RegSetValueEx鍒涘緩鐨勫煎皢琚垹闄?br>);
7. 鍒鋒柊娉ㄥ唽琛?br>LONG RegFlushKey(
HKEY hKey // handle to key to write銆傚啓鍏ユ墍鏈夌殑鍊鹼紝鍦ㄧ粰瀹氱殑鎸囬拡
);
//榪欎釜鍑芥暟鏄皢鏀瑰彉鏁版嵁鐩存帴鍐欏埌紜洏涓婏紝涓嶈棰戠箒浣跨敤錛屼細褰卞搷鎬ц兘
8. 瀵煎叆涓涓敞鍐岃〃鏂囦歡鍒版寚瀹氱殑閿笅
LONG RegLoadKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey, // subkey name
LPCTSTR lpFile // registry file name
);
//娌℃湁鐢?/p>
9. 鍏抽棴鎵撳紑鐨勬敞鍐岃〃
LONG RegCloseKey(
HKEY hKey // handle to key to close
);
鍩烘湰鎬濊礬濡備笅:
(1)int(鐢ㄦ埛C鐩樺簭鍒楀彿^鐢ㄦ埛鍚峖1234567890123)鐢熸垚涓涓簭鍒楀彿N(鏄瓧絎︿覆CString綾誨瀷);
(2)緋葷粺媯嫻嬪埌浣犵殑杞歡榪樻病娉ㄥ唽灝辮嚜鍔ㄧ敓鎴愪竴涓枃浠?鏂囦歡淇濆瓨浜嗕綘杈撳叆鐨勭敤鎴峰悕鍜屽簭鍒楀彿 N.鍏徃浼氬彨浣燛Mail榪欎釜鏂囦歡鍒頒粬浠叕鍙擱偖綆?鍏徃鍐嶈繑鍥炰竴涓敞鍐岀爜鐨?
(3)濡傛灉鍙戝洖涓涓敞鍐岀爜,緋葷粺浼氬垽鏂?鐢ㄦ埛鍚峖鐢ㄦ埛C鐩樺簭鍒楀彿 =娉ㄥ唽鐮?/span>?鏉ヨ繘鍏ョ郴緇熺殑!娉ㄥ唽鎴?nbsp; 鍔熷悗鍐嶆妸鐢ㄦ埛鍚嶅拰娉ㄥ唽鐮佷繚瀛樺埌緋葷粺鏂囦歡(ini)涓笅嬈$櫥闄嗗氨浼氭嫻嬭繖涓枃浠?榪欐鏄垽鏂?nbsp; 鐢ㄦ埛鍚峖娉ㄥ唽鐮?鐢ㄦ埛C鐩樺簭鍒楀彿? 鏉ュ垽鏂繘鍏ョ郴緇熶簡!
鎺ㄧ悊:
浠庝笂寰楀埌涓夋潯鏈夌敤淇℃伅:
(1)鐢ㄦ埛鍚嶅浜庣敤鎴峰拰鍏徃鏉ヨ閮芥槸宸茬煡鐨?br>(2)int(鐢ㄦ埛C鐩樺簭鍒楀彿^1234567890123)=N(緇忚繃Format鍙樻垚瀛楃涓?
(3)鐢ㄦ埛鍚峖鐢ㄦ埛C鐩樺簭鍒楀彿=娉ㄥ唽鐮?/span>
浠?1)鍜屼笂闈㈢殑寮傛垨鎬ц川鎺ㄥ嚭: atoi(N)^1234567890123=鐢ㄦ埛C鐩樺簭鍒楀彿 (3)
浠?2)鍜屽紓鎴栨ц川鎺ㄥ嚭: 娉ㄥ唽鐮?鐢ㄦ埛C鐩樺簭鍒楀彿^鐢ㄦ埛鍚?/span> (4)
浠?3),(4)寮忓啀鎺ㄥ嚭
娉ㄥ唽鐮?atoi(N)^1234567890123^鐢ㄦ埛鍚?/span>
鐢ㄦ埛鍚嶅拰搴忓垪鍙種閮藉彂緇欎簡鍏徃,鍏徃灝辨槸鍒╃敤榪欐潯鍏徃榪涜姹傛敞鍐岀爜!
鐞嗚В浜嗚繖涓濊礬鍚庢垜灝卞啓浜嗕釜鐢熸垚娉ㄥ唽鐮佺殑紼嬪簭:
灝辨槸閫嗚繍綆楀惂浜?鍋囧鎴戞槸閭e叕鍙?鍙戝埌鎴戞墜涓婄殑淇℃伅宸茬粡鏈変袱涓簡,鐢ㄦ埛鍚嶅拰搴忓垪鍙種;榪欐牱,涓昏鎴戠敤atoi(搴忓垪鍙?^1234567890123灝卞彲浠ユ眰寰楁敞鍐岀爜浜?鍙笉榪囧湪鍋氱殑鏃跺欏氨鏄被鍨嬭漿鎹㈡湁鐐瑰鏉傚惂浜?!
涓轟簡渚夸簬澶嶄範鎶婁唬鐮佽創鍑烘潵:
LPCTSTR lpRootPathName="C:\\";
LPTSTR lpVolumeNameBuffer=new char[12];
DWORD nVolumnNameSize=12;
DWORD MaximumComponentLength;
DWORD FileSystemFlags;
LPTSTR lpFileSystemNameBuffer=new char[10];
DWORD FileSystemNameLength=12;
GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,nVolumnNameSize,&m_VolumnSerialNumber,&MaximumComponentLength,&FileSystemFlags,lpFileSystemNameBuffer,FileSystemNameLength);
delete(lpVolumeNameBuffer);
delete(lpFileSystemNameBuffer);
涓婇潰灝辨槸灝咰鐩樺簭鍒楀彿鏀懼埌DWORD綾誨瀷鐨刴_VolumnSerialNumber涓?
sSerialNumber.Format("%d",m_VolumnSerialNumber^1234567890123);
鐢熸垚鐨勫簭鍒楀彿灝變繚瀛樺湪sSerialNumber涓?
int(鐢ㄦ埛C鐩樺簭鍒楀彿^1234567890123)=N宸茬粡瀹屾垚!
涓嬮潰鏄?鐢ㄦ埛鍚峖鐢ㄦ埛C鐩樺簭鍒楀彿=娉ㄥ唽鐮?br>CString sName,sNameCode,sCode;
this->m_EdtUserName.GetWindowText(sName);
char * cNameCode=sName.GetBuffer(sName.GetLength());
DWORD dNameCode=*cNameCode;
sCode.Format("%d",m_VolumnSerialNumber^dNameCode);
sCode灝變繚瀛樹簡娉ㄥ唽鐮?
| BOOL WritePrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName ); |
| CString strName,strTemp; int nAge; strName="寮犱笁"; nAge=12; ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini"); |
| strTemp.Format("%d",nAge); ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini"); |
| DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName ); |
| CString strStudName; int nStudAge; GetPrivateProfileString("StudentInfo","Name","榛樿濮撳悕",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini"); |
| UINT GetPrivateProfileInt( LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName ); |
| nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini"); |
| CString strTemp,strTempA; int i; int nCount=6; file://鍏辨湁6涓枃浠跺悕闇瑕佷繚瀛?br>for(i=0;i {strTemp.Format("%d",i); strTempA=鏂囦歡鍚? file://鏂囦歡鍚嶅彲浠ヤ粠鏁扮粍,鍒楄〃妗嗙瓑澶勫彇寰? ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA, "c:\\usefile\\usefile.ini"); } strTemp.Format("%d",nCount); ::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini"); file://灝嗘枃浠舵繪暟鍐欏叆,浠ヤ究璇誨嚭. |
| nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini"); for(i=0;i {strTemp.Format("%d",i); strTemp="FileName"+strTemp; ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini"); file://浣跨敤strTempA涓殑鍐呭. } |
PostMessage灝嗘秷鎭疻M_QUIT鍙戦佸埌娑堟伅闃熷垪涓?鐢變簬PostMessage鐨勭珛鍗寵繑鍥?鍗崇粨鏉?灝辨墽琛屼笅涓鍙ヨ鍙ョ粨鏉熸暣涓▼搴?娑堟伅榪樻寕鍦ㄦ秷鎭槦鍒椾腑鏈鐞嗘晠鍑洪敊!!
[涓浜涘皬蹇冨緱]
渚?
CFileDialog GetFile(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*||");
CFileDialog GetFile(鎵撳紑鏂囦歡瀵硅瘽妗?TRUE),鎵╁睍鍚?NULL),鏂囦歡鍚?NULL),椋庢牸-鏂囦歡蹇呴』瀛樺湪(OFN_FILEMUSTEXIST),鏌ョ湅鏂囦歡綾誨瀷-EXCEL鏂囦歡,鎵鏈夋枃浠?Microsoft Excel(*.xls)|*.xls|All Files(*.*)|*.*||);
椋庢牸鐨勫畯瀹氫箟
#define OFN_READONLY 0x00000001
#define OFN_OVERWRITEPROMPT 0x00000002
#define OFN_HIDEREADONLY 0x00000004
#define OFN_NOCHANGEDIR 0x00000008
#define OFN_SHOWHELP 0x00000010
#define OFN_ENABLEHOOK 0x00000020
#define OFN_ENABLETEMPLATE 0x00000040
#define OFN_ENABLETEMPLATEHANDLE 0x00000080
#define OFN_NOVALIDATE 0x00000100
#define OFN_ALLOWMULTISELECT 0x00000200
#define OFN_EXTENSIONDIFFERENT 0x00000400
#define OFN_PATHMUSTEXIST 0x00000800
#define OFN_FILEMUSTEXIST 0x00001000
#define OFN_CREATEPROMPT 0x00002000
#define OFN_SHAREAWARE 0x00004000
#define OFN_NOREADONLYRETURN 0x00008000
#define OFN_NOTESTFILECREATE 0x00010000
#define OFN_NONETWORKBUTTON 0x00020000
#define OFN_NOLONGNAMES 0x00040000 // force no long names for 4.x modules
#if(WINVER >= 0x0400)
#define OFN_EXPLORER 0x00080000 // new look commdlg
#define OFN_NODEREFERENCELINKS 0x00100000
#define OFN_LONGNAMES 0x00200000 // force long names for 3.x modules
#define OFN_ENABLEINCLUDENOTIFY 0x00400000 // send include message to callback
#define OFN_ENABLESIZING 0x00800000
#endif /* WINVER >= 0x0400 */
#if (_WIN32_WINNT >= 0x0500)
#define OFN_DONTADDTORECENT 0x02000000
#define OFN_FORCESHOWHIDDEN 0x10000000 // Show All files including System and hidden files
#endif // (_WIN32_WINNT >= 0x0500)
榪欎釜灝變笉瑙i噴浜?搴旇閮借兘鐪嬫噦鍚?/p>
闇瑕佹敞鎰忕殑鏄?鐢ㄤ簡CFileDialog涔嬪悗,浼氭妸紼嬪簭鐨勫綋鍓嶈礬寰勮緗垚閫変腑鏂囦歡鐨勮礬寰?br>鎵浠?濡傛灉紼嬪簭閲屾湁鐢ㄥ埌IO璁塊棶鎴栬呮暟鎹簱璁塊棶涔嬬被鐨勬湰鍦版搷浣滄椂,闇瑕佹敞鎰忎綘鐨勫綋鍓嶈礬寰?br>鐢ㄧ浉瀵硅礬寰勭殑璇濆氨涓嶆槸鍘熸潵浣犵殑紼嬪簭璺緞浜?鍒囪!
杞澆鑷?http://blog.csdn.net/beiouwolf/archive/2007/04/09/1557219.aspx
(2)鐒跺悗鎴戜滑瑕佸仛鐨勬槸鐪嬬湅鍔犺澆浣嶅浘鐨勫浘鐗囧ぇ灝?鎷変竴涓殢渚垮ぇ灝忕殑"鍥懼儚"鎺т歡,鍙沖嚮灞炴?鍦?br> "甯歌"灞炴ч〉鐨?綾誨瀷"涓夋嫨"浣嶅浘";鐒跺悗"鍥懼儚"閫夋嫨浣犺鍔犺澆鐨勪綅鍥綢D(榪欎釜浣嶅浘璧勬簮浜?
鍏堟彃鍏ュ埌宸ョ▼涓?,鐒跺悗鍏抽棴灞炴у璇濇,灝卞彲浠ュ湪鏈鍙充笅瑙掍腑鏄劇ず浣犵殑鍥劇墖澶у皬浜?
(3)鍥犱負榪欐牱娌″姙娉曡皟鏁村浘鐗囪鐩栨暣涓璇濇,鎴戝氨鎶婅繖涓浘鐗囨帶浠跺垹闄ゆ帀,鍐嶄簨鍏堟妸瀵硅瘽妗嗚皟
鏁村ぇ灝忓埌鍒氬垰鍥劇墖鐨勫ぇ灝?璋冩暣鐨勬柟娉曟槸杈規嫋杈圭湅鏈鍙充笅鏂圭殑鏄劇ず,璋冩暣鍒版槸鍥劇墖鐨勫ぇ灝忎負
姝?濂藉暒,瀵硅瘽妗嗚皟鏁村悗,鎴戞媺鍑轟竴涓?鍥劇墖"鎺т歡,娉ㄦ剰,榪欐鎴戜滑瑕佷粠瀵硅瘽妗嗙殑鏈宸︿笂瑙掍竴
鐩存媺鍒板璇濇鐨勬渶鍙充笅瑙掓墠琛?榪欐墠鑳界‘淇濆浘鐗囨暣涓鐩?鎷夊嚭鏉ュ悗,灝辨寜鐓у垰鍒氱殑鍋氭硶鎶?nbsp;
浣嶅浘鍔犺澆榪涙潵,鐪嬬湅鏁堟灉!
鏉ヨ璇村厛寮瑰嚭鍚庢秷澶辯殑瀹炵幇,涓鴻璇濇鍒涘緩涓涓柊綾?涓鴻繖涓被娣誨姞OnInitDialog()鍑芥暟
鍜孫nTimer()鍑芥暟,浠g爜濡備笅:
void CDBegin::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent);
this->KillTimer(1);
this->OnCancel();
//涓嬮潰鏄璇濇娑堝け鍚庤鍋氱殑宸ヤ綔!
}
BOOL CDBegin::OnInitDialog()
{
CDialog::OnInitDialog();
this->SetTimer(1,1400,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
鏈鍚庡湪璋冪敤姝ゅ璇濇鐨勭被涓坊鍔犲ご鏂囦歡鍗沖彲!!(璁板緱瑕佹坊鍔?
鈶犵敤緇樺浘宸ュ叿錛堟垜鐢ㄧ殑鏄疐ireworks錛夊埗浣滀笁寮?4浣嶄綅鍥俱?/font>鍏朵腑錛?/p>
30.bmp涓哄伐鍏峰彲鐢ㄦ椂鏄劇ず鐨勪綅鍥撅細
![]()
31.bmp涓哄伐鍏蜂笉鍙敤錛堝彉鐏幫級鏃舵樉紺虹殑浣嶅浘錛?/p>
![]()
32.bmp涓洪紶鏍囪繘鍏ュ伐鍏鋒寜閽椂鏄劇ず鐨勪綅鍥撅細
![]()
榪欓噷錛屾瘡寮犱綅鍥句腑鎸夐挳鐨勪釜鏁板拰澶у皬鍙牴鎹疄闄呭簲鐢ㄨ繘琛屼慨鏀癸紝鏈緥涓紝姣忓紶浣嶅浘鏈?4涓寜閽紝姣忎釜鎸夐挳澶у皬涓?0×20銆?/p>
榪欎釜鍒朵綔榪囩▼鏄瘮杈冪箒鐞愮殑錛岄鍏堟垜鎶婃壘鏉ョ殑灝忓浘鐗囪漿鎹㈡垚24浣嶄綅鍥撅紝鍦‵ireworks涓嬫妸瀹冭漿鎹負20×20鐨勫ぇ灝忓悗淇濆瓨錛屽啀鐢‵ireworks鎶婂畠杞崲涓虹伆鑹蹭綅鍥懼拰甯﹁竟妗嗙殑浣嶅浘騫跺垎鍒繚瀛樸傜劧鍚庡啀鎶婁笁緇勫皬鍥劇墖鍒嗗埆鎷兼帴璧鋒潵灝辮浜嗐?/p>
鈶℃妸涓変釜浣嶅浘瀵煎叆璧勬簮錛堜綔涓築itmap璧勬簮錛?/font>錛屽敖綆″湪VC++涓嬩笉鑳芥樉紺哄拰緙栬緫錛屼絾浣跨敤涓婃病鏈夐棶棰樸傛妸涓変釜浣嶅浘鐨処D渚濇鏀逛負錛?br>IDB_TOOLBARCOLOR銆両DB_TOOLBARDISABLE銆両DB_TOOLBARHOT
鈶㈠湪璧勬簮鐨勫伐鍏鋒爮欏圭洰涓坊鍔犱竴涓柊鐨勫伐鍏鋒爮錛堝鍥撅級錛孖D鏀逛負IDR_TOOLBAR錛屽伐鍏鋒寜閽殑瀹藉害鍜岄珮搴﹂兘鏀逛負20銆傚湪涓婇潰渚濇娣誨姞14涓寜閽茍鍒嗗ソ緇勶紝鎸夐挳涓婄殑鍐呭鏃犲叧绱ц錛屽彧瑕佷笉鏄┖鐨勫氨琛屼簡銆傚垹闄ょ郴緇熷師鏉ョ殑宸ュ叿鏍廔DR_MAINFRAME銆?/p>
![]()
榪欎釜宸ュ叿鏍忓湪鏄劇ず鏃訛紝鎴戜滑浼氱敤涓婇潰鐨勪綅鍥炬浛鎹㈠悇鎸夐挳銆?/p>
鈶e湪MainFrm.h涓畾涔変笁涓綅鍥懼垪琛ㄥ璞″拰涓涓嚱鏁板畾涔夛細
| MainFrm.h錛?/span> CImageList m_imageToolBar; CImageList m_imageToolBarDisable; CImageList m_imageToolBarHot; void InitToolBar(); |
鈶ゅ湪MainFrm.cpp涓慨鏀瑰伐鍏鋒爮鐨勮緗儴鍒嗭細
| MainFrm.cpp錛?/span> if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar( IDR_TOOLBAR )) //鎸囧畾宸ュ叿鏍廔D鍙?/span> { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } InitToolBar(); //璁劇疆鐪熷僵宸ュ叿鏍?/font> |
榪欓噷瑕佹妸鍘熷伐鍏鋒爮鐨処D錛圛DR_MAINFRAME錛変慨鏀逛負鏂板伐鍏鋒爮鐨処D錛圛DR_TOOLBAR錛夛紝鍐嶈皟鐢ㄥ嚱鏁癐nitToolBar()璁劇疆鏂板伐鍏鋒爮銆?/p>
鈶ユ坊鍔犺緗伐鍏鋒爮鐨勫嚱鏁癐nitToolBar()錛?/p>
| void CMainFrame::InitToolBar() { CBitmap bm; //媧誨姩鐨勫伐鍏?/span> m_imageToolBar.Create( 20, 20, TRUE | ILC_COLOR24, 11, 0 ); bm.LoadBitmap( IDB_TOOLBARCOLOR ); m_imageToolBar.Add( &bm,(CBitmap*)NULL ); bm.Detach(); m_wndToolBar.GetToolBarCtrl().SetImageList( &m_imageToolBar ); //紱佹鐨勫伐鍏?/span> m_imageToolBarDisable.Create( 20, 20, TRUE | ILC_COLOR24, 11, 0 ); bm.LoadBitmap( IDB_TOOLBARDISABLE ); m_imageToolBarDisable.Add( &bm,(CBitmap*)NULL ); bm.Detach(); m_wndToolBar.GetToolBarCtrl().SetDisabledImageList( &m_imageToolBarDisable ); //褰撳墠鐨勫伐鍏?/span> m_imageToolBarHot.Create( 20, 20, TRUE | ILC_COLOR24, 11, 0 ); bm.LoadBitmap( IDB_TOOLBARHOT ); m_imageToolBarHot.Add( &bm,(CBitmap*)NULL ); bm.Detach(); m_wndToolBar.GetToolBarCtrl().SetHotImageList( &m_imageToolBarHot ); } |
鍏朵腑鍦–reate()鍑芥暟涓殑鍙傛暟渚濇涓烘寜閽搴︺侀珮搴︺?4浣嶄綅鍥懼拰鎸夐挳涓暟銆?/p>
榪欐牱涓涓敤24浣嶄綅鍥劇粍鎴愮殑鐪熷僵宸ュ叿鏍忓氨鍋氬ソ浜嗭紝濡傛灉浣犵殑緇樺浘鑳藉姏寰堝己錛屽彲浠ヤ慨鏀?2.bmp錛屼嬌鎸夐挳鍏鋒湁寰堝ソ鐨勫姩鎰熴傝嚦浜庡悇鎸夐挳鐨勫搷搴旀柟娉曚笌鏅氬伐鍏鋒爮鏄竴鏍風殑銆?/p>
紺轟緥紼嬪簭鐣岄潰錛?br>
杞澆鑷?http://www.bttc.cn/jsj/Html/vc/wen/vcwen08.htm
瀹㈡埛鍧愭爣錛氭槸鎸囧湪瀹㈡埛鍖虹殑鍧愭爣緋伙紝瀹㈡埛==浣狅紒鍝堝搱浣犲畾涔夌殑鍧愭爣緋匯傚彲浠ュ湪鐜版湁鐨勭粯鍥炬槧鍍忔ā寮忎笅閫氳繃鍧愭爣鍙樻崲鐨勫埌浣犵殑鍧愭爣緋匯傚浣犲湪涓涓槧鍍忔ā寮忓潗鏍囩郴涓嬬殑瀹㈡埛鍧愭爣鍘熺偣涓猴紙x錛寉錛夛紝閭e鎴峰潗鏍囩郴鐨勫潗鏍囨崲綆楁垚鏄犲儚妯″紡鍧愭爣灝辮浜嗭紝鏁板闂澶氳浜嗭紒鍝堝搱
鎰熻浣犲簲璇ラ棶閫昏緫鍧愭爣錛岄昏緫鍧愭爣涓嶄互灞忓箷鐨勫儚绱犱釜鏁頒負鏍囧噯銆傚湪灞忓箷涓婃槸澶氶暱瀹為檯灝辨槸澶氶暱銆侻M_LOMETRIC錛孧M_HIMETRIC絳夋槧鍍忔ā寮?
鏄犲儚璇嗗埆鐮?閫昏緫鍗曚綅 X鍜孻杞存鍚?
MM_TEXT 1 Pixels(鍍忕礌) 鍙充笅
MM_LOMETRIC 2 0.1mm 鍙充笂
MM_HIMETRIC 3 0.01mm 鍙充笂
MM_LONGLISH 4 0.1inch 鍙充笂
MM_HIENGLISH 5 0.01inch 鍙充笂
MM_TWIPS 6 1/1440inch 鍙充笂
MM_ISOTROPIC 7 Variable(x==y) 鍙樺寲鐨?
MM_ANISOTROPIC 8 Variable(x<>y) 鍙樺寲鐨?
鍘熺偣 閮藉湪宸︿笂瑙?/p>
浣嗘垜榪樻槸鏈夌偣涓嶇悊瑙?鏈鍚庢兂鑷繁鍐欎竴涓嚜瀹氫箟鐨勬秷鎭槧灝勭▼搴?铏界劧娌℃湁鍐欏嚭鏉?浣嗚繕鏄牴鎹繖浜涙潵鐚滆繖鏈哄埗鐨勬墽琛屽師鐞?榪欎簺
紼嬪簭閮芥槸涓婄綉鏌ュ埌鐨?
1.鍦ㄥご鏂囦歡鍔?
#define WM_MYMSG WM_USER+5//鑷畾涔変竴涓秷鎭?br> afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //鑷畾涔夋秷鎭殑澶勭悊鍑芥暟澹版槑
2.鍦ㄥ疄鐜版枃浠墮噷鍔?
ON_MESSAGE(WM_MYMSG, OnMyMessage)
//鍒╃敤ON_MESSAGE()瀹忓湪鑷畾涔夋秷鎭笌鍏跺鐞嗗嚱鏁伴棿寤虹珛鏄犲皠鍏崇郴
void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
//浠巐Param涓彇鍑篊String瀵硅薄鐨勬寚閽?騫跺皢瀛楃涓插唴瀹瑰湪IDC_MSGEDIT涓樉紺哄嚭鏉?br>{
CString *str;
str=(CString *)lParam;
SetDlgItemText(IDC_EDIT,*str);
}
void CModelessDlg::OnMsgBTN()
{
CString str= "鑷畾涔夋秷鎭瑙﹀彂浜嗭紒";
SendMessage(WM_MYMSG, 0, (LPARAM) &str);
//緇橫odelessDlg鑷繁鍙戜竴涓嚜瀹氫箟鐨勬秷鎭?br>}
鎴戠殑鐞嗚В:瀹冩槸鏍規嵁WM_MYMSG鏉ョ‘瀹氬弬鏁扮殑鍊肩殑(wParam,lParam),瀵逛簬姣忎竴涓秷鎭搷浣滃嚱鏁版潵紜畾浠栫殑鍙傛暟鐨?榪欓噷鐨凷endMessage鍑芥暟鎶奧M_MYMSG涓?wParam)0鍜?lParam)&str鎹嗙粦鍦ㄤ竴璧蜂簡,鎵浠?鍦ㄦ垜浠敤娑堟伅澶勭悊鍑芥暟OnMyMessage()鏃?鎴戜滑鑻ヨ鐢ㄥ埌鍙傛暟鏃舵垜浠氨鍙互鐢ㄨ繖涓や釜鍙傛暟,鍦ㄨ繖鐨勫弬鏁頒綅緗簲璇ヤ笉鍙互鏀瑰彉鐨勫惂,鎴戠寽鐨?
鍚庢潵鐪嬪埌涓鏈功錛岃嚜瀹氫箟鐨勬秷鎭嚱鏁頒竴鑸甫wParam,lParam榪欎袱涓弬鏁幫紝鍔犱笅闈竴孌典唬鐮佸鍔犵悊瑙o細
鏆傛椂鐞嗚В娑堟伅鍑芥暟鏄氳繃娑堟伅(WM_)瀵瑰簲鐨勫弬鏁?wParam.lParam).
BOOL CServerDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_SOCKET)
{
m_sockCur = pMsg->wParam;
m_nCurMsg = pMsg->lParam;
}
return CDialog::PreTranslateMessage(pMsg);
}
閫氳繃WM_SOCKET鍏寵仈 pMsg->wParam鍜宲Msg->lParam銆?br> 浣嗗綋鎴戝湪鐢╓SAAsyncSelect鍑芥暟鏃舵病鏈夌湅鍒頒粬鐨勬秷鎭弬鏁?鍋囧鍦ㄨ繖閲屾槸WM_SOCKET_READ)鏈笌涓浜涘弬鏁板叧鑱斿湪涓璧?鑰屼笖榪欎釜鍙傛暟榪樻槸鎴戣嚜瀹氫箟鐨?涓嶆槸緋葷粺鏈韓鏈夌殑,瀹冩槸鐢ㄦ潵鎺ユ敹娑堟伅鐨勫弬鏁扮殑,鍚庢潵鎴戞煡MSDN鏃跺彂鐜頒粬鐨勬弿榪版槸榪欐牱鐨?
When one of the nominated network events occurs on the specified socket s, the application's window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code. The error code be any error as defined in Winsock2.h.
Note Upon receipt of an event notification message, the WSAGetLastError function cannot be used to check the error value because the error value returned can differ from the value in the high word of lParam.
The error and event codes can be extracted from the lParam using the macros WSAGETSELECTERROR and WSAGETSELECTEVENT, defined in Winsock2.h as:
#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
褰撲竴涓寚瀹氱殑緗戠粶浜嬩歡鍙戠敓鍦ㄦ寚瀹氱殑濂楁帴瀛梥涓婃椂,搴旂敤紼嬪簭鐨勭獥鍙e彞鏌勬帴鏀跺埌涓鏉℃秷鎭痺Msg,wParam璇嗗埆緗戠粶浜嬩歡鍙戠敓鍦ㄥ摢涓涓鎺ュ瓧涓?lParam鐨勪綆瀛楁鍒欐寚瀹氬彂鐢熺殑緗戠粶浜嬩歡,楂樺瓧孌靛寘鎷換鎰忕殑閿欒浠g爜,閿欒浠g爜鍦╓insock2.h鏂囦歡涓畾涔?
榪欎簨浠跺拰閿欒鍙互浠巐Param閫氳繃璋冪敤瀹廤SAGETSELECTERROR 鍜?WSAGETSELECTEVENT鎻愬彇,鍦╓insock2.h鏂囦歡涓畾涔変負:
#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
鍙互鐪嬪嚭WSAAsyncSelect鏀跺埌鐨勫弬鏁拌繕鏄湪鍏跺畠鍦版柟浣滆繃鍏寵仈鐨?涓嶇劧瀹冧篃涓嶄細鏈夊?wParam,lParam),榪欐槸鎴戠殑鎺ㄧ悊,鏈瘉瀹?
typedef UINT WPARAM;(wParam鐨勭被鍨嬶紝w琛ㄧずWORD)
typedef LONG LPARAM;(lParam鐨勭被鍨?l琛ㄧずLONG)
瀹炵幇鏂囦歡:
#include "stdafx.h"http://娉ㄦ剰涔熻鍔犺繖涓?br>#include "Security.h"
unsigned int HashOf(CString Str)
{
int i, key;
key = 0;
for(i = 0; i < Str.GetLength(); i++)
{
key = ((key << 2) | (key >> 30))^(Str.GetAt(i));
}
return key;
};
//鍔犲瘑
CString Encrypt(CString Str)
{
return Str;
}
//瑙e瘑
CString UnEncrypt(CString Str)
{
return Str;
}
鍒涘緩涔嬪悗,璁板緱鍦ㄨ鐢ㄥ埌榪欎簺鍑芥暟鐨勬枃浠朵腑鍖呭惈榪欎簺鏂囦歡.