久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文)

時間:2019-05-12 23:41:08下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文)》。

第一篇:孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文)

一:Windows程序運行原理及程序編寫流程(創(chuàng)建窗口。回調(diào)函數(shù)

方法1

int WINAPI WinMain(//主函數(shù)

HINSTANCE hInstance,// handle to current instance HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine,// command line

int nCmdShow

// show state)

WNDCLASS wndcls;//創(chuàng)建一個窗口對象

wndcls.cbClsExtra=0;//窗口類附加字節(jié),為該類窗口所共享。通常0。

wndcls.cbWndExtra=0;//窗口附加字節(jié)。通常設(shè)為0。

wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//背景

wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);/光標(biāo)

wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//位圖(圖標(biāo))

wndcls.hInstance=hInstance;//當(dāng)前應(yīng)用程序事例句柄。

wndcls.lpfnWndProc=WinSunProc;// 窗口過程函數(shù)(回調(diào)函數(shù))

wndcls.lpszClassName=“Weixin2003”;// 窗口名//類的名字

wndcls.lpszMenuName=NULL;//菜單名

wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口的類型

RegisterClass(&wndcls);//注冊窗口

HWND hwnd;

hwnd=CreateWindow(“Weixin2003”,“

京”,WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);//定義窗口句柄并創(chuàng)建窗口

ShowWindow(hwnd,SW_SHOWNORMAL);//顯示窗口

UpdateWindow(hwnd);//更新窗口

MSG msg;//定義消息對象

/*做消息循環(huán)*/while(GetMessage(&msg, //接收消息的窗口句柄。//從消息隊列中取出一條消息 NULL, //消息標(biāo)識。0,0))//做消息循環(huán)

{

TranslateMessage(&msg);//進(jìn)行消息(如鍵盤消息)轉(zhuǎn)換

DispatchMessage(&msg);/分派消息到窗口的回調(diào)函數(shù)處理,}

return 0;}

//回調(diào)函數(shù)原形為LRESULT CALLBACK WindowProc();

LRESULT CALLBACK WinSunProc(//對消息的響應(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”,“weixin”,0);

HDC hdc;

hdc=GetDC(hwnd);

TextOut(hdc,0,50,“計算機(jī)編程語言培訓(xùn)”,strlen(“計算機(jī)編程語言培訓(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(hwnd,“是否真的結(jié)束?”,“weixin”,MB_YESNO))

{DestroyWindow(hwnd);}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

總結(jié):創(chuàng)建一個完整的窗口需要經(jīng)過下面四個操作步驟: 一,設(shè)計一個窗口類;如:WNDCLASS wndcls;二,注冊窗口類;

如:RegisterClass(&wndcls);

三,創(chuàng)建窗口;

如:CreateWindow(),CreateWindowEX();四,顯示及更新窗口。如:ShowWindow(),UpdateWindow();二:VC++掌握的基礎(chǔ)

①使用VC編程除了良好的C基礎(chǔ)外還需要掌握兩方面: ②消息本身。不同消息所代表的用戶操作和應(yīng)用程序的狀態(tài)。

③對于某個特定的消息來說,要讓OS執(zhí)行某個特定的功能去響應(yīng)消息。

二.1消息的分類:標(biāo)準(zhǔn)消息,命令消息,通告消息。

[標(biāo)準(zhǔn)消息]:除WM_COMMAND之外,所有以WM_開頭的消息。

[命令消息]:來自菜單、加速鍵或工具欄按鈕的消息。這類消息都以WM_COMMAND呈現(xiàn)。

通過標(biāo)識(ID)來區(qū)分不同的命令消息;在SDK中,通過消息的wParam參數(shù)識別。

[通告消息]:由控件產(chǎn)生的消息,如按鈕的單擊。

1)從CWnd派生的類,可以接收到[標(biāo)準(zhǔn)消息] [命令消息]和[通告消息]。2)從CCmdTarget派生的類,只能可以接收到[命令消息]和[通告消息]。

三:兩種函數(shù)調(diào)用約定(__stdcall 和 __cdecl)

#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 語言形式的調(diào)用約定。

主要區(qū)別:函數(shù)參數(shù)傳遞順序 和 對堆棧的清除上。

問題:除了那些可變參數(shù)的函數(shù)調(diào)用外,其余的一般都是__stdcall約定。但 C/C++編譯默然的是__cdecl約定。所以如果在VC等環(huán)境中調(diào)用__stdcall約定的函數(shù),必須要在函數(shù)聲明的時加上__stdcall 修飾符,以便對這個函數(shù)的調(diào)用是使用__stdcall約定(如使用DELPHI編寫的DLL時候)。(VC中可通過這途徑修改:project|settings..|c/c++|...)

四:關(guān)于DC句柄獲取(CpaintDC/CclientDC/CwindowDC在創(chuàng)建時默認(rèn))

(調(diào)用這些函數(shù))a)使用BeginPaint(),EndPaint()對。注意只能在響應(yīng)WM_PAINT消息時使用。

b)使用GetDc(),ReleaseDC()對。注意他們不能在響應(yīng)WM_PAINT中使用。MFC中的運用為① HDC hdc=::GetDc(m_hWnd);::ReleaseDC(m_hWnd,hdc);獲得全局DC。

② CDC *pDC=GetDC();ReleaseDC(pDC);

③ CClientDC dc(this);(自動調(diào)用GetDc(),ReleaseDC()); ④ CWindowDC dc(this);(自動調(diào)用GetDc(),ReleaseDC());

五:MFC程序框架的剖析

①尋找WinMain

人口:路徑:visual c++安裝目錄下的:vc98|MFC|SRC|APPMODUL.CPP:

尋找CWinApp構(gòu)造函數(shù):MFC|SRC|APPCORE.CPP: ②MFC程序

CTEApp

theApp-> CWinApp::CWinApp()->_tWinMain(){//進(jìn)入程->AfxEndDeferRegisterClass(LONG fToRegister)-> PreCreateWindow(創(chuàng)建、顯示和更新窗口)pThread->Run(消息循環(huán))-> PumpMessage(//取消息并處理)

類的運行順序為: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){}

七:使用畫筆、畫刷、字體的步驟:(包括設(shè)計繪圖模式SetROP2()

①CPen pen(PS_DOT,1,RGB(0,255,0));//構(gòu)造畫筆對象② CClientDC dc(this);③ CPen *pOldPen=dc.SelectObject(&pen);//將畫筆選入DC后就可以作畫了④dc.SelectObject(pOldPen);CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//構(gòu)造透明畫刷對象

FromHandle()將對象句柄轉(zhuǎn)換為對象指針GetStockObject()取得一個以預(yù)定義的畫筆、畫刷、字體的句柄.類為Cpen Cbrush CFont

設(shè)計繪圖模式: dc.SetROP2(R2_BLACK);(查MSDN).八:創(chuàng)建插入符:CDC類(文字等的輸出類)

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);//設(shè)計插入符號的位置

九:創(chuàng)建路徑層:

BOOL BeginPath();//在這作圖定義路徑層剪切區(qū)域BOOL EndPath();

BOOL SelectClipPath(int nMode);//調(diào)用這個函數(shù)來使當(dāng)前路徑層剪切區(qū)域與新剪切區(qū)域進(jìn)行互操作。

應(yīng)用:當(dāng)作圖的時候,如果想要在整幅圖形其中的某個部分和其它部分有所區(qū)別,我們可以把這部分圖形放到路徑層當(dāng)中,然后指定調(diào)用指定互操作模式調(diào)用SelectClipPath(int nMode)函數(shù)來使路徑層和覆蓋在其上新繪圖剪切區(qū)域進(jìn)行互操作,達(dá)到特殊效果。

十:設(shè)置定時器

①SetTimer(1,100,NULL);//放置定時1器并發(fā)送WM_TIMER消息

②作WM_TIMER消息響應(yīng)并對Void OnTimer(UINT nIDEvent)編寫代碼。

十一:CMenu類

CMenu 類重要函數(shù):CMenu*GetMenu得到窗口菜單欄對象指針。

CMenu::GetSubMenu獲得指向彈出菜單對象指針

// SetMenu(CMenu* pMenu)設(shè)置新菜單或移除菜單 DrawMenuBar()//重繪菜單

//其它菜單的功能設(shè)計用MSDN查函數(shù)

十二:創(chuàng)建自定義菜單

①CMenu menu;//

象②menu.LoadMenu(IDR_MAINFRAME);③SetMenu(&menu);

④menu.Detach();// 這里menu對象作為一個局部對象。使用Detach()從menu對象中分離窗口菜單句柄,從而當(dāng)menu對象析構(gòu)的時候窗口菜單資源不隨之銷毀。也可將menu;定義為全局對象。

十三:對彈出式菜單項的命令更新

①給菜單項添加UPDATE_COMMAND_UI消息響應(yīng)②在響應(yīng)函數(shù)中調(diào)用CcmdUI類的成員函數(shù)。十四:向系統(tǒng)添加(右鍵彈出式)菜單(上下文菜單)

1系統(tǒng)添加法:

① Project->Add to Project->Components and Controls->Visual C++ conpenets->pop-upMenue->Insert->選擇類(不能選CmainFram)其中系統(tǒng)增加的內(nèi)容:A一個菜單資源;B,在派生View類中增加了OnContextMenu()函數(shù)

2系統(tǒng)添加法:①用資源管理器添加一個菜單資源②在鼠標(biāo)右鍵消息響應(yīng)函數(shù)中,加載菜單資源,并獲得要顯示的子菜單指針,并用該指針調(diào)用TrackPopupMenu函數(shù)便完成任務(wù) 代碼如下:CMenu menu;

menu.LoadMenu(IDR_MENU1);CMenu *pPopup=menu.GetSubMenu(0);

ClientToScreen(&point);//將一個坐標(biāo)點或一個矩形區(qū)域坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)。

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);//在指定位置以指定的方式顯示彈出菜單。也可對菜單項做消息響應(yīng)。

