1.MFC中三个基本的控件介绍
1.SliderControl
效果如下所示:
这个控件使用起来十分简单,选中这个控件,右键选择类向导,添加WM_HSCROL消息,代码如下:
void CSliderDemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int nowPos = m_slider.GetPos();
CString strOut;
strOut.Format(L"滑块控件的位置:%d", nowPos);
m_pos.SetWindowTextW(strOut);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
这个控件主要用于一些参数的设置,比如音量大小的调节等场合。
2. HotKeyControl
演示效果如下:
右键hotkeyControl控件,类向导添加WM_HOTKEY消息,添加代码如下:
void CHotKeyDemoDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nHotKeyId == 1)
{
ShowWindow(SW_SHOW);
UnregisterHotKey(m_hWnd, 1);
}
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
还有一个设置按钮代码的添加:
void CHotKeyDemoDlg::OnBnClickedBtnSet()
{
// TODO: 在此添加控件通知处理程序代码
WORD wVk, wMod;
m_hotKey.GetHotKey(wVk, wMod);
if (RegisterHotKey(m_hWnd, 1, wMod, wVk))
{
ShowWindow(SW_HIDE);
}
else
{
MessageBox(L"注册热键失败!");
}
}
3. ListControl
效果图如下:
直接上代码吧
在初始化对话框函数中需要注意的是,m_imageList变量需要在.h文件中声明:CImageList m_imageList;
BOOL CListCtrlDemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_list.InsertColumn(0, L"第一列", LVCFMT_LEFT, 200);
m_list.InsertColumn(1, L"第二列", LVCFMT_LEFT, 200);
m_imageList.Create(32, 32, ILC_COLOR32, 1, 1);
m_imageList.Add(m_hIcon);
m_list.SetImageList(&m_imageList, LVSIL_SMALL);
m_list.SetImageList(&m_imageList, LVSIL_NORMAL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CListCtrlDemoDlg::OnBnClickedBtnAdd()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();
int nTemp = 1;
CString strBuffer;
strBuffer.Format(L"第 %d 行的第 %d 列", nCount + 1, nTemp++);
m_list.InsertItem(nCount, strBuffer, 0);
strBuffer.Format(L"第 %d 行的 %d 列", nCount + 1, nTemp++);
m_list.SetItemText(nCount, 1, strBuffer);
}
void CListCtrlDemoDlg::OnBnClickedBtnDel()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();
for (int i=nCount-1; i>=0; --i)
{
if (m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
{
m_list.DeleteItem(i);
break;
}
}
}
下面需要注意的是:
右击ComBoBoxComBoxControl控件,类向导,添加CBN_SELCHANGE消息,得到下面的函数,然后添加自己的代码
void CListCtrlDemoDlg::OnSelchangeComboType()
{
// TODO: 在此添加控件通知处理程序代码
CComboBox *pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_TYPE);
DWORD dwStyle = 0;
switch (pComboBox->GetCurSel())
{
case 0: // 大图标
dwStyle = LVS_ICON;
break;
case 1: // 小图标
dwStyle = LVS_SMALLICON;
break;
case 2: // 列表
dwStyle = LVS_LIST;
break;
case 3: // 详细信息
dwStyle = LVS_REPORT;
break;
default:
break;
}
m_list.ModifyStyle(LVS_TYPEMASK, dwStyle);
}