CAnimateCtrl 类
cpp
复制代码
/*
此示例创建了一个实现CAnimateCtrl方法的辅助线程。
线程的过程是MyClipThreadProc,该线程是用代码AfxBegintThread(MyClipThreadProc,(LPVOID)pParentWnd)创建的。
示例代码创建并初始化动画控件,然后继续从队列中抽取消息,直到收到私有消息WM_STOPCLIP、WM_PLAYCLIP、WM_SHOWFIRSTFRAME或WM_SHOWLASTRAME中的一个。
对这些消息执行了适当的操作。当接收到WM_STOPCLIP时,线程结束。
注意:线程参数pParam是指向CWnd对象的指针,该对象将是动画控件的父对象。
*/
#define WM_STOPCLIP WM_USER + 1
#define WM_PLAYCLIP WM_USER + 2
#define WM_SHOWFIRSTFRAME WM_USER + 3
#define WM_SHOWLASTFRAME WM_USER + 4
UINT MyClipThreadProc(LPVOID pParam)
{
// 注意:pParentWnd是动画控件的父窗口。
CWnd *pParentWnd = (CWnd *)pParam;
CAnimateCtrl cAnimCtrl;
//创建animation control.
if (!cAnimCtrl.Create(WS_CHILD | WS_VISIBLE | ACS_CENTER,
CRect(10, 10, 100, 100), pParentWnd, 1))
{
return false;
}
//打开AVI文件
if (!cAnimCtrl.Open(_T("MyAvi.avi")))
{
return false;
}
//从队列中抽出消息,直到收到停止播放消息。
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) && (msg.message != WM_STOPCLIP))
{
switch (msg.message)
{
//从第一帧开始播放到最后一帧,不断重复。
case WM_PLAYCLIP:
if (!cAnimCtrl.Play(0, (UINT)-1, (UINT)-1))
return false;
break;
// 显示第一帧。
case WM_SHOWFIRSTFRAME:
if (!cAnimCtrl.Seek(0))
return false;
cAnimCtrl.RedrawWindow();
break;
//显示最后一帧。
case WM_SHOWLASTFRAME:
if (!cAnimCtrl.Seek((UINT)-1))
return false;
cAnimCtrl.RedrawWindow();
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
cAnimCtrl.Stop();
cAnimCtrl.Close();
return true;
}
CComboBoxEx 类
通过为图像列表提供支持扩展组合框控件。
控件支持每个项最多三个图像:一个用于选定状态,一个用于未选定状态,一个用于覆盖图像。
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX3);//获取Extend ComboBox
cbxEx->SetImageList(imgList);//关联ComboBox
for (size_t i = 0; i < 3; i++)
{
COMBOBOXEXITEMW pCBItem;
pCBItem.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE| CBEIF_INDENT;//一组位标志,用于指定此结构的属性或使用此结构的操作的属性。
pCBItem.iItem = i;//项的从零开始的索引。
std::wstring s = L"item" + std::to_wstring(i);
pCBItem.pszText = const_cast<LPWSTR>(s.data());//指向包含或接收项文本的字符缓冲区的指针。
//pCBItem.cchTextMax;//TCHARs中 pszText的长度。 如果设置了文本信息,则忽略此成员。
pCBItem.iImage = 0;//未选定状态图像
pCBItem.iSelectedImage = 1;//选定状态图像
pCBItem.iOverlay = 2;//覆盖图像(叠加层)
pCBItem.iIndent = 0;//要为项显示的缩进空格数
//pCBItem.lParam;//特定于项的值。
cbxEx->InsertItem(&pCBItem);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX3);//获取Extend ComboBox
int seletedIndex = cbxEx->GetCurSel();
if (seletedIndex != CB_ERR)
{
cbxEx->DeleteItem(seletedIndex);
}
}
cpp
复制代码
void CMFCTest4Dlg::OnCbnSelchangeComboboxex3()
{
// TODO: 在此添加控件通知处理程序代码
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX3);//获取Extend ComboBox
int seletedIndex = cbxEx->GetCurSel();
if (seletedIndex != CB_ERR)
{
CString str1;
cbxEx->GetLBText(seletedIndex,str1);
AfxMessageBox(str1);
}
}
动态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CComboBoxEx* cbxEx = new CComboBoxEx();
cbxEx->CreateEx(WS_EX_STATICEDGE, CBS_DROPDOWN| WS_CHILD|WS_VISIBLE, CRect(50, 50, 400, 350),this, IDC_COMBOBOXEX1);//CRect需要考虑下拉后的尺寸
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
cbxEx->SetImageList(imgList);//关联ComboBox
for (size_t i = 0; i < 3; i++)
{
COMBOBOXEXITEMW pCBItem;
pCBItem.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE| CBEIF_INDENT;//一组位标志,用于指定此结构的属性或使用此结构的操作的属性。
pCBItem.iItem = i;//项的从零开始的索引。
std::wstring s = L"item" + std::to_wstring(i);
pCBItem.pszText = const_cast<LPWSTR>(s.data());//指向包含或接收项文本的字符缓冲区的指针。
//pCBItem.cchTextMax;//TCHARs中 pszText的长度。 如果设置了文本信息,则忽略此成员。
pCBItem.iImage = 0;//未选定状态图像
pCBItem.iSelectedImage = 1;//选定状态图像
pCBItem.iOverlay = 2;//覆盖图像(叠加层)
pCBItem.iIndent = 0;//要为项显示的缩进空格数
//pCBItem.lParam;//特定于项的值。
cbxEx->InsertItem(&pCBItem);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBOBOXEX1, &CMFCTest4Dlg::OnCbnSelchangeComboboxex1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnCbnSelchangeComboboxex1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX1);//获取Extend ComboBox
int seletedIndex = cbxEx->GetCurSel();
if (seletedIndex != CB_ERR)
{
cbxEx->DeleteItem(seletedIndex);
}
}
void CMFCTest4Dlg::OnCbnSelchangeComboboxex1()
{
// TODO: 在此添加控件通知处理程序代码
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX1);//获取Extend ComboBox
int seletedIndex = cbxEx->GetCurSel();
if (seletedIndex != CB_ERR)
{
CString str1;
cbxEx->GetLBText(seletedIndex,str1);
AfxMessageBox(str1);
}
}
CListCtrl 类
SetWindowLong
cpp
复制代码
LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong);
hWnd 类型:HWND 窗口的句柄,间接地是窗口所属的类。
nIndex 类型:**int,**要设置的值的从零开始的偏移量。
值
意义
GWL_EXSTYLE 20-
设置新的 扩展窗口样式。
GWL_HINSTANCE -6
设置新的应用程序实例句柄。
GWL_HWNDPARENT -8
设置顶级窗口的新所有者。
GWL_ID -12
设置子窗口的新标识符。 窗口不能是顶级窗口。
GWL_STYLE -16
设置新的 窗口样式 。
GWL_USERDATA -21
设置与窗口关联的用户数据。 此数据供创建窗口的应用程序使用。 其值最初为零。
GWL_WNDPROC -4
设置窗口过程的新地址。 如果窗口不属于与调用线程相同的进程,则无法更改此属性。
当 hWnd 参数标识对话框时,也可以使用以下值。
值
意义
DWL_DLGPROC DWLP_MSGRESULT + sizeof(LRESULT)
设置对话框过程的新地址。
DWL_MSGRESULT 0
设置在对话框过程中处理的消息的返回值。
DWL_USER DWLP_DLGPROC + sizeof(DLGPROC)
设置应用程序专用的新额外信息,例如句柄或指针。
dwNewLong 类型:LONG 替换值。
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CListCtrl* list1 = (CListCtrl*)GetDlgItem(IDC_LIST1);//获取ListCtrl
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
list1->SetImageList(imgList, LVSIL_NORMAL);//图像添加到空间列表
list1->SetImageList(imgList, LVSIL_SMALL);//图像添加到空间列表
list1->InsertColumn(0, L"列1", LVCFMT_CENTER, 100, -1);
list1->InsertColumn(1, L"列2", LVCFMT_CENTER, 100, -1);
list1->InsertColumn(2, L"列3", LVCFMT_CENTER, 100, -1);
list1->InsertItem(0,L"行0列0", 0);
list1->SetItemText(0, 1, L"行0列1");
list1->SetItemText(0, 2, L"行0列2");
DWORD dwStyle = list1->GetStyle();//返回当前窗口样式
dwStyle &= ~(LVS_ICON | LVS_SMALLICON | LVS_LIST || LVS_REPORT);//清除4个列表模式
dwStyle |= LVS_REPORT;//设置为报告模式
SetWindowLong(list1->m_hWnd, GWL_STYLE, dwStyle);//更改指定窗口的属性
DWORD dwStyleEx = list1->GetExtendedStyle();//检索列表视图控件当前的扩展样式
//显示项和子项周围的网格线。 此样式只能与 LVS_REPORT 样式结合使用。
//选中某个项后,将突出显示该项及其所有子项。 此样式只能与 LVS_REPORT 样式结合使用。
//启用列表视图控件中列的拖放重新排序。 此样式仅适用于使用 LVS_REPORT 样式的列表视图控件。
dwStyleEx |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP;
list1->SetExtendedStyle(dwStyleEx);//设置列表视图控件当前的扩展样式。
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CMFCTest4Dlg::OnNMDblclkList1)
END_MESSAGE_MAP()
cpp
复制代码
void CMFCTest4Dlg::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CListCtrl* list1 = (CListCtrl*)GetDlgItem(pNMHDR->idFrom);//获取ListCtrl
CString s = list1->GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem);//检索列表视图项或子项的文本。
AfxMessageBox(s);
*pResult = 0;
}
动态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
//CListCtrl* list1 = (CListCtrl*)GetDlgItem(IDC_LIST1);//获取ListCtrl
CListCtrl* list1 = new CListCtrl();
list1->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_ALIGNTOP | LVS_REPORT| LVS_SORTASCENDING, CRect(50, 50, 400 ,400), this, IDC_LIST1);
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
list1->SetImageList(imgList, LVSIL_NORMAL);//图像添加到空间列表
list1->SetImageList(imgList, LVSIL_SMALL);//图像添加到空间列表
list1->InsertColumn(0, L"列1", LVCFMT_CENTER, 100, -1);
list1->InsertColumn(1, L"列2", LVCFMT_CENTER, 100, -1);
list1->InsertColumn(2, L"列3", LVCFMT_CENTER, 100, -1);
list1->InsertItem(0,L"行0列0", 0);
list1->SetItemText(0, 1, L"行0列1");
list1->SetItemText(0, 2, L"行0列2");
DWORD dwStyle = list1->GetStyle();//返回当前窗口样式
dwStyle &= ~(LVS_ICON | LVS_SMALLICON | LVS_LIST || LVS_REPORT);//清除4个列表模式
dwStyle |= LVS_REPORT;//设置为报告模式
SetWindowLong(list1->m_hWnd, GWL_STYLE, dwStyle);//更改指定窗口的属性
DWORD dwStyleEx = list1->GetExtendedStyle();//检索列表视图控件当前的扩展样式
//显示项和子项周围的网格线。 此样式只能与 LVS_REPORT 样式结合使用。
//选中某个项后,将突出显示该项及其所有子项。 此样式只能与 LVS_REPORT 样式结合使用。
//启用列表视图控件中列的拖放重新排序。 此样式仅适用于使用 LVS_REPORT 样式的列表视图控件。
dwStyleEx |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP;
list1->SetExtendedStyle(dwStyleEx);//设置列表视图控件当前的扩展样式。
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CMFCTest4Dlg::OnNMDblclkList1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);
};
cpp
复制代码
void CMFCTest4Dlg::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CListCtrl* list1 = (CListCtrl*)GetDlgItem(pNMHDR->idFrom);//获取ListCtrl
CString s = list1->GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem);//检索列表视图项或子项的文本。
AfxMessageBox(s);
*pResult = 0;
}
可用于Button、CheckBox、Radio Button
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfcbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCButton* mfcBtn = (CMFCButton*)GetDlgItem(IDC_MFCBUTTON1);
mfcBtn->SetImage(IDB_BITMAP2);
}
动态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCButton* mfcBtn = new CMFCButton();
mfcBtn->Create(L"CMFCButton1", WS_CHILD| WS_VISIBLE| BS_PUSHBUTTON, CRect(150,100,300,130), this, IDC_MFCBUTTON1);
mfcBtn->SetImage(IDB_BITMAP1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCBUTTON1, &CMFCTest4Dlg::OnBnClickedMfcbutton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedMfcbutton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfcbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCButton* mfcBtn = (CMFCButton*)GetDlgItem(IDC_MFCBUTTON1);
mfcBtn->SetImage(IDB_BITMAP2);
}
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfccolorbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCColorButton* mfcCbtn = (CMFCColorButton*)GetDlgItem(IDC_MFCCOLORBUTTON1);//获取颜色按钮指针
COLORREF color = mfcCbtn->GetColor();//获取颜色
int red = GetRValue(color);//获取红色值
int green = GetGValue(color);//获取绿色值
int blue = GetBValue(color);//获取蓝色值
CString s;
s.Format(L"Red:%d,Greed:%d,Blue:%d", red, green, blue);
AfxMessageBox(s);
}
动态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCColorButton* pCbtn = new CMFCColorButton();
pCbtn->Create(L"CMFCButton1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(150, 100, 500, 130), this, IDC_MFCCOLORBUTTON1);
pCbtn->SetColumnsNumber(8);//设置颜色选取器对话框中的列数。
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCCOLORBUTTON1, &CMFCTest4Dlg::OnBnClickedMfccolorbutton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedMfccolorbutton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfccolorbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCColorButton* mfcCbtn = (CMFCColorButton*)GetDlgItem(IDC_MFCCOLORBUTTON1);//获取颜色按钮指针
COLORREF color = mfcCbtn->GetColor();//获取颜色
int red = GetRValue(color);//获取红色值
int green = GetGValue(color);//获取绿色值
int blue = GetBValue(color);//获取蓝色值
CString s;
s.Format(L"Red:%d,Greed:%d,Blue:%d", red, green, blue);
AfxMessageBox(s);
}
CMFCEditBrowseCtrl 类
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnEnChangeMfceditbrowse1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志"或"运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
CMFCEditBrowseCtrl* pEb = (CMFCEditBrowseCtrl*)GetDlgItem(IDC_MFCEDITBROWSE1);
CString s;
pEb->GetWindowText(s);
AfxMessageBox(s);
}
动态创建
cpp
复制代码
#define IDC_MFCEDITBROWSE1 1067
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCEditBrowseCtrl* pEb = new CMFCEditBrowseCtrl();
pEb->Create(WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, CRect(150, 100, 500, 130), this, IDC_MFCEDITBROWSE1);
pEb->EnableFileBrowseButton();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &CMFCTest4Dlg::OnEnChangeMfceditbrowse1)
END_MESSAGE_MAP()
cpp
复制代码
// CMFCTest4Dlg 对话框
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnEnChangeMfceditbrowse1();
};
cpp
复制代码
void CMFCTest4Dlg::OnEnChangeMfceditbrowse1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志"或"运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
CMFCEditBrowseCtrl* pEb = (CMFCEditBrowseCtrl*)GetDlgItem(IDC_MFCEDITBROWSE1);
CString s;
pEb->GetWindowText(s);
AfxMessageBox(s);
}
CMFCFontComboBox 类
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCFontComboBox* pFcbx = (CMFCFontComboBox*)GetDlgItem(IDC_MFCFONTCOMBO1);
if (pFcbx)
{
CMFCFontInfo* pFontInfo = pFcbx->GetSelFont();
AfxMessageBox(pFontInfo->m_strName);
}
}
动态创建
cpp
复制代码
#define IDC_MFCFONTCOMBO1 1070
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCFontComboBox* pFcbx = new CMFCFontComboBox();
pFcbx->Create(WS_CHILD| WS_VISIBLE| CBS_DROPDOWN| CBS_SORT| WS_VSCROLL, CRect(50,50,450,400), this, IDC_MFCFONTCOMBO1);
pFcbx->Setup(TRUETYPE_FONTTYPE);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_CBN_SELCHANGE(IDC_MFCFONTCOMBO1, &CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnCbnSelchangeMfcfontcombo1();
};
cpp
复制代码
void CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCFontComboBox* pFcbx = (CMFCFontComboBox*)GetDlgItem(IDC_MFCFONTCOMBO1);
if (pFcbx)
{
CMFCFontInfo* pFontInfo = pFcbx->GetSelFont();
AfxMessageBox(pFontInfo->m_strName);
}
}
CMFCMaskedEdit 类
掩码字符
定义
D
数字。
d
数字或空格。
+
加号 (+)、减号 (-) 或空格。
C
字母字符。
c
字母字符或空格。
A
字母数字字符。
a
字母数字字符或空格。
*
可打印字符。
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMaskedEdit* pMe = (CMFCMaskedEdit*)GetDlgItem(IDC_MFCMASKEDEDIT2);
CString s;
pMe->GetWindowText(s);
AfxMessageBox(s);
}
动态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
....
// TODO: 在此添加额外的初始化代码
CMFCMaskedEdit* pMe = new CMFCMaskedEdit();
pMe -> Create(WS_CHILD| WS_VISIBLE| WS_BORDER, CRect(50,50,450,80), this, IDC_MFCMASKEDEDIT2);
pMe-> EnableMask(L"CCCC DDDD",L"____-____", L' ',L"abcde12345");
pMe->SetWindowText(L"aaaa-1111");
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_EN_KILLFOCUS(IDC_MFCMASKEDEDIT2, &CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnEnKillfocusMfcmaskededit2();
};
cpp
复制代码
void CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMaskedEdit* pMe = (CMFCMaskedEdit*)GetDlgItem(IDC_MFCMASKEDEDIT2);
CString s;
pMe->GetWindowText(s);
AfxMessageBox(s);
}
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMenu* pMenu = new CMenu();
pMenu->LoadMenu(IDR_MENU1);
CMFCMenuButton* pMb = (CMFCMenuButton*)GetDlgItem(IDC_MFCMENUBUTTON1);
pMb->m_hMenu = pMenu->GetSubMenu(0)->GetSafeHmenu();//加载菜单的一部分
//pMb->m_hMenu = pMenu->GetSafeHmenu();//加载整个菜单
pMb->m_bOSMenu = FALSE;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfcmenubutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMenuButton* pMb = (CMFCMenuButton*)GetDlgItem(IDC_MFCMENUBUTTON1);
switch (pMb->m_nMenuResult)
{
case ID_32771:
AfxMessageBox(L"测试1-1");
break;
case ID_32773:
AfxMessageBox(L"测试1-2");
break;
}
}
动态创建
cpp
复制代码
#define IDC_MFCMENUBUTTON1 1000
#define IDR_MENU1 1001
#define ID_32771 1002
#define ID_32773 1003
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMenu* pMenu = new CMenu();//创建菜单
pMenu->CreateMenu();
CMenu* subMenu = new CMenu();//创建弹出菜单
subMenu->CreatePopupMenu();
subMenu->AppendMenu(MF_STRING, ID_32771, L"测试1-1");//MF_STRING 指定菜单项为字符串。
subMenu->AppendMenu(MF_STRING, ID_32773, L"测试1-2");//MF_STRING 指定菜单项为字符串。
//pMenu->AppendMenu(MF_POPUP, (UINT)subMenu->m_hMenu, L"测试1");//MF_POPUP,则指定弹出菜单的菜单句柄 (HMENU)
pMenu->InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT)subMenu->m_hMenu, L"测试1");
CMFCMenuButton* pMb = new CMFCMenuButton();
pMb->Create(L"菜单按钮", WS_CHILD| WS_VISIBLE| BS_PUSHBUTTON, CRect(50,50,350,80), this, IDC_MFCMENUBUTTON1);
pMb->m_hMenu = pMenu->GetSubMenu(0)->GetSafeHmenu();//加载菜单的一部分
//pMb->m_hMenu = pMenu->GetSafeHmenu();//加载整个菜单
pMb->m_bOSMenu = FALSE;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCMENUBUTTON1, &CMFCTest4Dlg::OnBnClickedMfcmenubutton1)
END_MESSAGE_MAP()
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedMfcmenubutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMenuButton* pMb = (CMFCMenuButton*)GetDlgItem(IDC_MFCMENUBUTTON1);
switch (pMb->m_nMenuResult)
{
case ID_32771:
AfxMessageBox(L"测试1-1");
break;
case ID_32773:
AfxMessageBox(L"测试1-2");
break;
}
}
CMFCShellListCtrl 类
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCShellListCtrl* pMsl = (CMFCShellListCtrl*)GetDlgItem(IDC_MFCSHELLLIST1);//获取控件
CString s;
pMsl->GetCurrentFolder(s);//获取当前文件夹
AfxMessageBox(s);
pMsl->GetItemPath(s, 10);//获取项10的文件路径
AfxMessageBox(s);
}
动态创建
cpp
复制代码
#define IDC_MFCSHELLLIST1 1000
#define IDC_IDC_BUTTON1 1001
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCShellListCtrl* pMsl = new CMFCShellListCtrl();
pMsl->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_REPORT | LVS_EDITLABELS,
CRect(10, 10, 400, 400), this, IDC_MFCSHELLLIST1);
CButton* pBtn = new CButton();
pBtn->Create(L"测试", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 410, 100, 430), this, IDC_BUTTON1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCShellListCtrl* pMsl = (CMFCShellListCtrl*)GetDlgItem(IDC_MFCSHELLLIST1);//获取控件
CString s;
pMsl->GetCurrentFolder(s);//获取当前文件夹
AfxMessageBox(s);
pMsl->GetItemPath(s, 10);//获取项10的文件路径
AfxMessageBox(s);
}
CMFCShellTreeCtrl 类
CMFCShellListCtrl 类扩展了 CMFCListCtrl 类 的功能,它使程序能够列出 Windows shell 项。 使用的显示格式类似于资源管理器窗口的列表视图的格式。
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCShellTreeCtrl* pMst = (CMFCShellTreeCtrl*)GetDlgItem(IDC_MFCSHELLTREE1);//获取控件
HTREEITEM tItem = pMst->GetSelectedItem();//获取当前文件夹
if ((tItem != NULL) && pMst->ItemHasChildren(tItem))
{
CString s = pMst->GetItemText(tItem);
AfxMessageBox(s);
}
}
动态创建
cpp
复制代码
#define IDC_BUTTON1 1001
#define IDC_MFCSHELLTREE1 1002
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CMFCShellTreeCtrl* pMst = new CMFCShellTreeCtrl();
pMst->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER |
TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES |
TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_EDITLABELS,
CRect(10, 10, 400, 400), this, IDC_MFCSHELLTREE1);
CButton* pBtn = new CButton();
pBtn->Create(L"测试", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 410, 100, 430), this, IDC_BUTTON1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCShellTreeCtrl* pMst = (CMFCShellTreeCtrl*)GetDlgItem(IDC_MFCSHELLTREE1);//获取控件
HTREEITEM tItem = pMst->GetSelectedItem();//获取当前文件夹
if ((tItem != NULL) && pMst->ItemHasChildren(tItem))
{
CString s = pMst->GetItemText(tItem);
AfxMessageBox(s);
}
}
CRichEditCtrl 类
静态创建
不清楚为什么静态创建出来在VS2019上无法运行
动态创建
cpp
复制代码
#define IDC_BUTTON1 1001
#define IDC_RICHEDIT21 1077
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
//CRichEditCtrl* pRedit = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT21);//获取控件
//pRedit -> SetWindowText(L"测试文本");
CRichEditCtrl* pRedit = new CRichEditCtrl();
pRedit->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES |
TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_EDITLABELS, CRect(10, 10, 400, 300), this, IDC_RICHEDIT21);
pRedit->SetWindowText(L"测试文本");
CButton* pBtn = new CButton();
pBtn->Create(L"测试", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,CRect(10, 410, 150, 430), this, IDC_BUTTON1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CRichEditCtrl* pRedit = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT21);//获取控件
CHARFORMAT cf;
cf.cbSize = sizeof(cf);//指定结构的大小(以字节为单位)。
cf.dwMask= CFM_COLOR | CFM_EFFECTS | CFM_OFFSET;//包含要设置的有效信息或属性的成员。
cf.dwEffects = CFE_BOLD | CFE_UNDERLINE;//字符效果。
cf.yHeight = 200;//字符高度(1/1440 英寸或打印机点的 1/20)。
cf.yOffset = 0;//基线中的字符偏移量(以 twips 为单位)。
cf.crTextColor = RGB(255,0,0);//文本颜色。
//cf.bCharSet = ; //字符集值。
//cf.bPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; //字体的音调和系列。
//cf.szFaceName[LF_FACESIZE];//指定字体名称的以 Null 结尾的字符数组。
pRedit-> SetSelectionCharFormat(cf);
}
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CScrollBar* pSrlb_h = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);//获取控件
pSrlb_h->SetScrollRange(1, 100);
pSrlb_h->SetScrollPos(1);
CScrollBar* pSrlb_v = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//获取控件
pSrlb_v->SetScrollRange(101, 200);
pSrlb_v->SetScrollPos(101);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit -> SetWindowText(s);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
void CMFCTest4Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CScrollBar* pSrlb_h = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);//获取控件
CScrollBar* pSrlb_v = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//获取控件
int pos = pSrlb_h ->GetScrollPos();
switch (nSBCode)
{
case SB_LINELEFT:
pos -= pos > 1 ? 1 : 0;
break;
case SB_LINERIGHT:
pos += pos < 100 ? 1 : 0;
break;
}
pSrlb_h->SetScrollPos(pos);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(s);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CMFCTest4Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CScrollBar* pSrlb_h = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);//获取控件
CScrollBar* pSrlb_v = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//获取控件
int pos = pSrlb_v->GetScrollPos();
switch (nSBCode)
{
case SB_LINEUP:
pos -= pos > 102 ? 1 : 0;
break;
case SB_LINEDOWN:
pos += pos < 200 ? 1 : 0;
break;
}
pSrlb_v->SetScrollPos(pos);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(s);
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
动态创建
cpp
复制代码
#define IDC_SCROLLBAR1 1078
#define IDC_SCROLLBAR2 1079
#define IDC_EDIT1 1080
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CScrollBar* pSrlb_h = new CScrollBar();
pSrlb_h->Create(WS_CHILD | WS_VISIBLE | SBS_HORZ | SBS_LEFTALIGN | WS_CHILD, CRect(50, 400, 400, 430), this, IDC_SCROLLBAR1);
pSrlb_h->SetScrollRange(1, 100);
pSrlb_h->SetScrollPos(1);
CScrollBar* pSrlb_v = new CScrollBar();
pSrlb_v->Create(WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_TOPALIGN | WS_CHILD, CRect(550, 50, 580, 350), this, IDC_SCROLLBAR2);
pSrlb_v->SetScrollRange(101, 200);
pSrlb_v->SetScrollPos(101);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
//CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
CEdit* pEdit = new CEdit();
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(50, 200, 480, 230), this, IDC_EDIT1);
pEdit -> SetWindowText(s);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
};
cpp
复制代码
void CMFCTest4Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CScrollBar* pSrlb_h = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);//获取控件
CScrollBar* pSrlb_v = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//获取控件
int pos = pSrlb_h ->GetScrollPos();
switch (nSBCode)
{
case SB_LINELEFT:
pos -= pos > 1 ? 1 : 0;
break;
case SB_LINERIGHT:
pos += pos < 100 ? 1 : 0;
break;
}
pSrlb_h->SetScrollPos(pos);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(s);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CMFCTest4Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CScrollBar* pSrlb_h = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);//获取控件
CScrollBar* pSrlb_v = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//获取控件
int pos = pSrlb_v->GetScrollPos();
switch (nSBCode)
{
case SB_LINEUP:
pos -= pos > 102 ? 1 : 0;
break;
case SB_LINEDOWN:
pos += pos < 200 ? 1 : 0;
break;
}
pSrlb_v->SetScrollPos(pos);
CString s;
s.Format(L"水平滚动条位置:%d,垂直滚动条位置:%d", pSrlb_h->GetScrollPos(), pSrlb_v->GetScrollPos());
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(s);
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
CTabCtrl 类
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CTabCtrl* pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1);
if (pTab)
{
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
pTab->SetImageList(imgList);//将图像列表分配给选项卡控件。
TCITEM tItem;
tItem.mask = TCIF_TEXT | TCIF_IMAGE;//指定要检索或设置的成员的值。
tItem.pszText = L"选项1";//向在设置项目信息时包含选项卡文本的 null 终止字符串的指针。
tItem.iImage = 0;//选项卡控件的图像列表中的索引;如果没有选项卡的图像,则 -1。
pTab->InsertItem(0, &tItem);//在现有选项卡控件中插入新选项卡。
pTab->InsertItem(1, L"选项2");//在现有选项卡控件中插入新选项卡。
pTab->InsertItem(2, L"选项3", 1);//在现有选项卡控件中插入新选项卡。
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
void CMFCTest4Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem((int)pNMHDR->idFrom);
if (pTabCtrl)
{
int nCurTab = pTabCtrl->GetCurSel(); // 获取当前选中标签页索引
TCITEM tItem;
TCHAR textBuffer[256];
tItem.mask = TCIF_TEXT;
tItem.pszText = textBuffer;
tItem.cchTextMax = _countof(textBuffer) - 1;
pTabCtrl->GetItem(nCurTab, &tItem);
AfxMessageBox(textBuffer);
}
*pResult = 0;
}
动态创建
cpp
复制代码
#define IDC_TAB1 1081
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
/*CTabCtrl* pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1);*/
CTabCtrl* pTab = new CTabCtrl();
pTab ->Create(WS_CHILD | WS_VISIBLE| TCS_TABS| TCS_FIXEDWIDTH, CRect(20,20,450,450), this, IDC_TAB1);
if (pTab)
{
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建
pTab->SetImageList(imgList);//将图像列表分配给选项卡控件。
TCITEM tItem;
tItem.mask = TCIF_TEXT | TCIF_IMAGE;//指定要检索或设置的成员的值。
tItem.pszText = L"选项1";//向在设置项目信息时包含选项卡文本的 null 终止字符串的指针。
tItem.iImage = 0;//选项卡控件的图像列表中的索引;如果没有选项卡的图像,则 -1。
pTab->InsertItem(0, &tItem);//在现有选项卡控件中插入新选项卡。
pTab->InsertItem(1, L"选项2");//在现有选项卡控件中插入新选项卡。
pTab->InsertItem(2, L"选项3", 1);//在现有选项卡控件中插入新选项卡。
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCTest4Dlg::OnTcnSelchangeTab1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult);
};
cpp
复制代码
void CMFCTest4Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem((int)pNMHDR->idFrom);
if (pTabCtrl)
{
int nCurTab = pTabCtrl->GetCurSel(); // 获取当前选中标签页索引
TCITEM tItem;
TCHAR textBuffer[256];
tItem.mask = TCIF_TEXT;
tItem.pszText = textBuffer;
tItem.cchTextMax = _countof(textBuffer) - 1;
pTabCtrl->GetItem(nCurTab, &tItem);
AfxMessageBox(textBuffer);
}
*pResult = 0;
}
CTreeCtrl 类
静态创建
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
//CTreeCtrl* pTree = new CTreeCtrl();
//pTree ->Create(WS_CHILD | WS_VISIBLE| TVS_CHECKBOXES | TVS_HASBUTTONS | TVS_HASLINES| TVS_LINESATROOT, CRect(20,20,350,500), this, IDC_TREE1);
CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
if (pTree)
{
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建bmp
pTree->SetImageList(imgList, TVSIL_NORMAL);
TVINSERTSTRUCT tItem;
tItem.hParent = TVI_ROOT;//父项的句柄。 如果此成员是TVI_ROOT值或 NULL,则该项将插入树视图控件的根目录中。
tItem.hInsertAfter = TVI_SORT;
tItem.item.mask = TVIF_IMAGE | TVIF_TEXT; //指示哪些其他结构成员包含有效数据的标志数组。
tItem.item.pszText = L"树分支1";
tItem.item.iImage = 0;
pTree->InsertItem(&tItem);//调用此函数以在树视图控件中插入新项。
pTree->InsertItem(L"树分支2", TVI_ROOT, TVI_SORT);//调用此函数以在树视图控件中插入新项。
pTree->InsertItem(L"树分支3", 2, 1, TVI_ROOT, TVI_SORT);//调用此函数以在树视图控件中插入新项。
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
void CMFCTest4Dlg::OnNMDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
HTREEITEM item = pTree->GetSelectedItem();
if (item)
{
AfxMessageBox(pTree->GetItemText(item));
}
*pResult = 0;
}
动态创建
cpp
复制代码
#define IDC_TREE1 1082
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CTreeCtrl* pTree = new CTreeCtrl();
pTree ->Create(WS_CHILD | WS_VISIBLE| TVS_CHECKBOXES | TVS_HASBUTTONS | TVS_HASLINES| TVS_LINESATROOT, CRect(20,20,500,350), this, IDC_TREE1);
//CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
if (pTree)
{
CImageList* imgList = new CImageList();//必须动态创建,否则显示不了
imgList->Create(IDB_BITMAP1, 16, 3, 0);//创建bmp
pTree->SetImageList(imgList, TVSIL_NORMAL);
TVINSERTSTRUCT tItem;
tItem.hParent = TVI_ROOT;//父项的句柄。 如果此成员是TVI_ROOT值或 NULL,则该项将插入树视图控件的根目录中。
tItem.hInsertAfter = TVI_SORT;
tItem.item.mask = TVIF_IMAGE | TVIF_TEXT; //指示哪些其他结构成员包含有效数据的标志数组。
tItem.item.pszText = L"树分支1";
tItem.item.iImage = 0;
pTree->InsertItem(&tItem);//调用此函数以在树视图控件中插入新项。
pTree->InsertItem(L"树分支2", TVI_ROOT, TVI_SORT);//调用此函数以在树视图控件中插入新项。
pTree->InsertItem(L"树分支3", 2, 1, TVI_ROOT, TVI_SORT);//调用此函数以在树视图控件中插入新项。
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &CMFCTest4Dlg::OnNMDblclkTree1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnNMDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult);
};
cpp
复制代码
void CMFCTest4Dlg::OnNMDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTreeCtrl* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE1);
HTREEITEM item = pTree->GetSelectedItem();
if (item)
{
AfxMessageBox(pTree->GetItemText(item));
}
*pResult = 0;
}
CVSListBox
静态创建
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CVSListBox* pLb = (CVSListBox*)GetDlgItem(IDC_MFCVSLISTBOX1);
if (pLb)
{
int count = pLb->GetCount();
CString s;
for (size_t i = 0; i < count; i++)
{
s += pLb->GetItemText(i);
s += L"\n";
}
AfxMessageBox(s);
}
}
动态创建
cpp
复制代码
#define IDC_BUTTON1 1001
#define IDC_MFCVSLISTBOX1 1083
cpp
复制代码
BOOL CMFCTest4Dlg::OnInitDialog()
{
...
// TODO: 在此添加额外的初始化代码
CButton* pBtn = new CButton();
pBtn->Create(_T("Button1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 320, 180, 350), this, IDC_BUTTON1);
CVSListBox* pLb = new CVSListBox();
pLb->Create(_T(""), WS_CHILD | WS_VISIBLE | WS_BORDER , CRect(10, 10, 400, 300), this, IDC_MFCVSLISTBOX1);
pLb->SetStandardButtons();
pLb->AddItem(L"Item1");
pLb->AddItem(L"Item2");
pLb->AddItem(L"Item3");
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
cpp
复制代码
BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()
cpp
复制代码
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};
cpp
复制代码
void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CVSListBox* pLb = (CVSListBox*)GetDlgItem(IDC_MFCVSLISTBOX1);
if (pLb)
{
int count = pLb->GetCount();
CString s;
for (size_t i = 0; i < count; i++)
{
s += pLb->GetItemText(i);
s += L"\n";
}
AfxMessageBox(s);
}
}