2動態(tài)添加菜單法:①在CmainFram類的OnCreate()中創(chuàng)建Cmenu對象調(diào)用其成員函數(shù)添加、插入、刪除子菜單、菜單項②手動給動態(tài)菜單項添加響應(yīng)函數(shù)一:在Resource.h中可以添加資源的ID二:在頭文件中寫消息函數(shù)原型三在代碼文件中添加消息映射和添加消息響應(yīng)函數(shù)(注意手動添加要放在ClassWizard的規(guī)定的外面)

十五:集合類:

COBArray,CStringArray,CDWordArray,CPtrArray,CStringArray,CUIntArray,CWordArray

十六:在CMainFrame中截獲對菜單命令的處理

由于CWnd::OnCommand 是個虛函數(shù),可以在框架類中重寫OnCommand函數(shù),從而可以截獲菜單消息使它不再往下(VIEW類)路由。例:

BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam){ int MenuCmdId=LOWORD(wParam);//取命令I(lǐng)D CMenu2View *pView=(CMenu2View*)GetActiveView();//獲取當(dāng)前VIEW類指針

if(MenuCmdId>=IDM_PHONE1 && MenuCmdIdm_strArray.GetSize())//消息范圍判斷

{CClientDC dc(pView);

dc.TextOut(0,0,pView->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));return TRUE;//函數(shù)返回,避免調(diào)用CFrameWnd::OnCommand函數(shù),在CFrameWnd::OnCommand中截獲的消息會交由VIEW類處理}

return CFrameWnd::OnCommand(wParam, lParam);

//調(diào)用基類OnCommand函數(shù),在CFrameWnd::OnCommand中截獲的消息會交由VIEW類處理}

十七:對話框類CDialog

1.重要函數(shù)與成員變量

一:每個窗口類創(chuàng)建的對象的同時都擁有一個窗口句柄m_hWnd的成員變量。二:GetDlgItem(IDC)== 關(guān)聯(lián)一個變量; 通過控件ID 獲得控件對象指針 三:GetWindowText(CString& rString)/ /獲得窗口、安鍵文本(char類型)四:int atoi(const char *string);itoa()// 把一個字符串與INT 類型的數(shù)值轉(zhuǎn)為 五

GetDlgItemText(IDC_EDIT1,ch1,10)==GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);在一個窗口控件中直接讀取文本到字符數(shù)組中

