VC練習(xí)題(網(wǎng)上收集)
zhangtaolmq
VC習(xí)題1
1.2 下列對于WinMain函數(shù)的描述中,錯誤的是( C )。
A)WinMain函數(shù)的名稱是固定的
B)WinMain函數(shù)是Windows程序的入口點
C)WinMain函數(shù)不能有參數(shù)
D)窗口函數(shù)與WinMain的關(guān)聯(lián)是通過窗口類的注冊實現(xiàn)的
1.3 以下四個特性中哪一個不屬于面向?qū)ο蟮娜筇匦裕?/span> A)。
A)封裝性 B)多態(tài)性 C)抽象性 D)繼承性
1.4 下列關(guān)鍵字中哪一個不是用于類的訪問控制的( B )。
A)public B)friend C)private D)protected
1.5 下面四個MFC類中哪一個是管理MFC應(yīng)用程序的( A)。
A)CWinApp B)CMainFrame C)CDocument D)CView
1.6 下列類中不屬于MFC框架基本類的是(D )。
A)CWinApp B)CFrameWnd C)CView D)CObject
1.7 傳統(tǒng)的軟件開發(fā)主要采用 過程 驅(qū)動的方法,而Windows程序的開發(fā)使用消息 驅(qū)動模型,該模型靠事件機制來實現(xiàn)其功能。
1.8 主框架類是應(yīng)用程序中負(fù)責(zé)控制菜單、工具欄和狀態(tài)欄等界面元素的最主要的類。
習(xí)題2
2.1 Windows 應(yīng)用程序的消息來源主要包括 輸入消息、控制消息和系統(tǒng)消息、用戶消息
2.2 SendMessage 向CWnd對象發(fā)送一個消息,直到這條消息被處理之后才返回
PostMessage 將一條消息放入應(yīng)用程序的消息隊列,然后不等窗口處理這條消息直接返回
2.3 CCmdUI類的主要功能是主要用來更新命令用戶接口的狀態(tài)。如子菜單。工具欄上的按鈕等 。
2.4 代碼ON_UPDATE_COMMAND_UI(ID_TEST, OnUpdateTest)的功能是:將對ID_TEST的更新命令接口消息的處理映射到OnUpdateTest函數(shù)上。
2.5 CString類的功能是處理字符串,其Format函數(shù)的功能是格式化字符串 。
2.6 CTime類的功能是 處理日期時間,其Format函數(shù)的功能是將時間對象格式化為字符串
2.7 MessageBox函數(shù)的第一個參數(shù)表示 消息文字,第二個參數(shù)表示 標(biāo)題文字,第三個參數(shù)表示 圖標(biāo)與按鈕組合 。
2.8 在windows中,按下一個字符鍵,會依次觸發(fā)WM_KEYDOWN WM_CHAR、和WM_KEYUP三個消息。
2.9 當(dāng)Windows窗口內(nèi)部需要重新繪制時,會得到一個 WM_PAINT 消息,當(dāng)釋放鼠標(biāo)右鍵時,會得到一個 WM_RBUTTONUP 消息。
習(xí)題三
3.1 Visual C++提供的資源編輯器不能編輯下列哪個資源(C )。
A)菜單 B)工具欄 C)狀態(tài)欄 D)位圖
3.2 MFC應(yīng)用程序框架為狀態(tài)欄定義的靜態(tài)數(shù)組indicators放在哪個文件中( A )。
A)MainFrm.cpp B)MainFrm.h C)stdafx.cpp D)stdafx.h
3.3 deletemenu用來刪除某個菜單項,如果被刪除的菜單項有相關(guān)的彈出菜單,則該彈出菜單的句柄也要被刪除并釋放內(nèi)存。appendmenu用來追加某個菜單項, trackpopupmenu 用來在一個POINT結(jié)構(gòu)所指定的位置顯示一個上下文菜單。
3.4工具欄上的按鈕能觸發(fā)的消息 command和 update_command_ui。
3.5 狀態(tài)欄上的窗格可以分為信息行窗格和 指示器窗格兩類。
3.6 getsubmenu 可以得到指向某列菜單的指針。
3.7 下列函數(shù)中,可以實現(xiàn)畫圓功能的是(B )。
A)Rectangle B)Ellipse C)Circle D)Line
3.8 CDC類為用戶提供了下列四個文本輸出函數(shù),其中,能使輸出的文本呈現(xiàn)一個多列列表格式的是(C )。
A)TextOut B)ExtTextOut C)TabbedTextOut D)DrawText
3.9下列類中哪一個不是GDI對象類(B )。
A)CPen B)CWnd C)Cbrush D)CRgn
習(xí)題四
4.1下面哪個不是CDC類的派生類( A )。
A)GDI類 B)CPaintDC類 C)CClientDC類 D)CWindowDC類
4.2 CDC類中實現(xiàn)繪制矩形功能的函數(shù)是 Rectangle,實現(xiàn)繪制橢圓功能的函數(shù)是 Ellipse,改變文本顏色的函數(shù)是 SetTextColo改變文本背景顏色的函數(shù)是 SetBkcolor在指定位置顯示字符串的函數(shù)是 Textout 。
4.3 MFC繪圖要素主要分為兩大類,即 設(shè)備場景 和基本繪圖工具 。
4.4 Windows引入圖形設(shè)備接口的目的是屏蔽底層硬件的繪圖細(xì)節(jié),使編程更加容易 。
4.5 Windows用 COLORREF 類型的數(shù)據(jù)存放顏色,它采用3個參數(shù)表示紅、綠、藍(lán)三元基本色的分量值,這3個值的取值范圍為 0~255 。
4.6 創(chuàng)建畫筆后,必須調(diào)用CDC類的成員函數(shù) SelectObject將新畫筆選進(jìn)當(dāng)前的繪圖環(huán)境。
4.7 MFC中的CDialog類封裝了對話框的顯示、關(guān)閉等常用功能,其中,用來顯示模態(tài)對話框的是函數(shù)( C )。
A)CreateWindow B)ShowWindow C)DoModal D)UpdateWindow
4.8 對話框創(chuàng)建后,還沒顯示前就會觸發(fā)( B )消息。
A)WM_PAINT B)WM_INITDIALOG C)WM_CREATE D)WM_SIZE
4.9 通用對話框中,屬于非模態(tài)對話框的是(D)。
A)文件對話框 B)顏色對話框 C)打印對話框 D)查找對話框
習(xí)題五
5.1 要打開文件,應(yīng)該使用哪個通用對話框( A )。
A)CFileDialog B)CColorDialog C)CPrintDialog D)CFontDialog
5.2 通常將對話框的初始化工作放在下列哪個函數(shù)中進(jìn)行( C )。
A)OnOK B)OnCancel C)OnInitDialog D)DoModal
5.3所有通用對話框都是由公共基類CCommonDialog派生出來的, CColorDialog實現(xiàn)了標(biāo)準(zhǔn)的顏色對話框。
5.4 MFC中,與屬性對話框相關(guān)的兩個類是 CPropertyPage 和CPropertySheet
5.5下列控件中不屬于按鈕的是( B )。
A)下壓按鈕 B)列表框 C)單選框 D)復(fù)選框
5.6 如果在輸入時采用選擇的方法進(jìn)行,以下哪個控件不能實現(xiàn)( D )。
A)列表框控件 B)單選按鈕 C)復(fù)選框 D)編輯框
5.7 下面對UpdateData函數(shù)的描述中錯誤的是( D )。
A)CWnd::UpdateData函數(shù)實現(xiàn)對控件中數(shù)值的輸入和讀取
B)UpdateData只有一個為TRUE或FALSE的參數(shù)
C)當(dāng)調(diào)用UpdateData(FALSE)時,數(shù)據(jù)由控件關(guān)聯(lián)的變量向控件傳輸
D)當(dāng)調(diào)用UpdateData(TRUE)時,數(shù)據(jù)由控件關(guān)聯(lián)的變量向控件傳輸
5.8 有兩種方法可以創(chuàng)建靜態(tài)文本控件,一種是使用資源編輯器添加,另一種是 使用create函數(shù)動態(tài)創(chuàng)建。
5.9 使用滾動條控件一般要用到控件所在對話框類的WM_HSCROLL和 WM_VSCROLL 消息。
習(xí)題六
6.1 判斷一組單選按鈕中哪一個被選中了,要應(yīng)用GetCheckedRadioButton 函數(shù)。
6.2 GetScrollpos函數(shù)可以得到滾動條的滑塊位置, SetScrollpos函數(shù)可以設(shè)置滾動條的滑塊位置, Getpos可以得到滑動條的當(dāng)前位置, Setpos 函數(shù)可以設(shè)置滑動條的當(dāng)前位置。
6.3 CListBox類中的 InsertString 函數(shù)可以為列表框插入一個新的字符串, ResetContent 函數(shù)可以清空所有列表項內(nèi)容。
6.4當(dāng)程序需要與界面交換數(shù)據(jù)時,應(yīng)該調(diào)用 UpdataData 函數(shù)。
6.5 GetDocument 是視圖類的成員函數(shù),調(diào)用它可以得到指向與之關(guān)聯(lián)的文檔對象的指針,文檔的串行化在Serialize 函數(shù)中進(jìn)行。
6.6 在程序的任何一個類中訪問應(yīng)用程序類的函數(shù)為 AfxGetApp ,在程序的任何一個類中訪問框架窗口類的函數(shù)為AfxGetMainWnd() 。
6.7基于單文檔/視圖結(jié)構(gòu)的框架程序中包含的類有 CWinApp 、 CFrameWnd 、 CDocument、CDocTemplate和 Cview
6.8 ODBC體系結(jié)構(gòu)中不包括下列哪個組件( C )。
A)ODBC管理器 B)數(shù)據(jù)源 C)驅(qū)動程序管理器 D)數(shù)據(jù)庫管理系統(tǒng)DBMS
6.9 記錄集可以分為 Dynaset(動態(tài)集) 和 Snapshot(快照)兩種。
習(xí)題七
7.1 MFC的ODBC類主要包括5個類,分別是CDatabase、CRecordset 、 CRecordView 、 CDBException和 CFieldExchange 。
7.2可以利用CRecordset類的 AddNew函數(shù)添加一條新記錄,利用CRecordset類的 MoveFirst函數(shù)將記錄指針移動到第一條記錄上,利用CRecordset類的Update 函數(shù)實現(xiàn)數(shù)據(jù)庫記錄的保存。
7.3下列函數(shù)中,能為狀態(tài)欄第二個信息格設(shè)定文字的是( A )
a)SetPaneText b)SetWindowText c)SetPaneInfo d)SetText
簡答題:
1. 定義和使用消息映射表的步驟 :
① 在頭文件的類聲明中添加DECLARE_MESSAGE_MAP宏聲明消息映射;
② 在類的定義文件(.cpp)定義消息映射表,方法是在 文件的開始處添加BEIGN_MESSAGE_MAP和END_MESSAGE_MAP 這一對宏,在它們之間放置消息映射宏,定義并初始化消息映射表,在消息與處理消息的函數(shù)之間建立聯(lián)系;
③ 在類的定義文件(.cpp)中添加消息處理函數(shù)。
2.什么是消息映射?
所謂消息映射,簡單地講,就是讓程序員指定要某個MFC類(有消息處理能力的類)處理某個消息。MFC提供了工具ClassWizard來幫助實現(xiàn)消息映射,在處理消息的類中添加一些有關(guān)消息映射的內(nèi)容和處理消息的成員函數(shù)。程序員將完成消息處理函數(shù),實現(xiàn)所希望的消息處理能力。
如果派生類要覆蓋基類的消息處理函數(shù),就用ClassWizard在派生類中添加一個消息映射條目,用同樣的原型定義一個函數(shù),然后實現(xiàn)該函數(shù)。這個函數(shù)覆蓋派生類的任何基類的同名處理函數(shù)。
3.創(chuàng)建一個窗口的步驟?
創(chuàng)建一個完整的窗口需要經(jīng)過下面四個操作步驟
設(shè)計一個窗口類;
注冊窗口類;
創(chuàng)建窗口;
顯示及更新窗口。
4.什么是模態(tài)對話框?什么是非模態(tài)對話框?
所謂“模態(tài)對話框”是指對話框被彈出后用戶必須在對話框中作出相應(yīng)的操作;在退出對話框之前,會阻止其他應(yīng)用程序的運行(包括它所在的應(yīng)用程序)
所謂“非模態(tài)對話框”是指當(dāng)對話框被彈出后,將一直保留在屏幕上,但不影響其他應(yīng)用程序的運行,用戶可以繼續(xù)在對話框所在的應(yīng)用程序中進(jìn)行其他操作;當(dāng)需要使用對話框時,只需像激活一般窗口一樣單擊對話框所在的區(qū)域即可。例如在Microsoft Word中的“查找”和“替換”對話框。
5.文檔/視圖結(jié)構(gòu)的工作機制
l 視圖通過GetDocument成員函數(shù)獲得指向相關(guān)聯(lián)的文檔對象的指針
l 通過該指針調(diào)用文檔類的成員函數(shù)來從文檔中讀取數(shù)據(jù)
l 視圖把數(shù)據(jù)顯示于計算機屏幕上
l 用戶通過與視圖的交互來查看數(shù)據(jù)并對數(shù)據(jù)進(jìn)行修改
l 視圖通過相關(guān)聯(lián)的文檔類的成員函數(shù)將經(jīng)過修改的數(shù)據(jù)傳遞給文檔對象
l 文檔對象獲得修改過的數(shù)據(jù)之后,對其進(jìn)行必要的修改,最后保存到永久介質(zhì)(如磁盤文件)中
6.從CDocument類派生新的文檔類的一般過程如下:
為每一個文檔類型從CDocument類派生一個相應(yīng)的文檔類。為文檔類添加成員變量,這些變量主要用來保存文檔的數(shù)據(jù),并使其它的對象(如視圖對象)可以訪問這些成員變量,從而實現(xiàn)文檔和視圖的相互搭配使用。重載Serialize成員函數(shù),實現(xiàn)文檔數(shù)據(jù)的串行化。
7. 串行化的好處
使用串行化的好處:是不需要重載文件打開、文件保存之類的方法,MFC框架會自動完成這些任務(wù),并自動調(diào)用文檔類的Serialize方法來完成串行化過程。
如果文檔的抽象數(shù)據(jù)只有一個字符串,那么你只需要在Serialize中添加相映語句就可以完成串行化過程。
8、簡述在MFC Windows應(yīng)用程序中使用CBrush對象的基本步驟。
l 創(chuàng)建畫刷(可調(diào)用畫刷創(chuàng)建函數(shù)CreateSolidBrush、CreateHatchBrush)
l 將畫刷選入設(shè)備環(huán)境(調(diào)用SelectObject)
l 使用該刷子進(jìn)行繪畫
l 刪除畫刷
9、簡述文檔/視圖結(jié)構(gòu)中包含的主要的類及各個類之間的相互關(guān)系。
包括 CWinApp、 CDocument 、CView、 CDocTemplate 、 CFrameWnd 類
一個 App可以包含多個文檔模版( CDocTemplate ),但是 MFC AppWizard (無論是 SDI 還是 MDI )都只是默認(rèn)生成一個。但是在實際開發(fā)中一個文檔模版不夠,需要自己手工添加。這個結(jié)構(gòu)是通過 MFC 中 CWinApp 的成員變量 CDocManager * m_pDocManager 實現(xiàn)的。
CDocTemplate 擁有 3 個成員變量,分別保存著 Document 、 View 、 Frame 的 CRuntimeClass 指針,另外持有成員變量 m_nIDResource ,用來指定這個 Document 顯示時候采用的菜單資源。
一個文檔可以有多個視圖,由 Document 中成員變量 CPtrList m_ViewList 維護(hù)。
CFrameWnd 擁有一個成員變量 CView* m_pActiveView 指向當(dāng)前活動的 View。
CView 中擁有一個成員變量 CDocument* m_pDocument 指向該視圖相關(guān)的 Document。
10、寫出按鈕Show和Show the Age響應(yīng)單擊消息的函數(shù)OnEnable()、OnShow()和OnShowage()。函數(shù)OnShow()使編輯框IDC_EDIT1和IDC_EDIT2處于顯示狀態(tài),函數(shù)OnShowage()要能夠判斷出單選按鈕IDC_RADIO1、IDC_RADIO2和IDC_RADIO3哪個被選中,并將被選中單選按鈕的標(biāo)題添加到組合框IDC_COMBO1中,設(shè)為組合框的默認(rèn)選項。
CMyDialog::OnEnable()
{
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
}
CMyDialog::OnShow()
{
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
}
CMyDialog::Onshowage()
{
CString strText;
int i=-1;
i=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);
if(i==IDC_RADIO1)
strText=">20";
else if(i==IDC_RADIO2)
strText="15-20";
else if(i==IDC_RADIO3)
strText="<15";
GetDlgItem(IDC_COMBO1)->SetWindowText(strText);
}
2、下面左圖為菜單結(jié)構(gòu),右圖為運行結(jié)果,寫出彈出菜單的代碼。
void CPopupmenuView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menuPopup ;
if(menuPopup.LoadMenu(IDR_MAINFRAME))
menuPopup.GetSubMenu (4)->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x , point.y , this);
}