VC練習題(網(wǎng)上收集)
zhangtaolmq
VC習題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)用程序中負責控制菜單、工具欄和狀態(tài)欄等界面元素的最主要的類。
習題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ù)表示 標題文字,第三個參數(shù)表示 圖標與按鈕組合 。
2.8 在windows中,按下一個字符鍵,會依次觸發(fā)WM_KEYDOWN WM_CHAR、和WM_KEYUP三個消息。
2.9 當Windows窗口內(nèi)部需要重新繪制時,會得到一個 WM_PAINT 消息,當釋放鼠標右鍵時,會得到一個 WM_RBUTTONUP 消息。
習題三
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
習題四
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è)備接口的目的是屏蔽底層硬件的繪圖細節(jié),使編程更加容易 。
4.5 Windows用 COLORREF 類型的數(shù)據(jù)存放顏色,它采用3個參數(shù)表示紅、綠、藍三元基本色的分量值,這3個值的取值范圍為 0~255 。
4.6 創(chuàng)建畫筆后,必須調(diào)用CDC類的成員函數(shù) SelectObject將新畫筆選進當前的繪圖環(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)查找對話框
習題五
5.1 要打開文件,應(yīng)該使用哪個通用對話框( A )。
A)CFileDialog B)CColorDialog C)CPrintDialog D)CFontDialog
5.2 通常將對話框的初始化工作放在下列哪個函數(shù)中進行( C )。
A)OnOK B)OnCancel C)OnInitDialog D)DoModal
5.3所有通用對話框都是由公共基類CCommonDialog派生出來的, CColorDialog實現(xiàn)了標準的顏色對話框。
5.4 MFC中,與屬性對話框相關(guān)的兩個類是 CPropertyPage 和CPropertySheet
5.5下列控件中不屬于按鈕的是( B )。
A)下壓按鈕 B)列表框 C)單選框 D)復(fù)選框
5.6 如果在輸入時采用選擇的方法進行,以下哪個控件不能實現(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)當調(diào)用UpdateData(FALSE)時,數(shù)據(jù)由控件關(guān)聯(lián)的變量向控件傳輸
D)當調(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 消息。
習題六
6.1 判斷一組單選按鈕中哪一個被選中了,要應(yīng)用GetCheckedRadioButton 函數(shù)。
6.2 GetScrollpos函數(shù)可以得到滾動條的滑塊位置, SetScrollpos函數(shù)可以設(shè)置滾動條的滑塊位置, Getpos可以得到滑動條的當前位置, Setpos 函數(shù)可以設(shè)置滑動條的當前位置。
6.3 CListBox類中的 InsertString 函數(shù)可以為列表框插入一個新的字符串, ResetContent 函數(shù)可以清空所有列表項內(nèi)容。
6.4當程序需要與界面交換數(shù)據(jù)時,應(yīng)該調(diào)用 UpdataData 函數(shù)。
6.5 GetDocument 是視圖類的成員函數(shù),調(diào)用它可以得到指向與之關(guān)聯(lián)的文檔對象的指針,文檔的串行化在Serialize 函數(shù)中進行。
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(快照)兩種。
習題七
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)對話框”是指當對話框被彈出后,將一直保留在屏幕上,但不影響其他應(yīng)用程序的運行,用戶可以繼續(xù)在對話框所在的應(yī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ù)進行修改
l 視圖通過相關(guān)聯(lián)的文檔類的成員函數(shù)將經(jīng)過修改的數(shù)據(jù)傳遞給文檔對象
l 文檔對象獲得修改過的數(shù)據(jù)之后,對其進行必要的修改,最后保存到永久介質(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 使用該刷子進行繪畫
l 刪除畫刷
9、簡述文檔/視圖結(jié)構(gòu)中包含的主要的類及各個類之間的相互關(guān)系。
包括 CWinApp、 CDocument 、CView、 CDocTemplate 、 CFrameWnd 類
一個 App可以包含多個文檔模版( CDocTemplate ),但是 MFC AppWizard (無論是 SDI 還是 MDI )都只是默認生成一個。但是在實際開發(fā)中一個文檔模版不夠,需要自己手工添加。這個結(jié)構(gòu)是通過 MFC 中 CWinApp 的成員變量 CDocManager * m_pDocManager 實現(xiàn)的。
CDocTemplate 擁有 3 個成員變量,分別保存著 Document 、 View 、 Frame 的 CRuntimeClass 指針,另外持有成員變量 m_nIDResource ,用來指定這個 Document 顯示時候采用的菜單資源。
一個文檔可以有多個視圖,由 Document 中成員變量 CPtrList m_ViewList 維護。
CFrameWnd 擁有一個成員變量 CView* m_pActiveView 指向當前活動的 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哪個被選中,并將被選中單選按鈕的標題添加到組合框IDC_COMBO1中,設(shè)為組合框的默認選項。
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);
}