六:INT GetDlgItemInt()//獲得控件文本,并轉(zhuǎn)換成數(shù)值類型 七:SetFocus()設(shè)計窗口、控件的焦點。GetFocus()

八;if(IDOK==dlg.DoModal())創(chuàng)建對話框后會等待用戶作選擇,就是DoModal、create的值。

九:對編輯框Edit控件寫入內(nèi)容后會發(fā)送EN_change消息,2.

問控件的六種方法:

一:GetDlgItem(IDC_EDIT2)->Get(Set)WindowText(ch2,10);二:Get(Set)DlgItemText(IDC_EDIT2,ch2)

三:Get(Set)DlgItemInt(IDC_EDIT2)

四:每個控件關(guān)聯(lián)一個變量,直接對變量進(jìn)行操作。調(diào)用UpdateData()對控件取設(shè)計值。

或:變量.GetWindowText(ch1,10);取得數(shù)據(jù)

五:通過SDK函數(shù)或變量的成員函數(shù)發(fā)送WM消息完成消息任務(wù): ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);六:直接給ID控件發(fā)送消息:

SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);

十八:創(chuàng)建擴(kuò)展窗口(收縮、擴(kuò)展窗口)

①創(chuàng)建一個圖表框通過ID獲得其矩形的位置,并通過CRect對象記錄其矩形位置。

GetDlgItem(IDC_)->GetWindowRect(&rectSeparator);GetWindowRect(&rectLarge);

②創(chuàng)建兩個CRect對象通過點的付值記錄其矩形位置收縮、擴(kuò)展時的矩形位置。③SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE 置窗口大小與位置

| SWP_NOZORDER);//設(shè)

//獲得窗口大小十九:設(shè)計焦點事件(Tab Stop)

先對改變焦點事件做消息響應(yīng)(如對回車ID_OK的響應(yīng))后

① GetFocus()->GetNextWindow()->SetFocus();//對最后一個不能判斷。

②GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();/對最后一個不能判斷。

③GetNextDlgTabItem(GetFocus())->SetFocus();//最好

回車事件為窗口缺損消息由ONOK()響應(yīng),可通過對控件屬性設(shè)計為缺損做消息響應(yīng)以接收這個消息。廿:查看/改變對話框控件排列的秩序

在對話框資源界面中:Layout->Tab Order->改順序。

廿一:逃跑按鈕的巧妙實現(xiàn)

①創(chuàng)建多個Cbutton控件,并建立基于Cbutton類,類中包含一個本類的成員變量。

