锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎴戜滑鍦ㄤ嬌鐢–uteFtp鎴栬匩etAnt絳夊伐鍏風(fēng)殑鏃跺欙紝涓鑸兘浼?xì)琚叾澶嶆潅鐨勭晫闈㈡墍鍚稿紩錛屽湪榪欎簺鐣岄潰涓獥鍙h鍒嗗壊涓鴻嫢騫茬殑鍖哄煙錛岀湡姝e仛鍒頒簡(jiǎn)紿楀彛鐨勪換鎰忓垎鍓層?閭d箞鎴戜滑鑷繁濡備綍鍒涘緩綾諱技鐨勭晫闈紝涔熷疄鐜扮獥鍙g殑浠繪剰鐨勫垎鍓插憿 錛熷湪VC6.0涓繖灝遍渶瑕佷嬌鐢ㄥ埌CSplitterWnd綾匯侰SplitterWnd鐪嬩笂鍘誨儚鏄竴縐嶇壒孌婄殑妗嗘灦紿楀彛錛屾瘡涓獥鍙i兘琚浉鍚岀殑鎴栬呬笉鍚岀殑瑙嗗浘鎵濉厖銆傚綋紿楀彛琚垏鍒嗗悗鐢ㄦ埛鍙互浣跨敤榧犳爣縐誨姩鍒囧垎鏉℃潵璋冩暣紿楀彛鐨勭浉瀵瑰昂瀵搞傝櫧鐒禫C6.0鏀寔浠嶢ppWizard涓垱寤哄垎鍓茬獥鍙o紝浣嗘槸鑷姩鍔犲叆鐨勫垎鍓叉潯鎬繪槸涓嶈兘璁╂垜浠弧鎰忥紝鍥犳鎴戜滑榪樻槸閫氳繃鎵嬪伐澧炲姞浠g爜鏉ョ啛鎮(zhèn)夎繖涓被銆?
CSplitterWnd鐨勬瀯閫犲嚱鏁頒富瑕佸寘鎷笅闈笁涓?
BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle,UINT nID);鍔熻兘鎻忚堪錛氳鍑芥暟鐢ㄦ潵鍒涘緩鍔ㄦ佸垏鍒嗙獥鍙c?鍙傛暟鍚箟錛歱ParentWnd 鍒囧垎紿楀彛鐨勭埗妗嗘灦紿楀彛銆?nMaxRows,nMaxCols鏄垱寤虹殑鏈澶х殑鍒楁暟鍜岃鏁般?sizeMin鏄獥鏍肩殑鐜板疄澶у皬銆?pContext 澶у鏁版儏鍐典笅浼犵粰鐖剁獥鍙c?nID鏄瓧紿楀彛鐨処D鍙?
BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle,UINT nID)鍔熻兘鎻忚堪錛氱敤鏉ュ垱寤哄垏鍒嗙獥鍙c?鍙傛暟鍚箟鍚屼笂銆?
BOOL CreateView (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext);鍔熻兘鎻忚堪錛氫負(fù)闈?rùn)鎬佸垏鍒嗙殑紿楀彛鐨勭綉鏍煎~鍏呰鍥俱傚湪灝嗚鍥句簬鍒囧垎紿楀彛鑱旂郴鍦ㄤ竴璧風(fēng)殑鏃跺欏繀 欏誨厛灝嗗垏鍒嗙獥鍙e垱寤哄ソ銆?
DWORD dwCreateStyle = dwStyle & ~(WS_HSCROLL|WS_VSCROLL); if (afxData.bWin4) dwCreateStyle &= ~WS_BORDER; //create with the same wnd-class as MDI-Frame (no erase bkgnd) if (!CreateEx(0, _afxWndMDIFrame, NULL, dwCreateStyle, 0, 0, 0, 0,pParentWnd->m_hWnd, (HMENU)nID, NULL)) return FALSE; // create invisible
m_wndSplitter.Create(this,2,2,CSize(100,100),pContext);
CCuteFTPView | |
CView2 | CView3 |
CView4 |
鍒涘緩姝ラ錛?
鈻?鍦ㄥ垱寤轟箣鍓嶆垜浠繀欏誨厛鐢ˋppWizard鐢熸垚鍗曟枃妗uteFTP錛岀敓鎴愮殑瑙嗙被涓?CCuteFTPView.鍚屾椂鍦ㄥ鍔犱笁涓綾繪垨鑰呬粠瑙嗙被緇ф壙鑰屾潵鐨勬淳鐢熺被CView2,CView3 CView4.
鈻?澧炲姞鎴愬憳錛?/b>
鍦–mainfrm.h涓垜浠皢澧炲姞涓嬮潰鐨勪唬鐮侊細(xì)
CSplitterWnd wndSplitter1; CSplitterWnd wndSplitter2;鈻?閲嶈澆CMainFrame::OnCreateClient()鍑芥暟錛?/b>
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { //鍒涘緩涓涓潤(rùn)鎬佸垎鏍忕獥鍙o紝鍒嗕負(fù)涓夎涓鍒? if(m_wndSplitter1.CreateStatic(this,3,1)==NULL) return FALSE; //灝咰CuteFTPView榪炴帴鍒?琛?鍒楃獥鏍間笂 m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100), pContext); m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext); //灝咰View4榪炴帴鍒?琛?鍒? if(m_wndSplitter2.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE, m_wndSplitter.IdFromRowCol(1, 0))==NULL) return FALSE; //灝嗙1琛?鍒楀啀鍒嗗紑1琛?鍒? //灝咰View2綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒? m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext); //灝咰View3綾昏繛鎺ュ埌絎簩涓垎鏍忓璞$殑0琛?鍒? m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext); return TRUE; }2.3瀹炵幇鍚勪釜鍒嗗壊鍖哄煙鐨勯氫俊
AddDocTemplate (new CMultiDocTemplate(IDR_VIEW2TYPE, RUNTIME_CLASS(CMainDoc), RUNTIME_CLASS(CMDIChildWnd), RUNTIME_CLASS(CView2)));鎴戜滑鐜板湪鏉ュ疄鐜癈CuteFTPView涓嶤View2涔嬮棿鐨勯氫俊銆傜敱浜庤窡鏂囨。綾葷浉榪炵殑瑙嗗浘綾?鏄笉鑳藉畨鍏ㄧ殑涓庨櫎鏂囨。綾諱箣澶栫殑鍏朵綑鐨勮鍥劇被閫氫俊鐨勩傚洜姝ゆ垜浠彧鑳借浠栦滑閮戒笌鏂囨。 綾婚氫俊銆傚湪鏂囨。涓垜浠緗浉搴旂殑鎸囬拡浠ョ敤鏉ヨ幏鐨勫悇涓鍥俱傛垜浠噸杞?CCuteFTPView::OnOpenDocument()鍑芥暟錛?
CCuteFTPView* pCuteFTPView;榪欐牱鎴戜滑鍦ㄦ枃妗g被涓氨鑾風(fēng)殑浜?jiǎn)璺熷畠鐩笜q炵殑鎵鏈夌殑瑙嗗浘鐨勬寚閽堛?br />濡傛灉闇瑕佸湪 CCuteFTPView涓皟鐢–View2涓殑涓涓柟娉旸oIt()鍒欎唬鐮佸涓嬶細(xì)
CView2* pView2; POSITION pos; CView* pView; while(pos!=NULL) { pView=GetNextView(pos); if(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) pCuteFTPView=(CCuteFTPView*)pView; else(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) pView2=(CView2*)pView; }
CCuteFTPDoc* pDoc=GetDocument();
CView2* pView2=pDoc->pView3;
pView3.DoIt();
CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); CCuteFTPDoc* Doc=(CCuteFTPDoc*)MainFrame->GetActiveDocument(); if(Doc!=NULL) Doc->DoIt(); CCuteFTPDoc涓殑鐩稿簲鐨勫鐞嗗嚱鏁癉oIt()浠g爜濡備笅錛? CView2* pView2; POSITION pos; CView* pView; while(pos!=NULL) { pView=GetNextView(pos); if(pView->IsKindOf(RUNTIME_CLASS(CView2))==NULL) pView2=(CView2*)pView; } pView2->DoIt();鈻?b>鏃犳枃妗e叧鑱旇鍥句箣闂寸殑閫氫俊
CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); CView4* View4=(CView4*)MainFrame->m_wndSplitter1.GetPane(2,0); View4->DoIt();
virtual void StartTracking(int ht); virtual CWnd* GetActivePane(int* pRow = NULL, int* pCol = NULL); virtual void SetActivePane( int row, int col, CWnd* pWnd = NULL ); virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult ); virtual BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult );鍏蜂綋瀹炵幇濡備笅錛屽疄鐜頒腑鎴戝皢緇欏嚭鍘熸湁浠g爜鐨勪富瑕侀儴鍒嗕互鍙?qiáng)淇敼鍚庣殑浠g爜浠ヤ綔瀵规瘮銆?br />鍦╟pp鏂囦歡涓姞鍏ヤ笅闈㈢殑鏋氫婦綾誨瀷銆?
enum HitTestValue { noHit = 0,//琛ㄧず娌℃湁閫変腑浠諱綍瀵硅薄 vSplitterBox = 1, hSplitterBox = 2, bothSplitterBox = 3, vSplitterBar1 = 101,//浠h〃鍚勪釜鏂瑰悜鐨勬按騫沖垎鍓叉潯 vSplitterBar15 = 115, hSplitterBar1 = 201,//浠h〃鍨傜洿鏂瑰悜鐨勫悇涓垎鍓叉潯 hSplitterBar15 = 215, splitterIntersection1 = 301,//浠h〃鍚勪釜浜ゅ弶鐐? splitterIntersection225 = 525 };榪欐牱鎴戜滑灝卞彲浠ュ湪瀵硅瘽妗嗕腑浣跨敤CxSplitterWnd綾諱簡(jiǎn)銆?
CWnd* CxSplitterWnd::GetActivePane(int* pRow, int* pCol) { ASSERT_VALID(this); //鑾峰緱褰撳墠鐨勮幏寰楃劍鐐圭殑紿楀彛 //涓嬮潰娉ㄩ噴綺椾綋鐨勬槸鍘熸湁鐨勪唬鐮佺殑涓昏閮ㄥ垎銆? // CWnd* pView = NULL; //CFrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pView = pFrameWnd->GetActiveView(); //if (pView == NULL) // pView = GetFocus(); CWnd* pView = GetFocus(); if (pView != NULL && !IsChildPane(pView, pRow, pCol)) pView = NULL; return pView; } void CxSplitterWnd::SetActivePane( int row, int col, CWnd* pWnd) { CWnd* pPane = pWnd == NULL ? GetPane(row, col) : pWnd; //涓嬮潰鍔犳敞閲婄矖浣撶殑鏄師鏈変唬鐮佺殑涓昏閮ㄥ垎銆? //FrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pFrameWnd->SetActiveView((CView*)pPane); pPane->SetFocus();//淇敼鍚庣殑璇彞 } void CxSplitterWnd::StartTracking(int ht) { ASSERT_VALID(this); if (ht == noHit) return; // GetHitRect will restrict ''''m_rectLimit'''' as appropriate GetInsideRect(m_rectLimit); if (ht >= splitterIntersection1 && ht <= splitterIntersection225) { // split two directions (two tracking rectangles) int row = (ht - splitterIntersection1) / 15; int col = (ht - splitterIntersection1) % 15; GetHitRect(row + vSplitterBar1, m_rectTracker); int yTrackOffset = m_ptTrackOffset.y; m_bTracking2 = TRUE; GetHitRect(col + hSplitterBar1, m_rectTracker2); m_ptTrackOffset.y = yTrackOffset; } else if (ht == bothSplitterBox) { // hit on splitter boxes (for keyboard) GetHitRect(vSplitterBox, m_rectTracker); int yTrackOffset = m_ptTrackOffset.y; m_bTracking2 = TRUE; GetHitRect(hSplitterBox, m_rectTracker2); m_ptTrackOffset.y = yTrackOffset; // center it m_rectTracker.OffsetRect(0, m_rectLimit.Height()/2); m_rectTracker2.OffsetRect(m_rectLimit.Width()/2, 0); } else { // only hit one bar GetHitRect(ht, m_rectTracker); } //涓嬮潰鍔犳敞閲婄殑灝嗕粠紼嬪簭涓垹鍘匯? //CView* pView = (CView*)GetActivePane(); //if (pView != NULL && pView->IsKindOf(RUNTIME_CLASS(CView))) //{ // ASSERT_VALID(pView); // CFrameWnd* pFrameWnd = GetParentFrame(); //ASSERT_VALID(pFrameWnd); //pView->OnActivateFrame(WA_INACTIVE, pFrameWnd); // } // steal focus and capture SetCapture(); SetFocus(); // make sure no updates are pending RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_UPDATENOW); // set tracking state and appropriate cursor m_bTracking = TRUE; OnInvertTracker(m_rectTracker); if (m_bTracking2) OnInvertTracker(m_rectTracker2); m_htTrack = ht; SetSplitCursor(ht); } BOOL CxSplitterWnd::OnCommand(WPARAM wParam, LPARAM lParam) { if (CWnd::OnCommand(wParam, lParam)) return TRUE; //涓嬮潰綺椾綋鐨勬槸鍘熺▼搴忕殑璇彞 //return GetParentFrame()->SendMessage(WM_COMMAND, wParam, lParam); return GetParent()->SendMessage(WM_COMMAND, wParam, lParam); } BOOL CxSplitterWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult ) { if (CWnd::OnNotify(wParam, lParam, pResult)) return TRUE; //涓嬮潰綺椾綋鐨勬槸婧愮▼搴忕殑璇彞 //*pResult = GetParentFrame()->SendMessage(WM_NOTIFY, wParam, lParam); *pResult = GetParent()->SendMessage(WM_NOTIFY, wParam, lParam); return TRUE; } BOOL CxSplitterWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // The code line below is necessary if using CxSplitterWnd in a regular dll // AFX_MANAGE_STATE(AfxGetStaticModuleState()); return CWnd::OnWndMsg(message, wParam, lParam, pResult); }
void CXXSplitterWnd::OnLButtonDown(UINT nFlags,CPoint point)鍏朵綑鐨勫鐞嗘柟娉曠被浼箋?
{ CWnd::OnLButtonDown(nFlags,point); }
void CSplitterWndEx::OnDrawSplitter(CDC *pDC, ESplitType nType, const CRect &rectArg) { if(pDC==NULL) { RedrawWindow(rectArg,NULL,RDW_INVALIDATE|RDW_NOCHILDREN); return; } ASSERT_VALID(pDC); CRect rc=rectArg; switch(nType) { case splitBorder: //閲嶇敾鍒嗗壊紿楀彛杈圭晫,浣夸箣涓虹孩鑹? pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); return; case splitBox: pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); rc.InflateRect(-CX_BORDER,-CY_BORDER); pDC->FillSolidRect(rc,RGB(0,0,0)); pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0)); return; case splitBar: //閲嶇敾鍒嗗壊鏉★紝浣夸箣涓虹豢鑹? pDC->FillSolidRect(rc,RGB(255,255,255)); rc.InflateRect(-5,-5); pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); return; default: ASSERT(FALSE); } pDC->FillSolidRect(rc,RGB(0,0,255)); } void CSplitterWndEx::OnInvertTracker(CRect &rect) { ASSERT_VALID(this); ASSERT(!rect.IsRectEmpty()); ASSERT((GetStyle()&WS_CLIPCHILDREN)==0); CRect rc=rect; rc.InflateRect(2,2); CDC* pDC=GetDC(); CBrush* pBrush=CDC::GetHalftoneBrush(); HBRUSH hOldBrush=NULL; if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject); pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS); if(hOldBrush!=NULL) SelectObject(pDC->m_hDC,hOldBrush); ReleaseDC(pDC); }
聽聽聽聽 ASSERT()琚祴璇曞畠鐨勫弬鏁幫紝鑻ュ弬鏁頒負(fù)0錛屽垯涓柇鎵ц騫舵墦鍗頒竴孌佃鏄庢秷鎭傚湪 Release 鐗堟湰鐨勭▼搴忎腑瀹冧笉璧蜂換浣曚綔鐢ㄣ侫SSERT()浣跨敤鐨勬椂鍊欏繀欏諱繚璇佸弬鏁拌〃杈懼紡涓笉鑳芥湁鍑芥暟璋冪敤錛堣瘧鑰呮敞錛欰SSERT()瀹忓湪 Release 鐗堟湰涓笉瀵硅〃杈懼紡姹傚鹼級(jí)錛屽洜姝ゅ浜庝換浣曟湁鍑芥暟璋冪敤鐨勫弬鏁拌〃杈懼紡錛屽簲璇ヤ嬌鐢ㄥ畯 VERIFY()錛屼互淇濊瘉琛ㄨ揪寮忎腑鐨勫嚱鏁拌皟鐢ㄥ湪 Release 鐗堟湰涓細(xì)琚紜眰鍊箋?/span>
鏂█(assertion)鐢ㄥ甫鏂█淇℃伅(紼嬪簭, 妯″潡, assertion琛?鐨勫璇濇鎵ц. 瀵硅瘽妗嗘湁3涓寜閽? "Break", "Repeat" ("Debug"), and "Continue" ("Ignore"). "Break" 緇撴潫紼嬪簭, "Continue" 蹇界暐鏂█, 鏈鏈夌敤鐨勬槸"Repeat"鎸夐挳. 鎸変笅瀹冨湪鏂█鐨勫湴鏂規(guī)墦寮婧愪唬鐮佺紪杈戝櫒. 鍦ㄨ繖閲屼綘鍙互嫻嬭瘯鎵鏈夌殑鍙橀噺鍊煎茍鏄庣櫧鍝噷鍑轟簡(jiǎn)闂銆?/span>
渚嬪錛欰SSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);
ASSERT鍦ㄦ墽琛岀畝鍗曢獙璇佹椂寰堟湁鐢紝浣嗗浜?span>C++瀵硅薄錛岀壒鍒槸鐢盋Object媧劇敓鐨勫璞★紝鍒欐湁鏇村ソ鐨勬柟娉旳SSERT_VALID鏉ュ疄鐜扮被浼兼搷浣溿備綔涓轟竴鑸鍒欙紝鎴戜滑搴斿湪寮濮嬩嬌鐢ㄦ瘡涓涓璞′箣鍓嶆鏌ユ暟鎹璇?
聽
ASSERT_VALID瀹忎嬌寰楀CObject鐨勬淳鐢熺被瀹炵幇璇ユ搷浣滈潪甯哥畝鍗曘?/font>
渚嬪錛欰SSERT_VALID(this);ASSERT_VALID(pView);
聽
VERIFY()
聽聽聽 VERIFY()鍜?span> ASSERT()寰堢浉浼鹼紝鍖哄埆鍦ㄤ簬鍦?Release 鐗堟湰涓畠浠嶇劧鏈夋晥錛堣瘧鑰呮敞錛氬師浣滆呭湪榪欓噷娌℃湁璁叉竻妤氾紝VERIFY()涓嶄細(xì)鎵撳嵃璇存槑錛屽彧鏄細(xì)瀵瑰弬鏁拌〃杈懼紡姹傚鹼級(jí)銆?
聽
TRACE()
聽 聽聽聽聽TRACE()鍩烘湰涓婂氨鏄嚱鏁?printf()鐨勪竴涓鍒跺搧錛屽敮涓鐨勫尯鍒槸瀹冩妸緇撴灉杈撳嚭鍒拌皟璇曠獥鍙c傚湪 Release 鐗堟湰涓紝瀹冧篃鏄棤鏁堢殑銆備竴鑸槸鐢═RACE0(),TRACE1(),TRACE2()鈥﹁屼笉鐢═RACE()銆?/font>
飩仿犺繖涓変釜瀹忓湪 Release 鐗堟湰涓兘涓嶄細(xì)浜х敓浠諱綍瀹炶川鎬х殑褰卞搷錛屽畠浠槸鍚﹁搗浣滅敤鍙栧喅浜庢槸鍚﹀畾涔変簡(jiǎn)棰勫畾涔変簡(jiǎn)瀹?_DEBUG銆傝繖鏄 Microsoft Visual C++ 鑰岃█錛屽湪鍏跺畠鐨勭紪璇戝櫒涓彲鑳藉叾瀹冧笉鍚岀殑瀹忋?/span>
聽
甯哥敤鐢ㄦ硶錛?/font>
聽
涓轟簡(jiǎn)鎺у埗浼犺繘鐨勬寚閽?
void SomeFun(SomeType* pPointer)
{
聽聽ASSERT(pPointer);
聽//some instructions.
}
聽
浣犲彲浠ュ湪"switch" 鍜?"if"鎿嶄綔涓崟鑾峰鎬殑鍊?br />渚嬪:
switch(nRGBColors){
聽 case nRed:聽聽 {//some instructions.} break;
聽 case nGreen: {//some instructions.} break;
聽 case nBlue:聽 {//some instructions.} break;
聽 default: ASSERT(0);聽聽聽 // we should have never come here!
}
if(nWaterTemp >=0 && nWaterTemp < 50){
聽 //some instructions.
}
else if(nWaterTemp >= 50 && nWaterTemp <= 100){
聽 //some instructions.
}
else{
聽 ASSERT(0);聽聽聽 // we should have never come here!
}
聽
瀵瑰肩殑鏂█:
ASSERT(nSomeValue >= MinValue and nSomeValue <= MaxValue);
ASSERT(nOtherValue != 0);
聽
鍙埍鐨?ASSERT 閿欒
ASSERT( m_MyWnd.Create() );
鍛? 榪欐槸涓涓彲鎬曠殑閿欒! 紼嬪簭鍦ㄨ皟璇曠増涓甯稿伐浣? 鍦ㄥ彂琛岀増涓笉宸ヤ綔. 璁頒綇: 榪欐槸涓涓湪鍙戣鐗堜腑灝嗚縐婚櫎鐨勫畯. 浠ヨ繖縐嶆柟娉曚綘鐨勭獥鍙e皢姘歌繙涓嶄細(xì)琚垱寤? 濡傛灉浣犵敤 MFC, 榪欐牱鍋?
VERIFY( m_MyWnd.Create() );
瀹冨湪璋冭瘯鐗堜腑鍍?/span> ASSERT 涓鏍峰茍涓斿湪鍙戣鐗堜腑鎵ц m_MyWnd.Create() 銆?/span>