孫鑫C視頻教程總結(jié)(內(nèi)功=算法數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)原理軟件工程英文)
《孫鑫C視頻教程總結(jié)(內(nèi)功=算法數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)原理軟件工程英文)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《孫鑫C視頻教程總結(jié)(內(nèi)功=算法數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)原理軟件工程英文)(21頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、一:Windows 程序運(yùn)行原理及程序編寫(xiě)流程(創(chuàng)建 窗口。回調(diào)函數(shù) 方法i int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow //主函數(shù) // handle to current instance // handle to previous instance // command line // show state ) WNDCLASS wndcls;// 倉(cāng) U建一個(gè)窗 口對(duì)象 wndcls.cbClsExtra=0;/
2、/窗口類(lèi)附力口字節(jié),為該類(lèi)窗口所共享。通常 0。 wndcls.cbWndExtra=0;//窗口附力口字節(jié)。通常設(shè)為 0。 wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);〃 背 樂(lè) wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);/光標(biāo) wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);〃 位圖(圖標(biāo)) wndcls.hInstance=hInstance; /8 前應(yīng)用程序事例句柄。 wndcls.lpfnWndProc=WinSunProc;//
3、窗口過(guò)程函數(shù)(回調(diào)函數(shù)) wndcls.lpszClassName=Weixin2003”;// 窗口名〃類(lèi)的名字 wndcls.lpszMenuName=NULL;// 菜單名 wndcls.style=CS_HREDRAW | CS_VREDRAW; 〃窗口 的類(lèi)型 RegisterClass(&wndcls);/外冊(cè)窗 口 HWND hwnd; hwnd=CreateWindow("Weixin2003", ”,WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInstance,NULL);// 定義窗口句柄并創(chuàng) 建窗口 ShowW
4、indow(hwnd,SW_SHOWNORMAL);// 顯示窗 口 UpdateWindow(hwnd);//更新窗 口 MSG msg;//定義消息對(duì)象 /*做消息循環(huán)*/while(GetMessage(&msg, //接收消息的窗口句柄。//從消息 隊(duì)列中取出一條消息 NULL, 〃消息標(biāo)識(shí)。 0,0))//做消息循環(huán) { TranslateMessage(&msg);處行消息(如鍵盤(pán)消息)轉(zhuǎn)換 DispatchMessage(&msg);分派消息到窗口的回調(diào)函數(shù)處理, } return 0; } 〃回調(diào)函數(shù)原形為 LRESULT CALLBACK Window
5、Proc(); LRESULT CALLBACK WinSunProc(//對(duì)消息的響應(yīng)函數(shù)(回調(diào)函數(shù)) HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ){ switch(uMsg){ case WM_CHAR:break; case WM_LBUTTONDOWN: MessageBox(hwnd,"mouse clicked","
6、weixin”,0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,,計(jì)算機(jī)編程語(yǔ)言培訓(xùn)",strlen("計(jì)算機(jī)編程語(yǔ)言 培訓(xùn)”)); ReleaseDC(hwnd,hdc); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); TextOut(hDC,0,0,"維新培訓(xùn)",strlen("維新培訓(xùn)")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES==MessageBox(
7、hwnd,”是否真的結(jié)束? ","weixin",MB_YESNO)) {DestroyWindow(hwnd);} break; case WM_DESTROY: PostQuitMessage(O); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } 總結(jié):創(chuàng)建一個(gè)完整的窗口需要經(jīng)過(guò)下面四個(gè)操作步驟: 一,設(shè)計(jì)一個(gè)窗口類(lèi);如: WNDCLASS wndcls; 二,注冊(cè)窗口類(lèi); 如:RegisterClass(&wndcls); 三,創(chuàng)建窗口; 如:CreateWindow(),CreateW
8、indowEX(); 四,顯示及更新窗口。如: ShowWindow(),UpdateWindow(); 二:VC++掌握的基礎(chǔ) ①使用VC編程除了良好的c基礎(chǔ)外還需要掌握兩方面: ②消息本身。不同消息所代表的用戶(hù)操作和應(yīng)用程序的狀態(tài)。 ③對(duì)于某個(gè)特定的消息來(lái)說(shuō),要讓 os執(zhí)行某個(gè)特定的功能去響應(yīng)消息。 二. 1消息的分類(lèi):標(biāo)準(zhǔn)消息,命令消息,通告消息。 [標(biāo)準(zhǔn)消息]:除WM_COMMAND 之外,所有以 WM_開(kāi)頭的消息。 [命令消息]:來(lái)自菜單、加速鍵或工具欄按鈕的消息。這類(lèi)消息都以 WM_COMMAND 呈現(xiàn)。 通過(guò)標(biāo)識(shí)(ID)來(lái)區(qū)分不同的命令消息;在 SDK中,通過(guò)消
9、息的wParam參數(shù) 識(shí)別。 [通告消息]:由控件產(chǎn)生的消息,如按鈕的單擊。 1)從CWnd派生的類(lèi),可以接收到[標(biāo)準(zhǔn)消息][命令消息]和[通告消息]。 2)從CCmdTarget派生的類(lèi),只能可以接收到[命令消息]和[通告消息]。 三:兩種函數(shù)調(diào)用約定(__stdcall和__cdecD #define CALLBACK __stdcall //__stdcall標(biāo)準(zhǔn)調(diào)用預(yù)定,是 PASCAL調(diào)用約定,象DELPHI使用的就是標(biāo)準(zhǔn) 調(diào)用約定 #define WINAPIV __cdecl // __cdecl是C語(yǔ)言形式的調(diào)用約定。 主要區(qū)別:函數(shù)參數(shù)傳遞順序 和 對(duì)堆棧的
10、消除上。 問(wèn)題:除了那些可變參數(shù)的函數(shù)調(diào)用外,其余的一般都是__stdcall約定。但C/C++ 編譯默然的是__cdecl約定。所以如果在VC等環(huán)境中調(diào)用_stdcall約定的函數(shù), 必須要在函數(shù)聲明的時(shí)加上 __stdcall修飾符,以便對(duì)這個(gè)函數(shù)的調(diào)用是使用 __stdcall約定(如使用 DELPHI編寫(xiě)的DLL時(shí)候)。 (VC 中可通過(guò)這途徑修改:project|settings..|c/c++|..) 四: 關(guān) 于 DC 句 柄 獲 取 (CpaintDC/CclientDC/CwindowDC 在創(chuàng)建時(shí)默認(rèn)) (調(diào)用這些函數(shù))a)使用BeginPaint(),EndPa
11、int()對(duì)。注意只能在響應(yīng)WM_PAINT 消息時(shí)使用。 b)使用GetDc(),ReleaseDC(M。注意他們不能在響應(yīng) WM_PAINT中使用。 MFC 中的運(yùn)用為① HDC hdc=::GetDc(m_hWnd);二ReleaseDC(m_hWnd,hdc);獲 得全局DC。 ② CDC *pDC=GetDC();ReleaseDC(pDC); ③ CClientDC dc(this);(自動(dòng)調(diào)用 GetDc(),ReleaseDC()); ④ CWindowDC dc(this);(自動(dòng)調(diào)用 GetDc(),ReleaseDC()); 五:MFC程序框架的剖析 ①尋找
12、 WinMain 人口: 路徑:visual c++安裝目錄下的: vc98|MFC|SRC|APPMODUL.CPP: 尋找 CWinApp 構(gòu)造函數(shù):MFC|SRC|APPCORE.CPP: ②MFC 程 序 框 架 主 路 線(xiàn): CTEApp theApp-> CWinApp::CWinApp()->_tWinMain(){// 進(jìn)入程->AfxEndDeferRegisterClass(LONG fToRegister)-> PreCreateWindow創(chuàng)建、顯示和更新窗口 ) pThread->Run(消息循 環(huán))-> PumpMessage(齦消息并處理) 類(lèi)的運(yùn)行順序?yàn)椋?/p>
13、C*APP->CmainFram->C*View->C*Doc 六:消息映射的三步驟: ①在頭文件中聲明消息響應(yīng)函數(shù)原型。如: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); ②在源文件中進(jìn)行消息映射。如: ON_WM_LBUTTONDOWN() ③源文件中進(jìn)行消息響應(yīng)函數(shù)的定義。 如:void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){} 七:使用畫(huà)筆、畫(huà)刷、字體的步驟: (包括設(shè)計(jì)繪圖 模式 SetROP2() ①CPen pen(PS_DOT,1,RG
14、B(0,255,0));胸造畫(huà)筆對(duì)象② CClientDC dc(this); ③ CPen *pOldPen=dc.SelectObject(&pen);//將畫(huà)筆選入 DC 后就可以作畫(huà)了 ④ dc.SelectObject(pOldPen); CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); 〃構(gòu)造透 明畫(huà)刷對(duì)象 FromHandle ()將對(duì)象句柄轉(zhuǎn)換為對(duì)象指針 GetStockObject(跟得一個(gè)以預(yù)定義 的畫(huà)筆、畫(huà)刷、字體的句柄. 類(lèi)為 Cpen Cbrush CFont
15、設(shè)計(jì)繪圖模式:dc.SetROP2(R2_BLACK);(查 MSDN). 八:創(chuàng)建插入符:CDC類(lèi)(文字等的輸出類(lèi)) CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);// 獲取當(dāng)前字體信 息的度量 CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret(); // void CreateCaret( CBitmap* pBitmap );〃創(chuàng)建位圖插入符 //static void PASCAL SetCaretPos( POINT point );/股計(jì)
16、插入符號(hào)的位置 九:創(chuàng)建路徑層: BOOL BeginPath( );//在這作圖定義路徑層剪切區(qū)域 BOOL EndPath(); BOOL SelectClipPath( int nMode );//調(diào)用這個(gè)函數(shù)來(lái)使當(dāng)前路徑層剪切區(qū)域與新 剪切區(qū)域進(jìn)行互操作。 應(yīng)用:當(dāng)作圖的時(shí)候,如果想要在整幅圖形其中的某個(gè)部分和其它部分有所區(qū)別, 我們可以把這部分圖形放到路徑層當(dāng)中,然后指定調(diào)用指定互操作模式調(diào)用 SelectClipPath( int nMode )函數(shù)來(lái)使路徑層和覆蓋在其上新繪圖剪切區(qū)域進(jìn)行互 操作,達(dá)到特殊效果。 十:設(shè)置定時(shí)器 ①SetTimer(1,100,NULL
17、);//放置定時(shí)1器并發(fā)送 WM_TIMER消息 ②作 WM_TIMER 消息響應(yīng)并對(duì) Void OnTimer(UINT nIDEvent)編寫(xiě)代碼。 十一:CMenu 類(lèi) CMenu類(lèi)重要函數(shù):CMenu*GetMenu得到窗口菜單欄對(duì)象指針。 CMenu二GetSubMenuK得指向彈出菜單對(duì)象指針 // SetMenu( CMenu* pMenu ) 設(shè)置新菜單或移除菜單 DrawMenuBar()// 重繪菜單 //其它菜單的功能設(shè)計(jì)用MSD隨函數(shù) 十二:創(chuàng)建自定義菜單 ①CMenu menu;// 定 義 為 局 部 對(duì) 象 ②menu.LoadMenu(IDR_
18、MAINFRAME);③SetMenu(&menu); ④menu.Detach();//這里menu對(duì)象作為一個(gè)局部對(duì)象。使用 Detach()從menu對(duì) 象中分離窗口菜單句柄,從而當(dāng)menu對(duì)象析構(gòu)的時(shí)候窗口菜單資源不隨之銷(xiāo)毀。 也可將menu定義為全局對(duì)象。 十三:對(duì)彈出式菜單項(xiàng)的命令更新 ①給菜單項(xiàng)添加UPDATE_COMMAND_UI消息響應(yīng)②在響應(yīng) 函數(shù)中調(diào)用 CcmdUI類(lèi)的成員函數(shù)。 十四:向系統(tǒng)添加(右鍵彈出式)菜單(上下文菜單) 1 系統(tǒng)添力口法: ① Project->Add to Project->Components and Controls->Visua
19、l C++ conpenets->pop-upMenue->Insert->選擇類(lèi)(不能選 CmainFram)其中系統(tǒng)增加的內(nèi)容: A 一個(gè)菜單資源;B, 在派生View類(lèi)中增加了 OnContextMenu()函數(shù) 2系統(tǒng)添加法:①用資源管理器添加一個(gè)菜單資源② 在鼠標(biāo)右鍵消息響應(yīng)函數(shù)中,力口載菜 單資源,并獲得要顯示的子菜單指針,并用該指針調(diào)用 TrackPopupMenu函數(shù)便完成任務(wù) 代碼如下: CMenu menu; menu.LoadMenu(IDR_MENU1);CMenu *pPopup=menu.GetSubMenu(0); ClientToScreen(&poin
20、t); //將一個(gè)坐標(biāo)點(diǎn)或一個(gè)矩形區(qū)域坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)。 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this); //在指定位 置以指定的方式顯示彈出菜單。也可對(duì)菜單項(xiàng)做消息響應(yīng)。 2動(dòng)態(tài)添加菜單法: ①在CmainFram類(lèi)的OnCreate()中創(chuàng)建Cmenu對(duì)象調(diào)用其成員函數(shù)添加、插入、刪除 子菜單、菜單項(xiàng)②手動(dòng)給動(dòng)態(tài)菜單項(xiàng)添加響應(yīng)函數(shù)一:在 Resource.h中可以添加資 源的ID二:在頭文件中寫(xiě)消息函數(shù)原型三在代碼文件中添加消息映射和添加消 息響應(yīng)函數(shù)(注意手動(dòng)添加要放在
21、ClassWizard的規(guī)定的外面) 十五:集合類(lèi): COBArray , CStringArray , CDWordArray , CPtrArray , CStringArray , CUIntArray , CWordArray 十六:在CMainFrame 中截獲對(duì)菜單命令的處理 由于CWnd::OnCommand是個(gè)虛函數(shù),可以在框架類(lèi)中重寫(xiě) OnCommand函數(shù),從而可以截獲菜單消息使 它不再往下(VIEW類(lèi))路由。例: BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) { int MenuCmdId=L
22、OWORD(wParam);// 取命令 ID
CMenu2View *pView=(CMenu2View*)GetActiveView();〃 獲取當(dāng)前 VIEW 類(lèi)指針
if(MenuCmdId>=IDM_PHONE1 && MenuCmdId
23、Command函數(shù),在 CFrameWnd::OnCommand中截獲的消息會(huì)交由 VIEW類(lèi)處理} return CFrameWnd二OnCommand(wParam, lParam); //調(diào)用基類(lèi)OnCommand函數(shù),在CFrameWnd::OnCommand中截獲的消息會(huì)交 由VIEW類(lèi)處理} 十七:對(duì)話(huà)框類(lèi)CDialog 1 .重要函數(shù)與成員變量 一:每個(gè)窗口類(lèi)創(chuàng)建的對(duì)象的同時(shí)都擁有一個(gè)窗口句柄 m_hWnd的成員變量。 二:GetDlgItem(IDC)==關(guān)聯(lián)一個(gè)變量;通過(guò)控件ID獲得控件對(duì)象指針 三:GetWindowText(CString& rString
24、) / / 獲得窗 口、安鍵文本(char 類(lèi)型) 四:int atoi( const char *string ); itoa () 〃把一個(gè)字符串與INT類(lèi)型的數(shù)值轉(zhuǎn)為 五 : GetDlgItemText(IDC_EDIT1,ch1,10) ==GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10); 在一個(gè)窗口控件中直接讀取文本到字符數(shù)組中 六:INT GetDlgItemInt() 〃獲得控彳^文本,并轉(zhuǎn)換成數(shù)值類(lèi)型 七:SetFocus(設(shè)計(jì)窗口、控件的焦點(diǎn)。 GetFocus() 八;if(IDOK==dlg.DoModal())創(chuàng)
25、建對(duì)話(huà)框后會(huì)等待用戶(hù)作選擇,就是 DoModal、 create 的值。 九:對(duì)編輯框Edit控件寫(xiě)入內(nèi)容后會(huì)發(fā)送EN_change消息, 2 .問(wèn)控件的六種方法: 一:GetDlgItem(IDC_EDIT2)->Get(Set)WindowText(ch2,10); 二:Get(Set)DlgItemText(IDC_EDIT2, ch2) 三:Get(Set)DlgItemInt(IDC_EDIT2) 四:每個(gè)控件關(guān)聯(lián)一個(gè)變量,直接對(duì)變量進(jìn)行操作。調(diào)用 UpdateData()X寸控件 取設(shè)計(jì)值。 或:變量.GetWindowText(ch1,10);取得數(shù)據(jù) 五:通過(guò)
26、SDK函數(shù)或變量的成員函數(shù)發(fā)送 WM消息完成消息任務(wù): 二SendMessageGetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM )ch1); m_edit1.SendMessageWM_GETTEXT,10,(LPARAM)ch1); 六:直接給ID控件發(fā)送消息: SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1); 十八:創(chuàng)建擴(kuò)展窗口(收縮、擴(kuò)展窗口) ①創(chuàng)建一個(gè)圖表框通過(guò)ID獲得其矩形的位置,并通過(guò)CRect對(duì)象記錄其矩形 位置。 GetDlgItem(IDC_
27、)->GetWindowRect(&rectSeparator); 〃獲得窗 口大小 GetWindowRect(&rectLarge); ②創(chuàng)建兩個(gè)CRect對(duì)象通過(guò)點(diǎn)的付值記錄其矩形位置收縮、擴(kuò)展時(shí)的矩形位置。 ③ SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE | SWP_NOZORDER);〃 設(shè) 置窗口大小與位置 十九:設(shè)計(jì)焦點(diǎn)事件(Tab Stop) 先對(duì)改變焦點(diǎn)事件做消息響應(yīng)(如對(duì)回車(chē) ID_OK的響應(yīng))后 ① GetFocus()->GetNextWindow()->SetFo
28、cus();/次寸最后——個(gè)不能判斷。 ②GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();/ 對(duì)最后一個(gè)不 能判斷。 ③ GetNextDlgTabItem(GetFocus())->SetFocus();//ft好 回車(chē)事件為窗口缺損消息由 ONOK()響應(yīng),可通過(guò)對(duì)控件屬性設(shè)計(jì)為缺損做消息 響應(yīng)以接收這個(gè)消息。 寸:查看/改變對(duì)話(huà)框控件排列的秩序 在對(duì)話(huà)框資源界面中:Layout->Tab Order->改順序。 廿一:逃跑按鈕的巧妙實(shí)現(xiàn) ①創(chuàng)建多個(gè)Cbutton控件,并建立基于Cbutton類(lèi),類(lèi)中包含一個(gè)本類(lèi)的成員變 量。
29、②將控件關(guān)聯(lián)成這個(gè)類(lèi)的一個(gè)變量,同時(shí)使自己的成員變量指向下個(gè)控件 ③ShowWindow(SW_HIDE);使自己隱藏,通過(guò)其成員變量 m_pBtn->ShowWindow(SW_SHOW)使對(duì)方顯示 寸二:如何制作屬性頁(yè)對(duì)話(huà)框和向?qū)?duì)話(huà)框 CProPertySheet 類(lèi) CpropertyPage 類(lèi) ①創(chuàng)建屬性頁(yè):insert->Resource->Dailog->選擇后三個(gè)之一(如 IDD_PROPPAGE_LARGE). ②為各頁(yè)添加控件并為各頁(yè)創(chuàng)建以 CpropertyPage屬性表單頁(yè)類(lèi))為基類(lèi)的屬性 表單頁(yè)類(lèi). ③以CPropertyShee偽基類(lèi)創(chuàng)建屬性表單類(lèi),
30、并在表單類(lèi)中添加各表單頁(yè)的對(duì)象。 要加頭文件。 ④在表單類(lèi)的構(gòu)造函數(shù)中用AddPage(&m_prop1);添力口各表頁(yè)。 ⑤在View中做消息響應(yīng)做顯示觸發(fā)器。編代碼:⑤.1構(gòu)造表單對(duì)象(設(shè)計(jì)表單名) ⑤.2調(diào)用propSheet.DoModal()或Create()顯示頁(yè)面。(注:創(chuàng)建向?qū)?duì)話(huà)框在⑤.2前調(diào)用 SetWizardMode() ⑥設(shè)計(jì)各頁(yè)(上一步、下一步等)限制用戶(hù)在不滿(mǎn)足設(shè)定的條件時(shí)切換到其他屬性頁(yè)和向?qū)ы?yè)。 :⑥.1在各 頁(yè) 中添加 OnSetActive()虛函數(shù) ⑥.2用 表單指針調(diào) 用 SetWizardButtons()來(lái)設(shè)計(jì)。 如: ((CProp
31、ertySheet*)GetParent())-> SetWizardButtons(PSWIZB_NEXT); 其響應(yīng)函數(shù)為虛函數(shù) OnWizardNext/Back/Finish (查看 MSDN) return 1 不進(jìn)入下一頁(yè)。 寸三:?jiǎn)芜x按鈕操作方法: ①對(duì)所有單選按鈕的第一個(gè)按鈕屬性設(shè)為 Group,并為它們關(guān)聯(lián)一個(gè)int類(lèi)型的變量(使用時(shí)可按其編號(hào)訪(fǎng) 問(wèn)) ②選擇后(要按下一步或 ok鍵)對(duì)按鍵作消息響應(yīng),用 UpdateDate()X寸所選取 值。 ③對(duì)適當(dāng)事件作消息響應(yīng)通過(guò)一新的int類(lèi)型的變量取這個(gè)關(guān)聯(lián)的變量。 ④使用選擇值時(shí)作消息響應(yīng), 通過(guò)變量作swit
32、ch()case選擇,通過(guò)str+="程序員"等方式取值并 將選擇輸出。 ⑤使用完后在使用類(lèi)的構(gòu)造函數(shù)中對(duì)數(shù)組初始化 寸四:復(fù)選按鈕操作方法: ①對(duì)所有復(fù)選按鈕都關(guān)聯(lián)一個(gè)Bool類(lèi)型的變量(使用時(shí)可按其編號(hào)訪(fǎng)問(wèn)) ②選擇后(要按下一步或 ok鍵)對(duì)按鍵作消息響應(yīng),用 UpdateDate()X寸所選取 值。(就一個(gè)函數(shù)) ③對(duì)適當(dāng)事件作消息響應(yīng)通過(guò) Bool類(lèi)型數(shù)組記錄每個(gè)關(guān)聯(lián)變量的 值。 ④使用選擇值時(shí)作消息響應(yīng),通過(guò) Bool類(lèi)型數(shù)組多次if(m_bLike[0])判斷,通過(guò)str+="程序員"等方式取值 并將選擇輸出。 ⑤使用完后在使用類(lèi)的構(gòu)造函數(shù)中用 memset ()對(duì)
33、數(shù)組初始 寸五: 組合框操作方法: CcomboBox 類(lèi) ①做OnInitDialog()虛函數(shù)消息響應(yīng)通過(guò) AddString()初始化選項(xiàng)值。 并通過(guò)((CComboBox*)GetDlgItem(IDC_COMBO2))-> SetCurSel(0);負(fù)索引號(hào)值。 ②對(duì)適當(dāng)事件作消息響應(yīng)通過(guò) int index=((CComboBox*)GetDlgItem(IDC_COMBO2))-> GetCurSel();取得索 引號(hào)。 ((CComboBox*)GetDlgItem(IDC_COMBO2))-> GetLBText (index,m_strSalary);通
34、過(guò)索引號(hào)將值存入 字符串中。 ③對(duì)適當(dāng)事件作消息響應(yīng)通過(guò)新的 CString類(lèi)型變量記錄這個(gè)字符串。 ④使用選擇值時(shí)作消息響應(yīng),通過(guò) CString類(lèi)型變量以str+="程序員”等方式直接使用 ⑤使用完后在使用類(lèi)的構(gòu)造函數(shù)中對(duì)數(shù)組初始化 廿六:列表框操作方法: ClistBox 類(lèi) ①對(duì)所有復(fù)選按鈕都關(guān)聯(lián)一個(gè) CString類(lèi)型的變量.并做OnInitDialog()虛函數(shù)消息響應(yīng)通過(guò) AddString()初始 化選項(xiàng)值。 ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(" 北京"); ②對(duì)適當(dāng)事件作消息響應(yīng)通過(guò)新的 CS
35、tring類(lèi)型變量記錄關(guān)聯(lián)變量的選擇值 。 ③使用選擇值時(shí)作消息響應(yīng),通過(guò) CString類(lèi)型變量以str+="程序員”等方式直接使用。 ④使用完后在使用類(lèi)的構(gòu)造函數(shù)中對(duì)數(shù)組初始化 。 寸七:解決添加類(lèi)成功后ClassWizard找不到 其.h//.cpp文件 ①在本工程目錄下刪除.CLW文件;.CLW為管理類(lèi)信息的文件。 ②在工程中View->ClassWizard->是(輸入這個(gè)文件名.CLW ) 寸八:修改MFC AppWizard向?qū)傻目蚣艹绦虼翱诘拇? 小和標(biāo)題: 在 CMainFrame 類(lèi)中 在 CMainFrame 類(lèi)中一■法:在 PreCreateWind
36、ow ()中(窗口創(chuàng)建前)查 MSDN 的 Frame-window styles cs.cx=300; cs.lpszName="http://www.sunxin.org”; 二法: 在 CMainFrame 類(lèi)的 OnCreate ()中:(窗口創(chuàng)建后)調(diào)用 SetWindowLong () SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW); SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX) 寸九:修改MFC
37、AppWizard向?qū)傻目蚣艹绦虼? 口的圖標(biāo): 在 CMainFrame 類(lèi)中 PreCreateWindow () 一:中同窗口的創(chuàng)建相同: WNDCLASS w ndcls;->設(shè)計(jì)->注冊(cè)->修改 二 cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW CS_VREDRAW,0,0,LoadIcon(NULL,IDI_WARNING)); OnCreate() 中 三 OnCreate() 中 加 載 系 統(tǒng) 圖 標(biāo):SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR))
38、; 四:力口載自定義圖標(biāo):m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[0]); 三十:修改MFC AppWizard向?qū)傻目蚣艹绦虼?口的背景、光標(biāo):在CView類(lèi)中 PreCreateWindow ()中一法:cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL,IDC_CROSS),(HBRUS
39、H)GetStockObject(BLACK_BRUSH),0); OnCreate() 中 二 法: SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH)); 背景 SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP)); 光標(biāo) 川一獲得當(dāng)前應(yīng)用程序?qū)嵗浔姆椒ǎ? 一: AfxGetInstanceHandle()二:theApp.m_hInstance 三: AfxGetApp()->m_hInstance, 川一
40、:.工具欄按鈕編程和手動(dòng)添加工具欄 CToolBar 對(duì)菜單進(jìn)行消息響應(yīng),對(duì)常用菜單在 Resource的ToolBar中設(shè)計(jì)工具欄按鈕,將其 ID設(shè)計(jì)于菜單欄ID相 同 手動(dòng)添加工具欄查看 MSDN的CToolBar類(lèi)。也可查看 CMainFrame::OnCreate()函數(shù)。 卅二:向應(yīng)用程序?qū)雸D標(biāo)資源: 將圖標(biāo)資源 copy到本工程的.res目錄下,insert->rousert->import導(dǎo)入圖標(biāo)資源 川三: 對(duì)菜單進(jìn)行消息響應(yīng)使自定義工具欄顯示和隱藏: m_newToo舊ar為工具欄類(lèi)對(duì)象。 1法:if(m_newToolBar.IsWindowVisib
41、le()){m_newToolBar.ShowWindow(SW_HIDE);} else{m_newToolBar.ShowWindow(SW_SHOW);} RecalcLayout(); DockControlBar(&m_newToolBar);// 工具欄??亢瘮?shù) 2法:ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE); 川四:對(duì)狀態(tài)欄的狀態(tài)指示器編程(編寫(xiě)時(shí)鐘顯示) Cstatus ar類(lèi) ①在 String Table資源中加入ID資源并在 CmainFrame的頭文件中建立一
42、個(gè) CstatusBar 類(lèi)對(duì)象。 ②在 CmainFrame類(lèi).cpp 的 static UINT indicators□結(jié)構(gòu)第一個(gè) ID 后添加這個(gè) ID. 就可顯示這個(gè)String o ③在 OnCreate()通過(guò) Cstring 對(duì)象格式化記錄要輸出的內(nèi)容。這里是時(shí)間.CTime t=CTime::GetCurrentTime();CString str=t.Format("%H:%M:%S"); ④ 通過(guò) CSize sz=dc.GetTextExtent(str); 取得屏幕輸出要的寬度。 Int index=m_wndStatusBar.CommandToIndex( I
43、DS_TIMER)// 通過(guò)ID取得索引號(hào)并通過(guò)索引號(hào)設(shè)計(jì)窗格寬度 類(lèi)對(duì)象.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);⑤類(lèi)對(duì)象.SetPaneText(1,str)俞出內(nèi)容。 ⑥在OnPaint()中重寫(xiě)代碼,當(dāng)窗口重繪時(shí)再只顯示。 川五:對(duì)狀態(tài)欄的指示行的編程 ①在響應(yīng)的類(lèi)中作消息響應(yīng)。并編代碼 ②通過(guò) Cstring 對(duì)象格式化記錄要輸出 的 內(nèi)容如 CString str; str.Format("x=%d,y=%d",point.x,point.y); ③顯示(有四種方法) 一 : ((CMainFrame*)GetParent(
44、))->m_wndStatusBar.SetWindowText(str); m_wndStatusBar 為 CstatusBar類(lèi)對(duì)象 二:((CMainFrame*)GetParent())->SetMessageText(str); 三:((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str); 四 : GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText( str); AFX_IDW_STATUS_BAR為系統(tǒng)準(zhǔn)備的狀態(tài)欄I
45、D號(hào); 川六:進(jìn)度欄的編寫(xiě):CprogressCtr類(lèi) ①在頭文件中建立一個(gè) CprOgressCtrr類(lèi)對(duì)象。并在OnCreate()中通過(guò)對(duì)象創(chuàng)建一個(gè)進(jìn)度 ② 卅七:發(fā)送自定義消息: ①在頭文件中定義消息宏:#define UM_PROGRESS WM_USER+1 ②作消息映射③在要響應(yīng)消息處通過(guò) SendMessage(UM_PROGRESS成 PostMessage(UM_PROGRES或送消息調(diào)用函數(shù)做要做的任務(wù)。 SendMessage(UM_PROGRESSg送消息馬上調(diào)用函數(shù) ostMessage(UM_PROGRESS)發(fā)送消息到消息隊(duì)列中,并繼續(xù)運(yùn)行進(jìn)程。
46、 川八:為應(yīng)用程序添加啟動(dòng)畫(huà)面 ① 1 系統(tǒng)添力口法: ① Project->Add to Project->Components and Controls->Visual C++ conpenets->Splash Screen->Insert->選擇類(lèi)(不能選 CmainFram) ②在Ontimer()中對(duì)顯示時(shí)間做設(shè)計(jì)。如果手動(dòng)添加可參看這個(gè)方法。 川九: 使用標(biāo)準(zhǔn)顏色對(duì)話(huà)框,標(biāo)準(zhǔn)字體對(duì)話(huà)框(CcolorDialog類(lèi),CfontDialog 類(lèi)) 顏色對(duì)話(huà)框:①做消息響應(yīng)并建立控件對(duì)象, CColorDialog dlg;②創(chuàng)建顏色對(duì)話(huà)框并通過(guò)對(duì)象的數(shù)據(jù) 成員 m_c
47、c指向的結(jié)構(gòu)取 的選擇 的顏色dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;〃設(shè)計(jì)標(biāo)記 if(IDOK==dlg.DoModal()){ COLORREF m_clr=dlg.m_cc.rgbResult;}通過(guò)rgbResult的記錄輸出客戶(hù)的選擇。就可以在畫(huà)筆、畫(huà)刷、字體 設(shè)計(jì)顏色。 字體對(duì)話(huà)框(雷同):①做消息響應(yīng)并建立控件對(duì)象, CFontDialog dlg;②創(chuàng)建字體對(duì)話(huà)框并通過(guò)對(duì)象的 數(shù)據(jù)成員 m_cf指向的結(jié)構(gòu)變量lpLogFont的字體值初始化自定義字體 CFont m_font.CreateFontIndirect(dlg.m_cf
48、.lpLogFont);就可為DC加載字體③為聯(lián)系創(chuàng)建字體,要對(duì) m_font資源做 判斷,如果存在就釋放資源在創(chuàng)建。 if(m_font.m_hObject)m_font.DeleteObject(); 查 MSDN 的類(lèi)和它們的成員變量看事例。 四十:改變 對(duì)話(huà)框的背景色,控件字體色、背景色(Cbutton除外)。 ①做WM_CTLCOLOR消息響應(yīng),并創(chuàng)建一個(gè) CBRUSH對(duì)象,return這個(gè)對(duì)象來(lái)改變對(duì)話(huà)框的背景 色 ②通過(guò) pWnd->GetDlgCtrlID()==ID 一做判斷,/用 pDC 調(diào)用 SetTextColor(RGB(255,0,0)); SetBkMo
49、de(TRANSPARENT); SetBkColor(RGB(0,0,255));改變控件字體色、背景 色,背景模式。 泗一:改變 CButton控件字體色、背景色 ①在工程中加入一個(gè)以CButton為基類(lèi)的新類(lèi)。并重載虛函數(shù) DrawItem(); ②在函數(shù)體中加入 MSDN中CButton類(lèi)的DrawItem()的示例代碼。(改變背景色要 自寫(xiě)代碼)。 ③在CButton控件中關(guān)聯(lián)這個(gè)新類(lèi)的變量,同時(shí)將控件屬性 Styles->Ower Draw選擇上就可以改變字體色。 改變背景色代碼:有別人寫(xiě)的CSXBtn類(lèi)和CButtonST類(lèi),以備:加載到工程中。 用CSXBtn類(lèi)雷同
50、上,CButtonST類(lèi)如下: ①加載 CButtonST至U工程中,在CButton控件中關(guān)聯(lián)這個(gè)新類(lèi)的變量, 重載:OnInitDialog()調(diào)用下 面的函數(shù) BOOL CSettingDlg::OnInitDialog() {CDialog::OnInitDialog();m_btnST.SetActiveBgC010r(RGB(0,0,255));m_btnST.SetActiveFgC010r(RGB(255,0,0) );} 泗二:在窗口中顯示一幅位圖。四步: 1、準(zhǔn)備一副位圖,響應(yīng) WM_ERASEBKGND 消息。 2 、 創(chuàng)建位圖 CBitmap bitma
51、p; bitmap.LoadBitmap(IDB_BITMAP1); {BITMAP bmp; bitmap.GetBitmap(&bmp);} 3、創(chuàng)建兼容 DC CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); 4、將位圖選到兼容 DC 中 dcCompatible.SelectObject(&bitmap);在 GetClientRect(&rect)取的客戶(hù)矩形。 5、將兼容 DC 中的位圖貼到當(dāng)前 DC 中。pDC->BitBlt(rect.left,rect.top,rect.Width(), { 或 pDC->S
52、tretchBlt() ; } rect.Height(),&dcCompatible,0,0,SRCCOPY); 6、return TRUE;后也可在 OnDraw()中又重繪。 泗三:圖形的保存和重繪 一法:: ①在工程中添加一普通類(lèi),添加多個(gè)成員變量以保存圖形的各要素,并添加帶這幾個(gè)參數(shù)的構(gòu)造函數(shù)來(lái)初 始化對(duì)象 ②在繪圖的View中建立CptrArray(或別的集合類(lèi))對(duì)象,在繪圖函數(shù)中建立這個(gè) 普通類(lèi)的對(duì)象,沒(méi)次繪圖都記錄這些數(shù)據(jù)并用 Add()添加到集合類(lèi)對(duì)象中以保存圖 形。 ③在OnDraw()中用GetSize()取數(shù)組個(gè)數(shù)做循環(huán),嵌套 switch用GetAt(i
53、)取圖形 類(lèi)型重繪圖形。
for(int
i=0;i
54、rect; GetClientRect(&rect); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());m_dcCompatible.Se lectObject(&bitmap); m_dcCompatible.BitBlt (0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);/* 將原始設(shè) 備顏色和象素拷貝到兼容 dc中*/m_dcCompatible.SelectObject(pBrush);}②可以用兼容dc 在繪圖函數(shù)中作圖。 ③
55、在重繪函數(shù) OnDraw()中通過(guò)兼容dc將記錄的兼容位圖拷貝到矩形空間。 CRect rect; GetClientRect(&rect); pDC->BitBlt (0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY); 三法:CmetaFileDC類(lèi): 查MSDN的介紹有步驟。 泗四:文件的操作,增加 打開(kāi)、保存”文件對(duì)話(huà)框, 注冊(cè)表的讀寫(xiě) 文件的操作:Cfile類(lèi) "打開(kāi)、保存”文件對(duì)話(huà)框: CfileDialog類(lèi)和m_ofn成員函數(shù)OPENFILENAME 結(jié) 構(gòu)。 注冊(cè)表的讀寫(xiě):查MSDN的Regis
56、try Functions 泗五:使用CArchive類(lèi)對(duì)文件串行化(查 MSDNCArchive 類(lèi)) ①創(chuàng)建一個(gè)文件對(duì)象用于保存數(shù)據(jù),同時(shí)創(chuàng)建一個(gè) CArchive ar對(duì)象。 ②通過(guò)ar>>將要輸入的數(shù)據(jù)保存到文件中。同樣也可通過(guò) ar<〈將文件中的數(shù)據(jù)輸出。 泗六:修改文擋標(biāo)題的方法: ①法:在 C*Doc類(lèi)的OnNewDocument()中調(diào)用SetTitle()。注:在文擋、視圖、框架創(chuàng) 建是調(diào)用OnNewDocument(),所以可以添加代碼設(shè)計(jì)它們。 ②法:在資源String Table的IDR_MAINFRAME 的第一二個(gè)\n問(wèn)修改字符。注: IDR_MAI
57、NFRAME 包含的內(nèi)容:主窗 口名、文擋名、文擋類(lèi)等。(查 MSDN 的 CDOCTemplate::GetDOCString()) 泗七:新類(lèi)的串行化和文擋對(duì)圖形的串行化處理過(guò) 程:永久保存圖形繪制圖形: 第一步:實(shí)現(xiàn)新類(lèi)對(duì)串行化的支持:(查MSDNCArchive類(lèi)對(duì)CObject的串行化) ①建立一個(gè)記錄圖形各要素的新類(lèi),并以 CObject為基類(lèi)。 ②在新類(lèi)中覆蓋 void Serialize(CArchive& ar)虛函數(shù),并通過(guò) CArchive& ar對(duì)象 實(shí)現(xiàn)存取。 ③在新類(lèi)頭文件中加 DECLARE_SERIAL(新類(lèi)名)的宏。 ④在新類(lèi)實(shí)現(xiàn)文件中加IMPLEMENT_SERIAL(新類(lèi)名,CObject, 1 )的宏。⑤在新類(lèi) 中重載一個(gè)不帶參數(shù)的構(gòu)造函數(shù)。 (有初始化要素的構(gòu)造函數(shù))后這個(gè)類(lèi)就支持串行化了。串行化完成。 ⑥在新類(lèi)中添加void Draw(CDC *pDC)函數(shù)實(shí)現(xiàn)對(duì)圖形的重繪。 第二步:繪制圖形并永久保存圖形:①在
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點(diǎn)美食推薦
- XX國(guó)有企業(yè)黨委書(shū)記個(gè)人述責(zé)述廉報(bào)告及2025年重點(diǎn)工作計(jì)劃
- 世界濕地日濕地的含義及價(jià)值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場(chǎng)心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫(huà)之美生活之美
- 節(jié)后開(kāi)工第一課輕松掌握各要點(diǎn)節(jié)后常見(jiàn)的八大危險(xiǎn)
- 廈門(mén)城市旅游介紹廈門(mén)景點(diǎn)介紹廈門(mén)美食展示
- 節(jié)后開(kāi)工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點(diǎn)推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個(gè)個(gè)會(huì)應(yīng)急
- 預(yù)防性維修管理
- 常見(jiàn)閥門(mén)類(lèi)型及特點(diǎn)
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案