②將控件關(guān)聯(lián)成這個類的一個變量,同時使自己的成員變量指向下個控件 ③ShowWindow(SW_HIDE);使自己隱藏,通過其成員變量m_pBtn->ShowWindow(SW_SHOW)使對方顯示

廿二:如何制作屬性頁對話框和向?qū)υ捒駽propertySheet類CpropertyPage類

①創(chuàng)建屬性頁:insert->Resource->Dailog->選擇后三個之一(如IDD_PROPPAGE_LARGE).②為各頁添加控件并為各頁創(chuàng)建以CpropertyPage(屬性表單頁類)為基類的屬性表單頁類.③以CPropertySheet為基類創(chuàng)建屬性表單類,并在表單類中添加各表單頁的對象。要加頭文件。

④在表單類的構(gòu)造函數(shù)中用AddPage(&m_prop1);添加各表頁。

⑤在View中做消息響應(yīng)做顯示觸發(fā)器。編代碼:⑤.1構(gòu)造表單對象(設(shè)計表單名)⑤.2調(diào)用propSheet.DoModal()或Create()顯示頁面。(注: 創(chuàng)建向?qū)υ捒蛟冖?2前調(diào)用SetWizardMode()

⑥設(shè)計各頁(上一步、下一步等)限制用戶在不滿足設(shè)定的條件時切換到其他屬性頁和向?qū)ы摗#孩?1 在各頁中添加OnSetActive()虛函數(shù)⑥.2用表單指針調(diào)用SetWizardButtons()來設(shè)計。如:((CPropertySheet*)GetParent())->

SetWizardButtons(PSWIZB_NEXT);其響應(yīng)函數(shù)為虛函數(shù)OnWizardNext/Back/Finish(查看MSDN)return –1不進(jìn)入下一頁。廿三:單選按鈕操作方法:

①對所有單選按鈕的第一個按鈕屬性設(shè)為Group,并為它們關(guān)聯(lián)一個int類型的變量(使用時可按其編號訪問)

②選擇后(要按下一步或ok鍵)對按鍵作消息響應(yīng),用UpdateDate()對所選取值。

③對適當(dāng)事件作消息響應(yīng)通過一新的int類型的變量取這個關(guān)聯(lián)的變量。

④使用選擇值時作消息響應(yīng),通過變量作switch()case選擇,通過str+=“程序員”等方式取值并將選擇輸出。

⑤使用完后在使用類的構(gòu)造函數(shù)中對數(shù)組初始化

廿四:復(fù)選按鈕操作方法:

①對所有復(fù)選按鈕都關(guān)聯(lián)一個Bool類型的變量(使用時可按其編號訪問)

②選擇后(要按下一步或ok鍵)對按鍵作消息響應(yīng),用UpdateDate()對所選取值。(就一個函數(shù))

③對適當(dāng)事件作消息響應(yīng)通過Bool類型數(shù)組記錄每個關(guān)聯(lián)變量的值。

④使用選擇值時作消息響應(yīng),通過Bool類型數(shù)組多次if(m_bLike[0])判斷,通過str+=“程序員”等方式取值并將選擇輸出。

⑤使用完后在使用類的構(gòu)造函數(shù)中用memset()對數(shù)組初始

廿五: 組合框操作方法:CcomboBox類

①做OnInitDialog()虛函數(shù)消息響應(yīng)通過AddString()初始化選項值。

并通過((CComboBox*)GetDlgItem(IDC_COMBO2))->SetCurSel(0);負(fù)索引號值。

②對適當(dāng)事件作消息響應(yīng)通過引號。

int index=((CComboBox*)GetDlgItem(IDC_COMBO2))->GetCurSel();取得索

((CComboBox*)GetDlgItem(IDC_COMBO2))->GetLBText(index,m_strSalary);通過索引號將值存入字符串中。③對適當(dāng)事件作消息響應(yīng)通過新的CString類型變量記錄這個字符串。

④使用選擇值時作消息響應(yīng),通過CString類型變量以str+=“程序員”等方式直接使用。⑤使用完后在使用類的構(gòu)造函數(shù)中對數(shù)組初始化

廿六:列表框操作方法:ClistBox類

①對所有復(fù)選按鈕都關(guān)聯(lián)一個CString類型的變量.并做OnInitDialog()虛函數(shù)消息響應(yīng)通過AddString()初始化選項值。

((CListBox*)GetDlgItem(IDC_LIST1))->AddString(“北京”);

②對適當(dāng)事件作消息響應(yīng)通過新的CString類型變量記錄關(guān)聯(lián)變量的選擇值。

③使用選擇值時作消息響應(yīng),通過CString類型變量以str+=“程序員”等方式直接使用。④使用完后在使用類的構(gòu)造函數(shù)中對數(shù)組初始化。

廿七:解決添加類成功后ClassWizard找不到其.h//.cpp文件

①在本工程目錄下刪除.CLW 文件;.CLW 為管理類信息的文件。②在工程中View->ClassWizard->是(輸入這個文件名.CLW)

