这章总结下mfc常用的控件,控件比较多,给出一些常见的模板
①button
对于普通按钮最常见的就是点击事件了
void CMy9_1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_btn1.SetWindowText("你已按下了按钮!");//设置按钮上的文字
}
单选按钮可以设置一个组,这样一个组就可以绑定一个变量,值为0,1,2,3表示第1,2,3个按钮
void CMy9_1Dlg::OnCheck1()
{
// TODO: Add your control notification handler code here
if(m_chk1.GetCheck()>0)
m_chk1.SetCheck(0);
else
m_chk1.SetCheck(1);//单选按钮的setcheck函数,点击选中
}
②slidebar
初始设置
// TODO: Add extra initialization here
m_Scrollbar.SetScrollRange(0,20);//设置滑动条范围
m_Scrollbar.SetScrollPos(10);//初始的位置
char sPos[10];
itoa(m_Scrollbar.GetScrollPos(),sPos,10); //10代表10进制数
m_Edit.SetSel(0,-1);//编辑框选中全部
m_Edit.ReplaceSel(sPos);//替代选中文字
UpdateData(FALSE);//将成员变量的值赋值给控件
滚蛋滑条的设置
void CMy9_2Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
char sPos[10];
int iNowPos;
switch(nSBCode)
{
if(pScrollBar==&m_Scrollbar)
{
case SB_THUMBTRACK: //拖动滚动滑块时
m_Scrollbar.SetScrollPos(nPos);
itoa(nPos,sPos,10);
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(sPos);
case SB_LINEDOWN: //单击滚动条向下的箭头
iNowPos=m_Scrollbar.GetScrollPos();
iNowPos=iNowPos+1;
if(iNowPos>20)
iNowPos=20;
m_Scrollbar.SetScrollPos(iNowPos);
itoa(m_Scrollbar.GetScrollPos(),sPos,10);
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(sPos);
break;
case SB_LINEUP: //单击滚动条向上的箭头
iNowPos=m_Scrollbar.GetScrollPos();
iNowPos=iNowPos-1;
if(iNowPos<0)
iNowPos=0;
m_Scrollbar.SetScrollPos(iNowPos);
itoa(m_Scrollbar.GetScrollPos(),sPos,10);
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(sPos);
break;
case SB_PAGEDOWN: //单击滚动条下面的箭头与滚动块之间的区域
iNowPos=m_Scrollbar.GetScrollPos();
iNowPos=iNowPos+3;
if(iNowPos>20)
iNowPos=20;
m_Scrollbar.SetScrollPos(iNowPos);
itoa(m_Scrollbar.GetScrollPos(),sPos,10);
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(sPos);
break;
case SB_PAGEUP: //单击滚动条上面的箭头与滚动块之间的区域
iNowPos=m_Scrollbar.GetScrollPos();
iNowPos=iNowPos-3;
if(iNowPos<0)
iNowPos=0;
m_Scrollbar.SetScrollPos(iNowPos);
itoa(m_Scrollbar.GetScrollPos(),sPos,10);
m_Edit.SetSel(0,-1);
m_Edit.ReplaceSel(sPos);
break;
}
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
④static
static可以用来加载图片,代码如下
m_bmp.ModifyStyle(0,SS_BITMAP);
HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_bmp.SetBitmap(hBmp);
点击图片弹出消息
void CMy9_3Dlg::OnStaticBmp()
{
// TODO: Add your control notification handler code here
BITMAP bmp;
GetObject(m_bmp.GetBitmap(),sizeof(BITMAP),&bmp);
CString msg;
msg.Format("Image Size %d*%d",bmp.bmWidth,bmp.bmHeight);
AfxMessageBox(msg);
}
⑤Listbox
示例代码,把当前目录显示在列表中:
DWORD cchCurDir = MAX_PATH;
LPTSTR lpszCurDir;
CHAR tchBuffer[MAX_PATH];
lpszCurDir = tchBuffer;
GetCurrentDirectory(cchCurDir, lpszCurDir);
DlgDirList(lpszCurDir, IDC_LIST_DIR, IDC_STATIC_DIR, 0);
双击删除:
void CMy9_4Dlg::OnDblclkListDir()
{
// TODO: Add your control notification handler code here
int i = m_list.GetCurSel();//获取当前选择的文字的索引
CString str;
m_list.GetText(i, str);//获取当前文字
m_list.DeleteString(i);//删除索引文字,对应的还要addstring
CString msg = "Item "+str+" deleted!";
AfxMessageBox(msg);
}
⑥edit
删除操作
void CMy9_5Dlg::OnClear2Button()
{
// TODO: Add your control notification handler code here
m_Edit2.SetSel(0,-1); //表示选中编辑框IDC_EDIT2中的全部内容。
m_Edit2.ReplaceSel("");
//用空字符串代替所选中的文本,即把所选的文本删除掉
}
复制粘贴:
void CMy9_5Dlg::OnTransferButton()
{
// TODO: Add your control notification handler code here
m_Edit1.SetSel(0,-1);
m_Edit1.Copy(); //将m_Editl编辑框中所选的内容拷贝到剪贴板上
m_Edit2.SetSel(0,-1);
m_Edit2.ReplaceSel("");
m_Edit2.Paste(); //将剪贴板中的内容粘贴到m_Edit2编辑框中
}
撤销
void CMy9_5Dlg::OnUndoButton()
{
// TODO: Add your control notification handler code here
m_Edit1.Undo(); // Undo()函数是CEdit类中的成员函数,表示取消编辑框中上一次操作
m_Edit2.Undo();
}
初始化添加字符串:
m_cb.AddString("Monday");
m_cb.AddString("Tuesday");
m_cb.AddString("Wednesday");
m_cb.AddString("Thursday");
m_cb.AddString("Friday");
m_cb.AddString("Saturday");
m_cb.AddString("Sunday");
选中操作
void CMy9_7Dlg::OnSelchangeCombo()
{
// TODO: Add your control notification handler code here
CString msg;
m_cb.GetLBText(m_cb.GetCurSel(), msg);//获得文字
AfxMessageBox(msg);
}
⑧ picture control
选入后直接载入位图即可,也可以做分割线用
⑨spin
一般要和编辑框一起用,并设置alignment
初始化
CSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);
pSpin->SetRange(0, 100);//设置范围
pSpin->SetPos(50);//设置位置
pSpin->GetBuddy()->SetWindowText("5.0");//得到附属元素然后设置
它的事件是VSCROLL:
void CEx9_9Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
if (pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
{
CString strValue;
strValue.Format("%3.1f", (double) nPos / 10.0);
((CSpinButtonCtrl*) pScrollBar)->GetBuddy()->SetWindowText(strValue);
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
⑩progress
初始设置:
CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pProg->SetRange(0, 100);
pProg->SetPos(50);
按钮触发计时事件
void CEx9_9Dlg::OnButtonStar()
{
// TODO: Add your control notification handler code here
CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pProg->SetPos(0);
SetTimer(1000,100,NULL);
void CEx9_9Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == 1000){
CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pProg->SetPos(pProg->GetPos()+1);
if(pProg->GetPos() >= 100){
KillTimer(nIDEvent);
AfxMessageBox("进行完毕");
}
}
CDialog::OnTimer(nIDEvent);
}
最后slide control
它的初始化
CString strText1;
CSliderCtrl* pSlide1 = (CSliderCtrl*) GetDlgItem(IDC_SLIDER1);
pSlide1->SetRange(0, 100);
pSlide1->SetPos(50);
strText1.Format("%d", pSlide1->GetPos());
SetDlgItemText(IDC_STATIC_SLIDER, strText1);//静态控件添加上文字
它的事件是水平滑动
void CEx9_9Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
if(pScrollBar->GetDlgCtrlID() == IDC_SLIDER1)
{
CSliderCtrl* pSlide = (CSliderCtrl*) pScrollBar;
CString strText;
strText.Format("%d", pSlide->GetPos());
SetDlgItemText(IDC_STATIC_SLIDER, strText);
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}