MFC中三个最基本的控件的介绍,它们分别是:EditControl、CheckBoxControl以及ComBoxControl。
1. EditControl
实现的效果如下所示:
关键代码如下:
点击统计按钮的代码
void CEditDemoDlg::OnBnClickedBtnCount()
{
CString strInput;
if (0 == GetDlgItemTextW(IDC_EDIT_INPUT, strInput))
{
SetDlgItemTextW(IDC_OUTPUT, L"获取统计字数失败!");
return;
}
CString strOtput;
strOtput.Format(L"%d", strInput.GetLength());
SetDlgItemTextW(IDC_OUTPUT, strOtput);
}
2.CheckBoxControl
实现的效果如下所示:
关键代码
我们需要在对话框上面通过类向导添加一个WM_ERASEBKGND的消息,然后添加代码如下:
BOOL CCheckBoxDemoDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
BOOL bRet = CDialogEx::OnEraseBkgnd(pDC);
int nRed, nGreen, nBlue;
nRed = m_checkRed.GetCheck() ? 255 : 0;
nGreen = m_checkGreen.GetCheck() ? 255 : 0;
nBlue = m_checkBlue.GetCheck() ? 255 : 0;
COLORREF clrColor = RGB(nRed, nGreen, nBlue);
CBrush brush;
brush.CreateSolidBrush(clrColor);
CBrush *pOldBrush = pDC->SelectObject(&brush);
RECT rect = { 30, 5, 230, 205 };
if (((CButton *)GetDlgItem(IDC_RADIO_RECT))->GetCheck())
{
pDC->Rectangle(&rect);
}
else
{
pDC->Ellipse(&rect);
}
return bRet;
}
下面的五个按钮双击之后,添加相同的一句代码即可:
void CCheckBoxDemoDlg::OnBnClickedCheckRed()
{
Invalidate(TRUE);
}
void CCheckBoxDemoDlg::OnBnClickedCheckGreen()
{
Invalidate(TRUE);
}
void CCheckBoxDemoDlg::OnBnClickedCheckBlue()
{
Invalidate(TRUE);
}
void CCheckBoxDemoDlg::OnBnClickedRadioRect()
{
Invalidate(TRUE);
}
void CCheckBoxDemoDlg::OnBnClickedRadioRound()
{
Invalidate(TRUE);
}
ComBoxControl
实现的效果如下所示:
主要代码如下:
void CComboxDemoDlg::OnBnClickedBtnAdd()
{
CString strInput;
if (GetDlgItemTextW(IDC_EDIT_INPUT, strInput) != 0)
{
int nIndex= m_comboxDemo.AddString(strInput);
m_comboxDemo.SetCurSel(nIndex);
nIndex = m_listDemo.AddString(strInput);
m_listDemo.SetCurSel(nIndex);
}
}
void CComboxDemoDlg::OnBnClickedBtnDelete()
{
int nIndex = m_comboxDemo.GetCurSel();
if (-1 < nIndex)
{
m_comboxDemo.DeleteString(nIndex);
if (nIndex <= m_comboxDemo.GetCount())
{
if (nIndex > 0)
{
m_comboxDemo.SetCurSel(nIndex-1);
}
else
{
m_comboxDemo.SetCurSel(0);
}
}
}
else
{
MessageBoxW(L"未选中待删除的项!");
}
nIndex = m_listDemo.GetCurSel();
if (-1 < nIndex)
{
m_listDemo.DeleteString(nIndex);
if (nIndex <= m_listDemo.GetCount())
{
if (nIndex > 0)
{
m_listDemo.SetCurSel(nIndex-1);
}
else
{
m_listDemo.SetCurSel(0);
}
}
}
else
{
MessageBoxW(L"未选中待删除的项!");
}
}