廿八:修改MFC AppWizard向?qū)傻目蚣艹绦虼翱诘拇笮『蜆?biāo)題:在CMainFrame類中

在CMainFrame類中一法:在PreCreateWindow()中(窗口創(chuàng)建前)查MSDN的Frame-window styles

cs.cx=300;cs.lpszName=“http://www.tmdps.cn”;

二法:在CMainFrame類的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 AppWizard向?qū)傻目蚣艹绦虼翱诘膱D標(biāo):在CMainFrame類中

PreCreateWindow()一:中同窗口的創(chuàng)建相同:WNDCLASS wndcls;->設(shè)計->注冊->修改

二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));

四:加載自定義圖標(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類中

PreCreateWindow()中一法:cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL,IDC_CROSS),(HBRUSH)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ū)嵗浔姆椒ǎ?/p>

一:AfxGetInstanceHandle()二:theApp.m_hInstance三:AfxGetApp()->m_hInstance,卅一:.工具欄按鈕編程和手動添加工具欄

CToolBar類 對菜單進(jìn)行消息響應(yīng),對常用菜單在Resource的ToolBar中設(shè)計工具欄按鈕,將其ID設(shè)計于菜單欄ID相同

手動添加工具欄查看MSDN的CToolBar類。也可查看CMainFrame::OnCreate()函數(shù)。

卅二:向應(yīng)用程序?qū)雸D標(biāo)資源:

將圖標(biāo)資源copy到本工程的.res目錄下,insert->rousert->import導(dǎo)入圖標(biāo)資源

卅三:對菜單進(jìn)行消息響應(yīng)使自定義工具欄顯示和隱藏:m_newToolBar為工具欄類對象。

1法:if(m_newToolBar.IsWindowVisible()){m_newToolBar.ShowWindow(SW_HIDE);} else{m_newToolBar.ShowWindow(SW_SHOW);}

RecalcLayout();

DockControlBar(&m_newToolBar);// 工具欄停靠函數(shù) 2法:ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);

卅四:對狀態(tài)欄的狀態(tài)指示器編程(編寫時鐘顯示)CstatusBar類

①在String Table資源中加入ID資源并在CmainFrame的頭文件中建立一個CstatusBar類對象。

②在CmainFrame類.cpp的static UINT indicators[]結(jié)構(gòu)第一個ID后添加這個ID.就可顯示這個String。

③在OnCreate()通過Cstring對象格式化記錄要輸出的內(nèi)容。這里是時間.CTime t=CTime::GetCurrentTime();CString str=t.Format(“%H:%M:%S”);④ 通過

CSize sz=dc.GetTextExtent(str);取得屏幕輸出要的寬度。

Int index=m_wndStatusBar.CommandToIndex(IDS_TIMER)//通過ID取得索引號并通過索引號設(shè)計窗格寬度 類對象.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);⑤類對象.SetPaneText(1,str);輸出內(nèi)容。

⑥在OnPaint()中重寫代碼,當(dāng)窗口重繪時再只顯示。

卅五:對狀態(tài)欄的指示行的編程 ①在響應(yīng)的類中作消息響應(yīng)。并編代碼。②通過Cstring對象格式化記錄要輸出的內(nèi)容如

CString str;

str.Format(“x=%d,y=%d”,point.x,point.y);③顯示(有四種方法)一:((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);m_wndStatusBar為CstatusBar類對象

二:((CMainFrame*)GetParent())->SetMessageText(str);

三:((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);四str);

AFX_IDW_STATUS_BAR為系統(tǒng)準(zhǔn)備的狀態(tài)欄ID號;

:GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(卅六:進(jìn)度欄的編寫:CprogressCtr類

①在頭文件中建立一個CprogressCtrr類對象。并在OnCreate()中通過對象創(chuàng)建一個進(jìn)度欄。②

卅七:發(fā)送自定義消息:

①在頭文件中定義消息宏:#define UM_PROGRESS

WM_USER+1 ②作消息映射③在要響應(yīng)消息處通過SendMessage(UM_PROGRESS)或PostMessage(UM_PROGRESS)發(fā)送消息調(diào)用函數(shù)做要做的任務(wù)。SendMessage(UM_PROGRESS)發(fā)送消息馬上調(diào)用函數(shù)

ostMessage(UM_PROGRESS)發(fā)送消息到消息隊列中,并繼續(xù)運行進(jìn)程。

卅八:為應(yīng)用程序添加啟動畫面

①1系統(tǒng)添加法:① Project->Add to Project->Components and Controls->Visual C++ conpenets->Splash Screen->Insert->選擇類(不能選CmainFram)

②在Ontimer()中對顯示時間做設(shè)計。如果手動添加可參看這個方法。

卅九:使用標(biāo)準(zhǔn)顏色對話框,標(biāo)準(zhǔn)字體對話框(CcolorDialog類,CfontDialog類)

顏色對話框:①做消息響應(yīng)并建立控件對象,CColorDialog dlg;②創(chuàng)建顏色對話框并通過對象的數(shù)據(jù)成員m_cc指向的結(jié)構(gòu)取的選擇的顏色dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;//設(shè)計標(biāo)記if(IDOK==dlg.DoModal()){

COLORREF m_clr=dlg.m_cc.rgbResult;}通過rgbResult的記錄輸出客戶的選擇。就可以在畫筆、畫刷、字體設(shè)計顏色。

字體對話框(雷同):①做消息響應(yīng)并建立控件對象,CFontDialog dlg;②創(chuàng)建字體對話框并通過對象的數(shù)據(jù)成員m_cf指向的結(jié)構(gòu)變量lpLogFont的字體值初始化自定義字體CFont m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);就可為DC加載字體③為聯(lián)系創(chuàng)建字體,要對m_font資源做判斷,如果存在就釋放資源在創(chuàng)建。

