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。
VC學習筆記 |
|
VC學習筆記1:按鈕的使能與禁止
用ClassWizard的Member Variables為按鈕定義變量,如:m_Button1; 則 m_Button1.EnableWindow(true); 使按鈕處于允許狀態 m_Button1.EnableWindow(false); 使按鈕被禁止,并變灰顯示
VC學習筆記2:控件的隱藏與顯示
用CWnd類的函數BOOL ShowWindow(int nCmdShow)可以隱藏或顯示一個控件。
例1: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //獲取控件指針,IDC_EDIT為控件ID號 pWnd->ShowWindow( SW_HIDE ); //隱藏控件
例2: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //獲取控件指針,IDC_EDIT為控件ID號 pWnd->ShowWindow( SW_SHOW ); //顯示控件
以上方法常用于動態生成控件,雖說用控件的Create函數可以動態生成控件,但這種控件很不好控制,所以用隱藏、顯示方法不失為一種替代手段。
VC學習筆記3:改變控件的大小和位置
用CWnd類的函數MoveWindow()或SetWindowPos()可以改變控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight); void MoveWindow(LPCRECT lpRect); 第一種用法需給出控件新的坐標和寬度、高度; 第二種用法給出存放位置的CRect對象; 例: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //獲取控件指針,IDC_EDIT1為控件ID號 pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角顯示一個寬100、高100的編輯控件
SetWindowPos()函數使用更靈活,多用于只修改控件位置而大小不變或只修改大小而位置不變的情況: BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags); 第一個參數我不會用,一般設為NULL; x、y控件位置;cx、cy控件寬度和高度; nFlags常用取值: SWP_NOZORDER:忽略第一個參數; SWP_NOMOVE:忽略x、y,維持位置不變; SWP_NOSIZE:忽略cx、cy,維持大小不變; 例: CWnd *pWnd; pWnd = GetDlgItem( IDC_BUTTON1 ); //獲取控件指針,IDC_BUTTON1為控件ID號 pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按鈕移到窗口的(50,80)處 pWnd = GetDlgItem( IDC_EDIT1 ); pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把編輯控件的大小設為(100,80),位置不變 pWnd = GetDlgItem( IDC_EDIT1 ); pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //編輯控件的大小和位置都改變 以上方法也適用于各種窗口。
VC學習筆記4:什么時候設定視中控件的初始尺寸?
我在CFormView的視中加入了一個編輯控件,在運行時使它充滿客戶區,當窗口改變大小時它也跟著改變。 改變控件尺寸可以放在OnDraw()函數中,也可放在CalcWindowRect()函數中,當窗口尺寸發生變化時,它們都將被執行,且CalcWindowRect()函數先于OnDraw()函數,下例是在CalcWindowRect()函數中修改控件尺寸。 重載VIEW類的CalcWindowRect函數,把設定控件的尺寸的語句加入這個函數中。 例: void CMyEditView::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType) { // TODO: Add your specialized code here and/or call the base class
CFrameWnd *pFrameWnd=GetParentFrame(); //獲取框架窗口指針
CRect rect; pFrameWnd->GetClientRect(&rect); //獲取客戶區尺寸
CWnd *pEditWnd=GetDlgItem(IDC_MYEDIT); //獲取編輯控件指針,IDC_MYEDIT為控件ID號 pEditWnd->SetWindowPos(NULL,0,0,rect.right,rect.bottom-50,SWP_NOMOVE | SWP_NOZORDER); //設定控件尺寸,bottom-50是為了讓出狀態條位置。
CFormView::CalcWindowRect(lpClientRect, nAdjustType); }
VC學習筆記5:單選按鈕控件(Ridio Button)的使用
一、對單選按鈕進行分組: 每組的第一個單選按鈕設置屬性:Group,Tabstop,Auto;其余按鈕設置屬性Tabstop,Auto。
如: Ridio1、Ridio2、Ridio3為一組,Ridio4、Ridio5為一組
設定Ridio1屬性:Group,Tabstop,Auto 設定Ridio2屬性:Tabstop,Auto 設定Ridio3屬性:Tabstop,Auto
設定Ridio4屬性:Group,Tabstop,Auto 設定Ridio5屬性:Tabstop,Auto
二、用ClassWizard為單選控件定義變量,每組只能定義一個。如:m_Ridio1、m_Ridio4。
三、用ClassWizard生成各單選按鈕的單擊消息函數,并加入內容:
void CWEditView::OnRadio1() { m_Ridio1 = 0; //第一個單選按鈕被選中 }
void CWEditView::OnRadio2() { m_Ridio1 = 1; //第二個單選按鈕被選中 }
void CWEditView::OnRadio3() { m_Ridio1 = 2; //第三個單選按鈕被選中 }
void CWEditView::OnRadio4() { m_Ridio4 = 0; //第四個單選按鈕被選中 }
void CWEditView::OnRadio5() { m_Ridio4 = 1; //第五個單選按鈕被選中 }
四、設置默認按鈕: 在定義控件變量時,ClassWizard在構造函數中會把變量初值設為-1,只需把它改為其它值即可。 如: //{{AFX_DATA_INIT(CWEditView) m_Ridio1 = 0; //初始時第一個單選按鈕被選中 m_Ridio4 = 0; //初始時第四個單選按鈕被選中 //}}AFX_DATA_INIT
VC學習筆記6:旋轉控件(Spin)的使用
當單擊旋轉控件上的按鈕時,相應的編輯控件值會增大或減小。其設置的一般步驟為: 一、在對話框中放入一個Spin控件和一個編輯控件作為Spin控件的伙伴窗口, 設置Spin控件屬性:Auto buddy、Set buddy integer、Arrow keys 設置文本控件屬性:Number
二、用ClassWizard為Spin控件定義變量m_Spin,為編輯控件定義變量m_Edit,定義時注意要把m_Edit設置為int型。
三、在對話框的OnInitDialog()函數中加入語句: BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) ); //設置編輯控件為Spin控件的伙伴窗口 m_Spin.SetRange( 0, 10 ); //設置數據范圍為0-10 return TRUE; }
四、用ClassWizard為編輯控件添加EN_CHANGE消息處理函數,再加入語句: void CMyDlg::OnChangeEdit1() { m_Edit = m_Spin.GetPos(); //獲取Spin控件當前值 }
OK!
VC學習筆記7:程序結束時保存文件問題
在文檔-視圖結構中,用串行化自動保存文件在各種VC書上都有介紹?,F在的問題是我不使用串行化,而是自己動手保存,當點擊窗口的關閉按鈕時,如何提示并保存文檔。
用ClassWizard在文檔類(CxxDoc)中添加函數CanCloseFrame(),再在其中加入保存文件的語句就可以了。 注:要保存的數據應放在文檔類(CxxDoc)或應用程序類(CxxApp)中,不要放在視圖類中。
例: //退出程序 BOOL CEditDoc::CanCloseFrame(CFrameWnd* pFrame) { CFile file; if(b_Flag) //b_Flag為文檔修改標志,在修改文檔時將其置為True { int t; t=::MessageBox(NULL,"文字已經改變,要存盤嗎?","警告", MB_YESNOCANCEL | MB_ICONWARNING); //彈出提示對話框 if(t==0 || t==IDCANCEL) return false; if(t==IDYES) { CString sFilter="Text File(*.txt)|*.txt||"; CFileDialog m_Dlg(FALSE,"txt",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,NULL); //定制文件對話框
int k=m_Dlg.DoModal(); //彈出文件對話框 if(k==IDCANCEL || k==0) return false; m_PathName=m_Dlg.GetPathName(); //獲取選擇的文件路徑名 file.Open(m_PathName,CFile::modeCreate | CFile::modeWrite); file.Write(m_Text,m_TextLen); //數據寫入文件 file.Close(); } } return CDocument::CanCloseFrame(pFrame); }
VC學習筆記8:UpdateData()
對于可以接收數據的控件,如編輯控件來說,UpdateData()函數至關重要。當控件內容發生變化時,對應的控件變量的值并沒有跟著變化,同樣,當控件變量值變化時,控件內容也不會跟著變。 UpdateData()函數就是解決這個問題的。
UpdateData(true);把控件內容裝入控件變量 UpdateData(false);用控件變量的值更新控件
如:有編輯控件IDC_EDIT1,對應的變量為字符串m_Edit1, 1、修改變量值并顯示在控件中: m_Edit1 = _T("結果為50"); UpdateData(false); 2、讀取控件的值到變量中: 用ClassWizard為IDC_EDIT1添加EN_CHANGE消息處理函數, void CEditView::OnChangeEdit1() { UpdateData(true); }
|