Visual C++開發中常見問題的答案
1、簡述VC6下如何進行程序的調試
在主菜單"Build"中,有一個Start Build的子菜單,它下面包含了Go菜單(快捷鍵為F5),選擇后,程序將從當前語句進入調試運行,直到遇到斷點或程序結束。
將鼠標移動到要調試的代碼行,單擊鼠標右鍵選擇“Insert/Remove Breakpoint”,或者按下F9,可以在該行上添加斷點,此時斷點代碼行前面出現一個棕色的圈,再次選擇將清除斷點。進入調試狀態后,Debug菜 單將取代Build菜單出現在菜單欄中,它下面包含常用的調試操作,如Step Over,單步運行并不跟蹤到調用的函數內部;其他還包括Step Into,Step Out, Stop Debugging等調試方法。
2、簡述在VC6建立的工程中后綴為.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么?
.cpp是源程序代碼C++文件
.h是包含函數聲明和變量定義的頭文件
.rc是定義資源的資源腳本文件
.dsp是工程文件,記錄當前工程的有關信息
.dsw是工作區文件,一個工作區可能包含一個或多個工程
3、已知一個對話框上有一個編輯框控件,ID為IDC_EDIT1,為其關聯了CEdit類型的變量m_edit1,使用兩種方法,說明如何改變編輯框內部的文本為"Hello",寫出程序代碼的片斷。
第一種方法:
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel("Hello");
第二種方法:
SetWindowText("Hello");
4、簡述使用Windows API編寫的一個基本的Windows應用程序框架的結構。
Windows API編寫的基本應用程序框架至少應該包含程序入口函數WinMain和窗口函數WndProc。在主函數WinMain里面包含窗口類的定義和注冊,窗口的創建和顯示以及消息循環。
5、消息在Windows中的數據類型是什么,它有哪些成員變量,各有什么含義
消息的數據類型是MSG,它是一個結構體,其成員變量主要包括hwnd,表示消息的窗口句柄;message代表消息的類型;wParam和lParam包含消息的附加信息,隨不同的消息有所不同。
6、Windows的鼠標消息的長參數lParam與字參數wParam的含義是什么
鼠標消息的長參數lParam的低字節包含了鼠標光標位置的x坐標值,lParam的高字節包含了鼠標光標位置的y坐標值;字參數wParam內包含了指示當前按下的各種虛鍵狀態的值。
7、說明使用一個非模態對話框的注意問題和用到的Windows API函數
使用一個非模態對話框應該注意一定要在樣式中包含WS_VISIBLE才能正常顯示;創建對話框使用CreateDialog函數;消息循環部分應該使用IsDialogMessage過濾消息;關閉對話框使用函數DestroyWindow。
8、簡述在MFC應用程序中UpdateData函數的作用及其參數含義與使用場合。
UpdateData只有一個BOOL類型的參數,UpdateData(FALSE)一般用于對話框控件連接的變量值刷新屏幕顯示;UpdateData(TRUE)用于獲取屏幕數據到對話框控件連接的變量中。
9、列舉列表框控件能夠接受的三個消息類型,并說明其作用
LB_ADDSTRING用于在列表框中加入一項字符串;LB_DIR用于在列表框中列出指定文件;LB_GETTEXT用于獲取指定項的文本。
10、在一個對話框上添加了三個單選按鈕,要使它們之間自動實現互斥,應該注意什么問題,在VC環境下如何操作?
要實現一組單選按鈕的自動互斥,應該讓它們的控件ID值連續,并設置第一個單選按鈕的Group屬性,其他的不設。
11、簡述由一個文檔類派生自己的文檔類,并實現文檔的存取需要哪些步驟。
首先為每一個文檔類型從CDocument派生一個相應的文檔類;然后為該文檔類添加成員變量以保存數據;最后重載Serialize成員函數以實現文檔數據的串行化。
12、列舉視圖類(CView)的三個子類,并簡要說明其作用。
CScrollView類提供視圖的滾動顯示;CEditView類支持在視圖中的文本編輯操作;CHtmlView類支持在視圖中顯示和操作html文件。
13、Visual C++ 6.0如何進入調試狀態,在調試狀態下能夠顯示哪些調試窗口,列舉三個,其作用分別是什么?
啟動調試后,在View菜單的Debug Window子菜單下可以打開一些輔助調試的窗口
Watch:顯示察看當前語句和前面語句中變量值的窗口
Call Stack:顯示察看調用堆棧的窗口
Memory:顯示察看內存中內容的窗口
14、說明位圖資源的創建及顯示過程的步驟,并給出相應的Windows API函數名。
首先定義位圖句柄HBITMAP hBitmap;第二步使用LoadBitMap加載位圖;第三步,調用CreateCompatibleDC向系統申請內存設備環境句柄,并調用函數 SelectObject把位圖選入內存設備環境;第四步,調用BitBlt函數將位圖從內存設備環境輸出到指定的窗口設備環境中,從而實現顯示位圖。
15、如何獲取字體句柄從而實現字體的輸出,并給出相應的Windows API函數名。
首先定義字體句柄變量HFONT hF;然后調用函數GetStockObject獲取系統的字體句柄,或者調用CreateFont得到自定義的字體句柄;最后調用SelectObject把字體句柄選入設備環境。
16、列舉三種按鈕的類型,并說明其作用和創建方法之間的不同之處。
常用的按鈕有普通按鈕、單選按鈕、復選框,和組框。普通按鈕作用是幫助用戶觸發指定動作;單選按鈕一般各選項之間存在互斥性;復選框用來顯示一組選項供用戶選擇,各選項之間不存在互斥;組框主要用于把控件分成不同的組并加以說明.
17、要使一個靜態控件顯示一個位圖并能接受用戶輸入,應該注意什么問題。
要使靜態控件顯示位圖,必須設定其風格包含SS_BITMAP,并在創建靜態控件窗口,即調用CreateWindow時指定并加載位圖;要使靜態控件能夠接收用戶輸入,必須設定其風格包含SS_NOTIFY。
18、列舉滾動條控件的四種類型的動作標識,并說明其發生的場合。
常用的滾動條控件的動作標識包括(對于垂直滾動條):SB_LINEUP表示向上滾動一行;SB_LINEDOWN表示向下滾動一行;SB_PAGEUP表示向上滾動一頁;SB_PAGEDOWN表示向下滾動一頁。
19、說明使系統定時器消息(WM_TIMER)的使用方法及其用到的Windows API函數
使用定時器消息的方法是:首先調用SetTimer函數定義定時器消息,包括消息產生的時間間隔等;然后在相應的WM_TIMER消息處理里添加定時器消息響應代碼;最后調用KillTimer釋放該定時器。
20、MFC應用程序向導能夠創建那幾種類型的應用程序框架,哪些采用了文檔/視圖結構。
MFC應用程序向導能建立基于單文檔(SDI),基于多文檔(MDI)和基于對話框(Dialog Based)三種應用程序的框架。其中前兩種采用了文檔/視圖結構。
21、列舉五種控件,說明其作用和MFC對應的類名
CStatic是靜態文本控件窗口,用于標注、分隔對話框或窗口中的其他控件;CButton是按鈕控件窗口,為對話框或窗口中的按鈕、單選按鈕和多 選按鈕等提供一個總的類;CScrollBar是滾動條控件窗口,提供滾動條的功能,用于在對話框或窗口中的一個控件,通過它在某一范圍內定位; CListBox是列表框控件窗口,列表框用于顯示一組列表項,用戶可以進行觀察和選擇;CProgressCtrl是進度條控件窗口,用于指示一個操作 的進度。
22、MFC的文檔/視圖結構中說明視圖類如何訪問文檔類,文檔類如何通知視圖類進行更新,給出成員方法名?
MFC的文檔/視圖結構中,視圖類通過其成員方法GetDocument獲得對應文檔類的指針,從而訪問文檔類的數據;文檔類通過其成員方法UpdateAllViews通知所有視圖,文檔已經被修改,視圖應該被重畫。
23、簡述在一個基于對話框的MFC應用程序框架中添加一個編輯框(編輯框的控件ID是IDC_EDIT1,已經為其連接了變量m_edit1),要 求在其中動態顯示示當前時間,時間格式為“HH:mm:ss",如"15:20:16",每一秒鐘刷新一次,如何實現,給出代碼片斷。(提示:使用定時器 SetTimer)
實現方法:實現定時器,每隔一秒鐘發出WM_TIMER消息,并在該消息相應函數中添加代碼更新編輯框內容。
第一步:為對話框的WM_INITDIALOG的消息響應函數OnInitDialog中添加代碼: SetTimer(1,100,NULL);
第二步: 為對話框添加WM_TIMER的消息相應函數OnTimer,并在其中添加代碼:
CTime tNow;
tNow=CTime::GetCurrentTime();
CString sNow=tNow.Format("%I:%M:%S");
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel(sNow);
第二步: 為對話框的WM_DESTRYOY的消息響應函數OnDestroy中添加代碼 KillTimer(1);
1、簡述VC6下如何進行程序的調試
在主菜單"Build"中,有一個Start Build的子菜單,它下面包含了Go菜單(快捷鍵為F5),選擇后,程序將從當前語句進入調試運行,直到遇到斷點或程序結束。
將鼠標移動到要調試的代碼行,單擊鼠標右鍵選擇“Insert/Remove Breakpoint”,或者按下F9,可以在該行上添加斷點,此時斷點代碼行前面出現一個棕色的圈,再次選擇將清除斷點。進入調試狀態后,Debug菜 單將取代Build菜單出現在菜單欄中,它下面包含常用的調試操作,如Step Over,單步運行并不跟蹤到調用的函數內部;其他還包括Step Into,Step Out, Stop Debugging等調試方法。
2、簡述在VC6建立的工程中后綴為.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么?
.cpp是源程序代碼C++文件
.h是包含函數聲明和變量定義的頭文件
.rc是定義資源的資源腳本文件
.dsp是工程文件,記錄當前工程的有關信息
.dsw是工作區文件,一個工作區可能包含一個或多個工程
3、已知一個對話框上有一個編輯框控件,ID為IDC_EDIT1,為其關聯了CEdit類型的變量m_edit1,使用兩種方法,說明如何改變編輯框內部的文本為"Hello",寫出程序代碼的片斷。
第一種方法:
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel("Hello");
第二種方法:
SetWindowText("Hello");
4、簡述使用Windows API編寫的一個基本的Windows應用程序框架的結構。
Windows API編寫的基本應用程序框架至少應該包含程序入口函數WinMain和窗口函數WndProc。在主函數WinMain里面包含窗口類的定義和注冊,窗口的創建和顯示以及消息循環。
5、消息在Windows中的數據類型是什么,它有哪些成員變量,各有什么含義
消息的數據類型是MSG,它是一個結構體,其成員變量主要包括hwnd,表示消息的窗口句柄;message代表消息的類型;wParam和lParam包含消息的附加信息,隨不同的消息有所不同。
6、Windows的鼠標消息的長參數lParam與字參數wParam的含義是什么
鼠標消息的長參數lParam的低字節包含了鼠標光標位置的x坐標值,lParam的高字節包含了鼠標光標位置的y坐標值;字參數wParam內包含了指示當前按下的各種虛鍵狀態的值。
7、說明使用一個非模態對話框的注意問題和用到的Windows API函數
使用一個非模態對話框應該注意一定要在樣式中包含WS_VISIBLE才能正常顯示;創建對話框使用CreateDialog函數;消息循環部分應該使用IsDialogMessage過濾消息;關閉對話框使用函數DestroyWindow。
8、簡述在MFC應用程序中UpdateData函數的作用及其參數含義與使用場合。
UpdateData只有一個BOOL類型的參數,UpdateData(FALSE)一般用于對話框控件連接的變量值刷新屏幕顯示;UpdateData(TRUE)用于獲取屏幕數據到對話框控件連接的變量中。
9、列舉列表框控件能夠接受的三個消息類型,并說明其作用
LB_ADDSTRING用于在列表框中加入一項字符串;LB_DIR用于在列表框中列出指定文件;LB_GETTEXT用于獲取指定項的文本。
10、在一個對話框上添加了三個單選按鈕,要使它們之間自動實現互斥,應該注意什么問題,在VC環境下如何操作?
要實現一組單選按鈕的自動互斥,應該讓它們的控件ID值連續,并設置第一個單選按鈕的Group屬性,其他的不設。
11、簡述由一個文檔類派生自己的文檔類,并實現文檔的存取需要哪些步驟。
首先為每一個文檔類型從CDocument派生一個相應的文檔類;然后為該文檔類添加成員變量以保存數據;最后重載Serialize成員函數以實現文檔數據的串行化。
12、列舉視圖類(CView)的三個子類,并簡要說明其作用。
CScrollView類提供視圖的滾動顯示;CEditView類支持在視圖中的文本編輯操作;CHtmlView類支持在視圖中顯示和操作html文件。
13、Visual C++ 6.0如何進入調試狀態,在調試狀態下能夠顯示哪些調試窗口,列舉三個,其作用分別是什么?
啟動調試后,在View菜單的Debug Window子菜單下可以打開一些輔助調試的窗口
Watch:顯示察看當前語句和前面語句中變量值的窗口
Call Stack:顯示察看調用堆棧的窗口
Memory:顯示察看內存中內容的窗口
14、說明位圖資源的創建及顯示過程的步驟,并給出相應的Windows API函數名。
首先定義位圖句柄HBITMAP hBitmap;第二步使用LoadBitMap加載位圖;第三步,調用CreateCompatibleDC向系統申請內存設備環境句柄,并調用函數 SelectObject把位圖選入內存設備環境;第四步,調用BitBlt函數將位圖從內存設備環境輸出到指定的窗口設備環境中,從而實現顯示位圖。
15、如何獲取字體句柄從而實現字體的輸出,并給出相應的Windows API函數名。
首先定義字體句柄變量HFONT hF;然后調用函數GetStockObject獲取系統的字體句柄,或者調用CreateFont得到自定義的字體句柄;最后調用SelectObject把字體句柄選入設備環境。
16、列舉三種按鈕的類型,并說明其作用和創建方法之間的不同之處。
常用的按鈕有普通按鈕、單選按鈕、復選框,和組框。普通按鈕作用是幫助用戶觸發指定動作;單選按鈕一般各選項之間存在互斥性;復選框用來顯示一組選項供用戶選擇,各選項之間不存在互斥;組框主要用于把控件分成不同的組并加以說明.
17、要使一個靜態控件顯示一個位圖并能接受用戶輸入,應該注意什么問題。
要使靜態控件顯示位圖,必須設定其風格包含SS_BITMAP,并在創建靜態控件窗口,即調用CreateWindow時指定并加載位圖;要使靜態控件能夠接收用戶輸入,必須設定其風格包含SS_NOTIFY。
18、列舉滾動條控件的四種類型的動作標識,并說明其發生的場合。
常用的滾動條控件的動作標識包括(對于垂直滾動條):SB_LINEUP表示向上滾動一行;SB_LINEDOWN表示向下滾動一行;SB_PAGEUP表示向上滾動一頁;SB_PAGEDOWN表示向下滾動一頁。
19、說明使系統定時器消息(WM_TIMER)的使用方法及其用到的Windows API函數
使用定時器消息的方法是:首先調用SetTimer函數定義定時器消息,包括消息產生的時間間隔等;然后在相應的WM_TIMER消息處理里添加定時器消息響應代碼;最后調用KillTimer釋放該定時器。
20、MFC應用程序向導能夠創建那幾種類型的應用程序框架,哪些采用了文檔/視圖結構。
MFC應用程序向導能建立基于單文檔(SDI),基于多文檔(MDI)和基于對話框(Dialog Based)三種應用程序的框架。其中前兩種采用了文檔/視圖結構。
21、列舉五種控件,說明其作用和MFC對應的類名
CStatic是靜態文本控件窗口,用于標注、分隔對話框或窗口中的其他控件;CButton是按鈕控件窗口,為對話框或窗口中的按鈕、單選按鈕和多 選按鈕等提供一個總的類;CScrollBar是滾動條控件窗口,提供滾動條的功能,用于在對話框或窗口中的一個控件,通過它在某一范圍內定位; CListBox是列表框控件窗口,列表框用于顯示一組列表項,用戶可以進行觀察和選擇;CProgressCtrl是進度條控件窗口,用于指示一個操作 的進度。
22、MFC的文檔/視圖結構中說明視圖類如何訪問文檔類,文檔類如何通知視圖類進行更新,給出成員方法名?
MFC的文檔/視圖結構中,視圖類通過其成員方法GetDocument獲得對應文檔類的指針,從而訪問文檔類的數據;文檔類通過其成員方法UpdateAllViews通知所有視圖,文檔已經被修改,視圖應該被重畫。
23、簡述在一個基于對話框的MFC應用程序框架中添加一個編輯框(編輯框的控件ID是IDC_EDIT1,已經為其連接了變量m_edit1),要 求在其中動態顯示示當前時間,時間格式為“HH:mm:ss",如"15:20:16",每一秒鐘刷新一次,如何實現,給出代碼片斷。(提示:使用定時器 SetTimer)
實現方法:實現定時器,每隔一秒鐘發出WM_TIMER消息,并在該消息相應函數中添加代碼更新編輯框內容。
第一步:為對話框的WM_INITDIALOG的消息響應函數OnInitDialog中添加代碼: SetTimer(1,100,NULL);
第二步: 為對話框添加WM_TIMER的消息相應函數OnTimer,并在其中添加代碼:
CTime tNow;
tNow=CTime::GetCurrentTime();
CString sNow=tNow.Format("%I:%M:%S");
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel(sNow);
第二步: 為對話框的WM_DESTRYOY的消息響應函數OnDestroy中添加代碼 KillTimer(1);