if(m_font.m_hObject)m_font.DeleteObject();查MSDN的類和它們的成員變量看事例。

四十:改變對話框的背景色,控件字體色、背景色(Cbutton除外)。

①做WM_CTLCOLOR消息響應(yīng),并創(chuàng)建一個CBRUSH對象,return這個對象來改變對話框的背景色 ②通過pWnd->GetDlgCtrlID()==ID—做判斷,/用

pDC

調(diào)用SetTextColor(RGB(255,0,0));

SetBkMode(TRANSPARENT);SetBkColor(RGB(0,0,255));改變控件字體色、背景色,背景模式。

泗一:改變CButton控件字體色、背景色

①在工程中加入一個以CButton為基類的新類。并重載虛函數(shù)DrawItem();②在函數(shù)體中加入MSDN中CButton類的DrawItem()的示例代碼。(改變背景色要自寫代碼)。

③在CButton控件中關(guān)聯(lián)這個新類的變量,同時將控件屬性Styles->Ower Draw選擇上就可以改變字體色。改變背景色代碼:有別人寫的CSXBtn類和CButtonST類,以備:加載到工程中。

用CSXBtn類雷同上,CButtonST類如下:

①加載CButtonST到工程中,在CButton控件中關(guān)聯(lián)這個新類的變量,重載:OnInitDialog()調(diào)用下面的函數(shù)

BOOL CSettingDlg::OnInitDialog()

{CDialog::OnInitDialog();m_btnST.SetActiveBgColor(RGB(0,0,255));m_btnST.SetActiveFgColor(RGB(255,0,0));}

泗二:在窗口中顯示一幅位圖。四步:

1、準(zhǔn)備一副位圖,響應(yīng)WM_ERASEBKGND消息。

2、創(chuàng)建位圖 bitmap.GetBitmap(&bmp);}

3、創(chuàng)建兼容DC CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);

4、將位圖選到兼容DC中

dcCompatible.SelectObject(&bitmap);在GetClientRect(&rect)取的客戶矩形。

5、將兼容DC中的位圖貼到當(dāng)前DC中。pDC->BitBlt(rect.left,rect.top,rect.Width(), {或pDC->StretchBlt();} rect.Height(),&dcCompatible,0,0,SRCCOPY);

6、return TRUE;后也可在OnDraw()中又重繪。CBitmap

bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

{BITMAP

bmp;泗三:圖形的保存和重繪

一法::

①在工程中添加一普通類,添加多個成員變量以保存圖形的各要素,并添加帶這幾個參數(shù)的構(gòu)造函數(shù)來初始化對象

②在繪圖的View中建立CptrArray(或別的集合類)對象,在繪圖函數(shù)中建立這個普通類的對象,沒次繪圖都記錄這些數(shù)據(jù)并用

Add()添加到集合類對象中以保存圖形。③在OnDraw()中用GetSize()取數(shù)組個數(shù)做循環(huán),嵌套switch用GetAt(i)取圖形類型重繪圖形。for(int i=0;im_nDrawType)case X:}

二法:利用兼容DC實現(xiàn)圖形的保存和重繪

①在View類中建一個CDC m_dc對象,在繪圖響應(yīng)函數(shù)中通過它建立一個兼容DC對象,并建一個兼容位圖對象記錄要保存的圖片,將兼容位圖選入兼容DC中,if(!CDC m_dcCompatible.m_hDC){ m_dcCompatible.CreateCompatibleDC(&dc);CRect rect;GetClientRect(&rect);CBitmap bitmap;

bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());m_dcCompatible.SelectObject(&bitmap);

m_dcCompatible.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);/*將原始設(shè)備顏色和象素拷貝到兼容DC中*/m_dcCompatible.SelectObject(pBrush);} ②可以用兼容DC在繪圖函數(shù)中作圖。③在重繪函數(shù)

OnDraw()中通過兼容DC將記錄的兼容位圖拷貝到矩形空間。CRect rect;GetClientRect(&rect);

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);三法:CmetaFileDC 類: 查MSDN的介紹有步驟。

