VC学习笔记 -单选按钮控件(Ridio Button)的使用
在VC++編程過程中,查資料是一個苦差事,案邊放了一摞書左翻右翻好是煩人。一賭氣就把一些常用的小技巧自己總結了一下,雖費了些功夫,但對以后編程很有好處?,F拿出來與大家共享,以后積累多了,作一個CHM電子書,用的時候翻閱實在很方便。
注:有些內容來源于網上文章,名字我都沒記下來,這里向作者致謝了!
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書上都有介紹。現在的問題是我不使用串行化,而是自己動手保存,當點擊窗口的關閉按鈕時,如何提示并保存文檔。
用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);
}
總結
以上是生活随笔為你收集整理的VC学习笔记 -单选按钮控件(Ridio Button)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于VC单选按钮不能设置变量以及Grou
- 下一篇: GetSafeHwnd()函数