泗四:文件的操作,增加“打開、保存”文件對話框,注冊表的讀寫

文件的操作:Cfile類 “打開、保存”文件對話框:CfileDialog類和m_ofn成員函數(shù)OPENFILENAME結(jié)構(gòu)。

注冊表的讀寫:查MSDN的Registry Functions

泗五:使用CArchive類對文件串行化(查MSDNCArchive類)①創(chuàng)建一個文件對象用于保存數(shù)據(jù),同時創(chuàng)建一個CArchive ar 對象。

②通過ar>>將要輸入的數(shù)據(jù)保存到文件中。同樣也可通過ar<<將文件中的數(shù)據(jù)輸出。

泗六:修改文擋標(biāo)題的方法:

①法:在C*Doc類的OnNewDocument()中調(diào)用SetTitle()。注:在文擋、視圖、框架創(chuàng)建是調(diào)用OnNewDocument(),所以可以添加代碼設(shè)計它們。

②法:在資源String Table的IDR_MAINFRAME的第一二個n間修改字符。注:IDR_MAINFRAME包含的內(nèi)容:主窗口名、文擋名、文擋類等。(查MSDN的CDOCTemplate::GetDOCString())

泗七:新類的串行化和文擋對圖形的串行化處理過程:永久保存圖形繪制圖形:

第一步:實現(xiàn)新類對串行化的支持:(查MSDNCArchive類對CObject的串行化)①建立一個記錄圖形各要素的新類,并以CObject為基類。

②在新類中覆蓋void Serialize(CArchive& ar)虛函數(shù),并通過CArchive& ar對象實現(xiàn)存取。

③在新類頭文件中加

DECLARE_SERIAL(新類名)的宏。

④在新類實現(xiàn)文件中加IMPLEMENT_SERIAL(新類名, CObject, 1)的宏。⑤在新類中重載一個不帶參數(shù)的構(gòu)造函數(shù)。(有初始化要素的構(gòu)造函數(shù))后這個類就支持串行化了。串行化完成。

⑥在新類中添加void Draw(CDC *pDC)函數(shù)實現(xiàn)對圖形的重繪。第二步:繪制圖形并永久保存圖形:①在

第二篇:《操作系統(tǒng)原理》算法總結(jié)

《操作系統(tǒng)原理》算法總結(jié)

一、進(jìn)程(作業(yè))調(diào)度算法

? 先來先服務(wù)調(diào)度算法(FCFS):每次調(diào)度是從就緒隊列中,選擇一個最先進(jìn)入就緒隊列的進(jìn)程,把處理器分配給該進(jìn)程,使之得到執(zhí)行。該進(jìn)程一旦占有了處理器,它就一直運行下去,直到該進(jìn)程完成或因發(fā)生事件而阻塞,才退出處理器。特點:利于長進(jìn)程,而不利于短進(jìn)程。

? 短進(jìn)程(作業(yè))優(yōu)先調(diào)度算法(SPF):它是從就緒隊列中選擇一個估計運行時間最短的進(jìn)程,將處理器分配給該進(jìn)程,使之占有處理器并執(zhí)行,直到該進(jìn)程完成或因發(fā)生事件而阻塞,然后退出處理器,再重新調(diào)度。

? 時間片輪轉(zhuǎn)調(diào)度算法 :系統(tǒng)將所有的就緒進(jìn)程按進(jìn)入就緒隊列的先后次序排列。每次調(diào)度時把CPU分配給隊首進(jìn)程,讓其執(zhí)行一個時間片,當(dāng)時間片用完,由計時器發(fā)出時鐘中斷,調(diào)度程序則暫停該進(jìn)程的執(zhí)行,使其退出處理器,并將它送到就緒隊列的末尾,等待下一輪調(diào)度執(zhí)行。

? 優(yōu)先數(shù)調(diào)度算法 :它是從就緒隊列中選擇一個優(yōu)先權(quán)最高的進(jìn)程,讓其獲得處理器并執(zhí)行。

? 響應(yīng)比高者優(yōu)先調(diào)度算法:它是從就緒隊列中選擇一個響應(yīng)比最高的進(jìn)程,讓其獲得處理器執(zhí)行,直到該進(jìn)程完成或因等待事件而退出處理器為止。特點:既照顧了短進(jìn)程,又考慮了進(jìn)程到達(dá)的先后次序,也不會使長進(jìn)程長期得不到服務(wù),因此是一個比較全面考慮的算法,但每次進(jìn)行調(diào)度時,都需要對各個進(jìn)程計算響應(yīng)比。所以系統(tǒng)開銷很大,比較復(fù)雜。

? 多級隊列調(diào)度算法 基本概念:

作業(yè)周轉(zhuǎn)時間(Ti)=完成時間(Tei)-提交時間(Tsi)

作業(yè)平均周轉(zhuǎn)時間(T)=周轉(zhuǎn)時間/作業(yè)個數(shù)

作業(yè)帶權(quán)周轉(zhuǎn)時間(Wi)=周轉(zhuǎn)時間/運行時間

響應(yīng)比=(等待時間+運行時間)/運行時間

二、存儲器連續(xù)分配方式中分區(qū)分配算法

? 首次適應(yīng)分配算法(FF):對空閑分區(qū)表記錄的要求是按地址遞增的順序排列的,每次分配時,總是從第1條記錄開始順序查找空閑分區(qū)表,找到第一個能滿足作業(yè)長度要求的空閑區(qū),分割這個空閑區(qū),一部分分配給作業(yè),另一部分仍為空閑區(qū)。

? 循環(huán)首次適應(yīng)算法:每次分配均從上次分配的位置之后開始查找。

? 最佳適應(yīng)分配算法(BF):是按作業(yè)要求從所有的空閑分區(qū)中挑選一個能滿足作業(yè)要求的最小空閑區(qū),這樣可保證不去分割一個更大的區(qū)域,使裝入大作業(yè)時比較容易得到滿足。為實現(xiàn)這種算法,把空閑區(qū)按長度遞增次序登記在空閑區(qū)表中,分配時,順序查找。

三、頁面置換算法

? 最佳置換算法(OPT):選擇以后永不使用或在最長時間內(nèi)不再被訪問的內(nèi)存頁面予以淘汰。

? 先進(jìn)先出置換算法(FIFO):選擇最先進(jìn)入內(nèi)存的頁面予以淘汰。

? 最近最久未使用算法(LRU):選擇在最近一段時間內(nèi)最久沒有使用過的頁,把它淘汰。

? 最少使用算法(LFU):選擇到當(dāng)前時間為止被訪問次數(shù)最少的頁轉(zhuǎn)換。

四、磁盤調(diào)度

? 先來先服務(wù)(FCFS):是按請求訪問者的先后次序啟動磁盤驅(qū)動器,而不考慮它們要訪問的物理位置

? 最短尋道時間優(yōu)先(SSTF):讓離當(dāng)前磁道最近的請求訪問者啟動磁盤驅(qū)動器,即是讓查找時間最短的那個作業(yè)先執(zhí)行,而不考慮請求訪問者到來的先后次序,這樣就克服了先來先服務(wù)調(diào)度算法中磁臂移動過大的問題

? 掃描算法(SCAN)或電梯調(diào)度算法:總是從磁臂當(dāng)前位置開始,沿磁臂的移動方向去選擇離當(dāng)前磁臂最近的那個柱面的訪問者。如果沿磁臂的方向無請求訪問時,就改變磁臂的移動方向。在這種調(diào)度方法下磁臂的移動類似于電梯的調(diào)度,所以它也稱為電梯調(diào)度算法。

? 循環(huán)掃描算法(CSCAN):循環(huán)掃描調(diào)度算法是在掃描算法的基礎(chǔ)上改進(jìn)的。磁臂改為單項移動,由外向里。當(dāng)前位置開始沿磁臂的移動方向去選擇離當(dāng)前磁臂最近的哪個柱面的訪問者。如果沿磁臂的方向無請求訪問時,再回到最外,訪問柱面號最小的作業(yè)請求。

下載孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文)word格式文檔
下載孫鑫C++視頻教程總結(jié)(內(nèi)功=算法+數(shù)據(jù)結(jié)構(gòu)+編譯原理+操作系統(tǒng)原理+軟件工程+英文).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    主站蜘蛛池模板: 一区二区亚洲精品国产片| 亚洲一区精品二人人爽久久| 国产精品导航一区二区| 精品亚洲一区二区三区在线观看| 99国产精品无码| 日韩视频无码中字免费观| 欧美另类在线制服丝袜国产| 国产精品 中文字幕 亚洲 欧美| 亚洲精品亚洲人成人网| 日韩精品人妻无码久久影院| 欧美疯狂xxxx乱大交| 两性色午夜视频免费无码| 视频区 国产 图片区 小说区| 小12萝裸体自慰出白浆| 国产无遮挡又爽又黄大胸免费| 免费国产黄网站在线观看| 精品久久久久久中文字幕| 国产超碰人人模人人爽人人添| 欧美黑人粗大猛烈18p| 久久精品国产乱子伦| 亚洲午夜国产精品无码| 午夜亚洲国产理论片中文飘花| 久久久久久av无码免费网站| 国产麻豆亚洲精品一区二区| 99视频偷窥在线精品国自产拍| 岛国在线观看无码不卡| 精品久久久久久国产| 免费无码又爽又刺激软件下载| 精品亚洲成a人在线看片| 亚洲欧洲国产成人综合在线| 加勒比中文字幕无码一区| 福利一区二区三区视频在线观看| 国产女厕所盗摄老师厕所嘘嘘| 麻批好紧日起要舒服死了| 中文字幕 日韩 人妻 无码| 中文在线а√天堂官网| 国产精品视频第一区二区三区| 国产边打电话边被躁视频| 国产精品综合av一区二区国产馆| 法国白嫩大屁股xxxx| 亚洲精品国产第一综合99久久|