MFC学习笔记(五):控件二 - 指南
CAnimateCtrl 类
| 名称 | 描述 |
|---|---|
| CAnimateCtrl::Close | 关闭 AVI 剪辑。 |
| CAnimateCtrl::Create | 创建动画控件并将其附加到 CAnimateCtrl 对象。 |
| CAnimateCtrl::CreateEx | 创建具有指定 Windows 扩展样式的动画控件并将其附加到 CAnimateCtrl 对象。 |
| CAnimateCtrl::IsPlaying | 指示是否正在播放音频视频交错 (AVI) 剪辑。 |
| CAnimateCtrl::Open | 从文件或资源中打开 AVI 剪辑并显示第一帧。 |
| CAnimateCtrl::Play | 无声播放 AVI 剪辑。 |
| CAnimateCtrl::Seek | 显示 AVI 剪辑的选定单帧。 |
| CAnimateCtrl::Stop | 停止播放 AVI 剪辑。 |
/*
此示例创建了一个实现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 类
通过为图像列表提供支持扩展组合框控件。
控件支持每个项最多三个图像:一个用于选定状态,一个用于未选定状态,一个用于覆盖图像。
| 名称 | 描述 |
|---|---|
| CComboBoxEx::Create | 创建组合框并将其附加到 CComboBoxEx 对象。 |
| CComboBoxEx::CreateEx | 创建具有指定 Windows 扩展样式的组合框并将其附加到 ComboBoxEx 对象。 |
| CComboBoxEx::DeleteItem | 从 ComboBoxEx 控件中移除项。 |
| CComboBoxEx::GetComboBoxCtrl | 检索指向子组合框控件的指针。 |
| CComboBoxEx::GetEditCtrl | 检索 ComboBoxEx 控件的编辑控件部分的句柄。 |
| CComboBoxEx::GetExtendedStyle | 检索用于 ComboBoxEx 控件的扩展样式。 |
| CComboBoxEx::GetImageList | 检索指向分配给 ComboBoxEx 控件的图像列表的指针。 |
| CComboBoxEx::GetItem | 检索给定 ComboBoxEx 项的项信息。 |
| CComboBoxEx::HasEditChanged | 确定用户是否已通过键入来更改 ComboBoxEx 编辑控件的内容。 |
| CComboBoxEx::InsertItem | 在 ComboBoxEx 控件中插入新项。 |
| CComboBoxEx::SetExtendedStyle | 设置 ComboBoxEx 控件中的扩展样式。 |
| CComboBoxEx::SetImageList | 设置 ComboBoxEx 控件的图像列表。 |
| CComboBoxEx::SetItem | 设置 ComboBoxEx 控件中项的属性。 |
| CComboBoxEx::SetWindowTheme | 设置扩展组合框控件的视觉样式。 |
静态创建






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(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
}






void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CComboBoxEx* cbxEx = (CComboBoxEx*)GetDlgItem(IDC_COMBOBOXEX3);//获取Extend ComboBox
int seletedIndex = cbxEx->GetCurSel();
if (seletedIndex != CB_ERR)
{
cbxEx->DeleteItem(seletedIndex);
}
}



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);
}
}




动态创建

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(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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBOBOXEX1, &CMFCTest4Dlg::OnCbnSelchangeComboboxex1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnCbnSelchangeComboboxex1();
};

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
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 替换值。
静态创建



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
}


BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CMFCTest4Dlg::OnNMDblclkList1)
END_MESSAGE_MAP()

void CMFCTest4Dlg::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CListCtrl* list1 = (CListCtrl*)GetDlgItem(pNMHDR->idFrom);//获取ListCtrl
CString s = list1->GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem);//检索列表视图项或子项的文本。
AfxMessageBox(s);
*pResult = 0;
}



动态创建



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
}


BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CMFCTest4Dlg::OnNMDblclkList1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);
};

void CMFCTest4Dlg::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CListCtrl* list1 = (CListCtrl*)GetDlgItem(pNMHDR->idFrom);//获取ListCtrl
CString s = list1->GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem);//检索列表视图项或子项的文本。
AfxMessageBox(s);
*pResult = 0;
}



CMFCButton 类
可用于Button、CheckBox、Radio Button
| 名称 | 描述 |
|---|---|
| CMFCButton::m_nAlignStyle | 指定按钮文本的对齐方式。 |
| CMFCButton::m_bDontUseWinXPTheme | 指定是否使用 Windows XP 主题。 |
| CMFCButton::m_bDrawFocus | 指示是否围绕按钮绘制聚焦框。 |
| CMFCButton::m_nFlatStyle | 指定按钮的样式,如无边框、平面、半平面或 3D。 |
| CMFCButton::m_bGrayDisabled | 如果为 TRUE,则使禁用的按钮绘制为灰显。 |
| CMFCButton::m_bHighlightChecked | 指示当光标悬停在 BS_CHECKBOX 样式按钮上时是否突出显示该按钮。 |
| CMFCButton::m_bResponseOnButtonDown | 指示是否响应按钮按下事件。 |
| CMFCButton::m_bRightImage | 指示是否在按钮右侧显示图像。 |
| CMFCButton::m_bTopImage | 指示图像是否位于按钮顶部。 |
| CMFCButton::m_bTransparent | 指示按钮是否透明。 |
| CMFCButton::m_bWasDblClk | 指示上次点击事件是否为双击事件。 |
| 名称 | 描述 |
|---|---|
| CMFCButton::OnDraw | 由框架调用以绘制按钮。 |
| CMFCButton::OnDrawBorder | 由框架调用以绘制按钮的边框。 |
| CMFCButton::OnDrawFocusRect | 由框架调用以绘制按钮的聚焦框。 |
| CMFCButton::OnDrawText | 由框架调用以绘制按钮文本。 |
| CMFCButton::OnFillBackground | 由框架调用以绘制按钮文本的背景。 |
| CMFCButton::SelectFont | 检索与指定设备上下文关联的字体。 |
静态创建






void CMFCTest4Dlg::OnBnClickedMfcbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCButton* mfcBtn = (CMFCButton*)GetDlgItem(IDC_MFCBUTTON1);
mfcBtn->SetImage(IDB_BITMAP2);
}

动态创建 



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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCBUTTON1, &CMFCTest4Dlg::OnBnClickedMfcbutton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedMfcbutton1();
};

void CMFCTest4Dlg::OnBnClickedMfcbutton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCButton* mfcBtn = (CMFCButton*)GetDlgItem(IDC_MFCBUTTON1);
mfcBtn->SetImage(IDB_BITMAP2);
}

CMFCColorButton 类
| 名称 | 描述 |
|---|---|
m_bAltColorDlg | 布尔值。 如果为 TRUE,则框架在单击其他按钮时显示 CMFCColorDialog 颜色对话框;如果为 FALSE,则显示系统颜色对话框。 默认值为 TRUE。 有关详细信息,请参阅 CMFCColorButton::EnableOtherButton。 |
m_bAutoSetFocus | 布尔值。 如果为 TRUE,则框架在显示菜单时将焦点设置到颜色菜单;如果为 FALSE,则不更改焦点。 默认值为 TRUE。 |
| CMFCColorButton::m_bEnabledInCustomizeMode | 指示是否为颜色按钮启用自定义模式。 |
m_Color | COLORREF 值。 包含当前选定的颜色。 |
m_ColorAutomatic | COLORREF 值。 包含当前选定的默认颜色。 |
m_Colors | COLORREF 值的 CArray。 包含当前可用的颜色。 |
m_lstDocColors | COLORREF 值的 CList。 包含当前文档颜色。 |
m_nColumns | {1}一个整数。{2} 包含要在颜色选择菜单的颜色网格中显示的列数。 |
m_pPalette | 指向 CPalette 的指针。 包含当前颜色选择菜单中可用的颜色。 |
m_pPopup | 指向 CMFCColorPopupMenu 类对象的指针。 单击颜色按钮时显示的颜色选择菜单。 |
m_strAutoColorText | 一个字符串。 颜色选择菜单中“自动”按钮的标签。 |
m_strDocColorsText | 一个字符串。 显示文档颜色的颜色选择菜单中的按钮的标签。 |
m_strOtherText | 一个字符串。 颜色选择菜单中“其他”按钮的标签。 |
| 名称 | 描述 |
|---|---|
| CMFCColorButton::EnableAutomaticButton | 启用和禁用常规颜色按钮上方的“自动”按钮。 (标准的系统“自动”按钮标记为“自动”。) |
| CMFCColorButton::EnableOtherButton | 启用和禁用常规颜色按钮下方的“其他”按钮。 (标准的系统“其他”按钮标记为“更多颜色”。) |
| CMFCColorButton::GetAutomaticColor | 检索当前的自动颜色。 |
| CMFCColorButton::GetColor | 检索按钮的颜色。 |
| CMFCColorButton::SetColor | 设置按钮的颜色。 |
| CMFCColorButton::SetColorName | 设置颜色名称。 |
| CMFCColorButton::SetColumnsNumber | 设置颜色选取器对话框中的列数。 |
| CMFCColorButton::SetDocumentColors | 指定在颜色选取器对话框中显示的文档特定颜色的列表。 |
| CMFCColorButton::SetPalette | 指定标准显示颜色的调色板。 |
| CMFCColorButton::SizeToContent | 根据文本和图像大小更改按钮控件的大小。 |
| 名称 | 描述 |
|---|---|
| CMFCColorButton::IsDrawXPTheme | 指示是否以 Windows XP 的视觉样式显示当前颜色按钮。 |
| CMFCColorButton::OnDraw | 由框架调用以显示按钮的图像。 |
| CMFCColorButton::OnDrawBorder | 由框架调用以显示按钮的边框。 |
| CMFCColorButton::OnDrawFocusRect | 由框架调用以在按钮具有焦点时显示焦点矩形。 |
| CMFCColorButton::OnShowColorPopup | 即将显示颜色选取器对话框时由框架调用。 |
| CMFCColorButton::RebuildPalette | 将受保护的数据成员 m_pPalette 初始化为指定的调色板或默认的系统调色板。 |
| CMFCColorButton::UpdateColor | 当用户从颜色选取器对话框的调色板中选择颜色时由框架调用。 |
静态创建



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);
}



动态创建


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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCCOLORBUTTON1, &CMFCTest4Dlg::OnBnClickedMfccolorbutton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedMfccolorbutton1();
};

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 类
| 名称 | 描述 |
|---|---|
| CMFCEditBrowseCtrl::EnableBrowseButton | 启用或禁用(隐藏)浏览按钮。 |
| CMFCEditBrowseCtrl::EnableFileBrowseButton | 启用浏览按钮,并使编辑浏览控件处于“文件浏览”模式。 |
| CMFCEditBrowseCtrl::EnableFolderBrowseButton | 启用浏览按钮,并使编辑浏览控件处于“文件夹浏览”模式。 |
| CMFCEditBrowseCtrl::GetMode | 返回当前浏览模式。 |
| CMFCEditBrowseCtrl::OnAfterUpdate | 在编辑浏览控件已更新浏览操作结果后由框架调用。 |
| CMFCEditBrowseCtrl::OnBrowse | 在用户单击浏览按钮后由框架调用。 |
| CMFCEditBrowseCtrl::OnChangeLayout | 重新绘制当前编辑浏览控件。 |
| CMFCEditBrowseCtrl::OnDrawBrowseButton | 由框架调用以绘制浏览按钮。 |
| CMFCEditBrowseCtrl::OnIllegalFileName | 在编辑控件中输入非法文件名时由框架调用。 |
CMFCEditBrowseCtrl::PreTranslateMessage | 在将窗口消息发送到 TranslateMessage 和 DispatchMessage Windows 函数之前,对此消息进行转换。 有关语法和详细信息,请参阅 CWnd::PreTranslateMessage。 |
| CMFCEditBrowseCtrl::SetBrowseButtonImage | 设置浏览按钮的自定义图像。 |
静态创建



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);
}

动态创建

#define IDC_MFCEDITBROWSE1 1067

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &CMFCTest4Dlg::OnEnChangeMfceditbrowse1)
END_MESSAGE_MAP()

// CMFCTest4Dlg 对话框
class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnEnChangeMfceditbrowse1();
};

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 类
| 名称 | 描述 |
|---|---|
| CMFCFontComboBox::m_bDrawUsingFont | 向框架指示使用哪种字体来绘制当前字体组合框中的项标签。 |
| 名称 | 描述 |
|---|---|
CMFCFontComboBox::CompareItem | 由框架调用,以确定新项在当前字体组合框控件的排序列表框中的相对位置。 (替代 CComboBox::CompareItem。) |
CMFCFontComboBox::DrawItem | 由框架调用,以在当前字体组合框控件中绘制指定项。 (替代 CComboBox::DrawItem。) |
| CMFCFontComboBox::GetSelFont | 检索有关当前所选字体的信息。 |
CMFCFontComboBox::MeasureItem | 由框架调用,以通知 Windows 当前字体组合框控件中列表框的维数。 (替代 CComboBox::MeasureItem。) |
CMFCFontComboBox::PreTranslateMessage | 在将窗口消息发送到 TranslateMessage 和 DispatchMessage Windows 函数之前,对此消息进行转换。 (重写 CWnd::PreTranslateMessage。) |
| CMFCFontComboBox::SelectFont | 从字体组合框中选择与指定条件匹配的字体。 |
| CMFCFontComboBox::Setup | 初始化字体组合框中的项列表。 |
静态创建





void CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCFontComboBox* pFcbx = (CMFCFontComboBox*)GetDlgItem(IDC_MFCFONTCOMBO1);
if (pFcbx)
{
CMFCFontInfo* pFontInfo = pFcbx->GetSelFont();
AfxMessageBox(pFontInfo->m_strName);
}
}



动态创建

#define IDC_MFCFONTCOMBO1 1070

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_CBN_SELCHANGE(IDC_MFCFONTCOMBO1, &CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnCbnSelchangeMfcfontcombo1();
};

void CMFCTest4Dlg::OnCbnSelchangeMfcfontcombo1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCFontComboBox* pFcbx = (CMFCFontComboBox*)GetDlgItem(IDC_MFCFONTCOMBO1);
if (pFcbx)
{
CMFCFontInfo* pFontInfo = pFcbx->GetSelFont();
AfxMessageBox(pFontInfo->m_strName);
}
}



CMFCMaskedEdit 类
| 名称 | 描述 |
|---|---|
| CMFCMaskedEdit::DisableMask | 禁止验证用户输入。 |
| CMFCMaskedEdit::EnableGetMaskedCharsOnly | 指定 GetWindowText 方法是否只检索掩码字符。 |
| CMFCMaskedEdit::EnableMask | 初始化掩码编辑控件。 |
| CMFCMaskedEdit::EnableSelectByGroup | 指定掩码编辑控件是选择特定用户输入组还是所有用户输入。 |
| CMFCMaskedEdit::EnableSetMaskedCharsOnly | 指定文本是仅针对掩码字符还是针对整个掩码进行验证。 |
CMFCMaskedEdit::GetThisClass | 由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。 |
| CMFCMaskedEdit::GetWindowText | 从掩码编辑控件中检索已验证的文本。 |
| CMFCMaskedEdit::SetValidChars | 指定用户可输入的有效字符的字符串。 |
| CMFCMaskedEdit::SetWindowText | 在掩码编辑控件中显示提示。 |
| 名称 | 描述 |
|---|---|
| CMFCMaskedEdit::IsMaskedChar | 由框架调用来对照相应的掩码字符验证指定字符。 |
| 掩码字符 | 定义 |
|---|---|
| D | 数字。 |
| d | 数字或空格。 |
| + | 加号 (+)、减号 (-) 或空格。 |
| C | 字母字符。 |
| c | 字母字符或空格。 |
| A | 字母数字字符。 |
| a | 字母数字字符或空格。 |
| * | 可打印字符。 |
静态创建




void CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMaskedEdit* pMe = (CMFCMaskedEdit*)GetDlgItem(IDC_MFCMASKEDEDIT2);
CString s;
pMe->GetWindowText(s);
AfxMessageBox(s);
}


动态创建


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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_EN_KILLFOCUS(IDC_MFCMASKEDEDIT2, &CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnEnKillfocusMfcmaskededit2();
};

void CMFCTest4Dlg::OnEnKillfocusMfcmaskededit2()
{
// TODO: 在此添加控件通知处理程序代码
CMFCMaskedEdit* pMe = (CMFCMaskedEdit*)GetDlgItem(IDC_MFCMASKEDEDIT2);
CString s;
pMe->GetWindowText(s);
AfxMessageBox(s);
}



CMFCMenuButton 类
| 名称 | 描述 |
|---|---|
| CMFCMenuButton::PreTranslateMessage | 由框架调用以在调度窗口消息之前翻译窗口消息。 (替代 CMFCButton::PreTranslateMessage。) |
| CMFCMenuButton::SizeToContent | 根据按钮的文本和图像大小更改按钮的大小。 |
| 名称 | 描述 |
|---|---|
| CMFCMenuButton::m_bOSMenu | 指定是显示默认系统弹出菜单还是使用 CContextMenuManager::TrackPopupMenu。 |
| CMFCMenuButton::m_bRightArrow | 指定弹出菜单显示在按钮的下方还是右侧。 |
| CMFCMenuButton::m_bStayPressed | 指定用户释放按钮后菜单按钮是否更改其状态。 |
| CMFCMenuButton::m_hMenu | 附加的 Windows 菜单的句柄。 |
| CMFCMenuButton::m_nMenuResult | 一个标识符,指示用户从弹出菜单中选择的项。 |
| CMFCMenuButton::m_bDefaultClick | 允许默认处理(针对按钮文本/图像)。 |
静态创建




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
}

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;
}
}




动态创建

#define IDC_MFCMENUBUTTON1 1000
#define IDR_MENU1 1001
#define ID_32771 1002
#define ID_32773 1003

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_MFCMENUBUTTON1, &CMFCTest4Dlg::OnBnClickedMfcmenubutton1)
END_MESSAGE_MAP()


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 类
| 名称 | 描述 |
|---|---|
| CMFCShellListCtrl::DisplayFolder | 显示包含在提供的文件夹中的项列表。 |
| CMFCShellListCtrl::DisplayParentFolder | 显示包含在当前所显示的文件夹的父文件夹中的项列表。 |
| CMFCShellListCtrl::EnableShellContextMenu | 启用或禁用快捷菜单。 |
| CMFCShellListCtrl::GetCurrentFolder | 检索当前文件夹的路径。 |
| CMFCShellListCtrl::GetCurrentFolderName | 检索当前文件夹的名称。 |
| CMFCShellListCtrl::GetCurrentItemIdList | 返回当前列表控件项的 PIDL。 |
| CMFCShellListCtrl::GetCurrentShellFolder | 返回指向当前 Shell 文件夹的指针。 |
| CMFCShellListCtrl::GetItemPath | 返回项的文本路径。 |
| CMFCShellListCtrl::GetItemTypes | 返回列表控件显示的 Shell 项类型。 |
| CMFCShellListCtrl::IsDesktop | 检查当前所选文件夹是否为桌面文件夹。 |
| CMFCShellListCtrl::OnCompareItems | 框架在比较两个项时调用此方法。 (重写 CMFCListCtrl::OnCompareItems。) |
| CMFCShellListCtrl::OnFormatFileDate | 当框架检索列表控件显示的文件日期时调用。 |
| CMFCShellListCtrl::OnFormatFileSize | 当框架转换列表控件的文件大小时调用。 |
| CMFCShellListCtrl::OnGetItemIcon | 当框架检索列表控件项的图标时调用。 |
| CMFCShellListCtrl::OnGetItemText | 当框架转换列表控件项的文本时调用。 |
| CMFCShellListCtrl::OnSetColumns | 当框架在设置列名时调用。 |
| CMFCShellListCtrl::Refresh | 刷新并重绘列表控件。 |
| CMFCShellListCtrl::SetItemTypes | 设置列表控件显示的项的类型。 |
静态创建




void CMFCTest4Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMFCShellListCtrl* pMsl = (CMFCShellListCtrl*)GetDlgItem(IDC_MFCSHELLLIST1);//获取控件
CString s;
pMsl->GetCurrentFolder(s);//获取当前文件夹
AfxMessageBox(s);
pMsl->GetItemPath(s, 10);//获取项10的文件路径
AfxMessageBox(s);
}



动态创建

#define IDC_MFCSHELLLIST1 1000
#define IDC_IDC_BUTTON1 1001

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};

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 项。 使用的显示格式类似于资源管理器窗口的列表视图的格式。
| 名称 | 描述 |
|---|---|
| CMFCShellTreeCtrl::EnableShellContextMenu | 启用或禁用快捷菜单。 |
| CMFCShellTreeCtrl::GetFlags | 返回传递给 IShellFolder::EnumObjects 的标志的组合。 |
| CMFCShellTreeCtrl::GetItemPath | 检索项的路径。 |
| CMFCShellTreeCtrl::GetRelatedList | 返回指向 CMFCShellListCtrl 类对象的指针,该对象与此 CMFCShellTreeCtrl 对象一起使用以创建类似于资源管理器的窗口。 |
| CMFCShellTreeCtrl::OnChildNotify | 此窗口的父窗口在收到适用于此窗口的通知消息时会调用此成员函数由。 (替代 CWnd::OnChildNotify。) |
| CMFCShellTreeCtrl::OnGetItemIcon | |
| CMFCShellTreeCtrl::OnGetItemText | |
| CMFCShellTreeCtrl::Refresh | 刷新并重新绘制当前 CMFCShellTreeCtrl 对象。 |
| CMFCShellTreeCtrl::SelectPath | 基于提供的 PIDL 或字符串路径选择相应的树控件项。 |
| CMFCShellTreeCtrl::SetFlags | 设置标志以筛选树上下文(类似于 IShellFolder::EnumObjects 使用的标志)。 |
| CMFCShellTreeCtrl::SetRelatedList | 设置当前 CMFCShellTreeCtrl 对象与 CMFCShellListCtrl 对象之间的关系。 |
静态创建




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);
}
}


动态创建

#define IDC_BUTTON1 1001
#define IDC_MFCSHELLTREE1 1002

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};

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 类
| 名称 | 描述 |
|---|---|
| CRichEditCtrl::CanPaste | 确定是否可以将剪贴板的内容粘贴到此 Rich Edit 控件中。 |
| CRichEditCtrl::CanRedo | 确定控件恢复队列中是否包含任何操作。 |
| CRichEditCtrl::CanUndo | 确定是否可以撤消编辑操作。 |
| CRichEditCtrl::CharFromPos | 检索有关编辑控件的工作区中最接近指定点的字符的信息。 |
| CRichEditCtrl::Clear | 清除当前的选择。 |
| CRichEditCtrl::Copy | 将当前选定内容复制到剪贴板。 |
| CRichEditCtrl::Create | 创建 Windows Rich Edit 控件并将其与此 CRichEditCtrl 对象相关联。 |
| CRichEditCtrl::CreateEx | 使用指定的扩展 Windows 样式创建 Windows Rich Edit控件,并将其与此 CRichEditCtrl 对象相关联。 |
| CRichEditCtrl::Cut | 将当前选定内容剪切到剪贴板。 |
| CRichEditCtrl::DisplayBand | 显示此 CRichEditCtrl 对象的一部分内容。 |
| CRichEditCtrl::EmptyUndoBuffer | 重置(清除)此 CRichEditCtrl 对象的撤消标志。 |
| CRichEditCtrl::FindText | 定位此 CRichEditCtrl 对象中的文本。 |
| CRichEditCtrl::FindWordBreak | 查找指定字符位置之前或之后的下一个换行符,或检索有关该位置字符的信息。 |
| CRichEditCtrl::FormatRange | 格式化目标输出设备的文本范围。 |
| CRichEditCtrl::GetCharPos | 确定给定字符在此 CRichEditCtrl 对象中的位置。 |
| CRichEditCtrl::GetDefaultCharFormat | 检索此 CRichEditCtrl 对象中的当前默认字符格式设置属性。 |
| CRichEditCtrl::GetEventMask | 检索此 CRichEditCtrl 对象的事件掩码。 |
| CRichEditCtrl::GetFirstVisibleLine | 确定此 CRichEditCtrl 对象中最顶部可见的行。 |
| CRichEditCtrl::GetIRichEditOle | 检索指向此 Rich Edit 控件的 IRichEditOle 接口的指针。 |
| CRichEditCtrl::GetLimitText | 获取用户可以输入到此 CRichEditCtrl 对象的文本数量的限制。 |
| CRichEditCtrl::GetLine | 从此 CRichEditCtrl 对象检索文本行。 |
| CRichEditCtrl::GetLineCount | 检索此 CRichEditCtrl 对象中的行数。 |
| CRichEditCtrl::GetModify | 确定自上次保存以来此 CRichEditCtrl 对象的内容是否已更改。 |
| CRichEditCtrl::GetOptions | 检索 Rich Edit 控件选项。 |
| CRichEditCtrl::GetParaFormat | 检索此 CRichEditCtrl 对象中当前选定内容中的段落格式设置属性。 |
| CRichEditCtrl::GetPunctuation | 检索 Rich Edit 控件的当前标点符号字符。 此消息仅适用于操作系统的亚洲语言版本。 |
| CRichEditCtrl::GetRect | 检索此 CRichEditCtrl 对象的格式设置矩形。 |
| CRichEditCtrl::GetRedoName | 检索控件恢复队列中下一个操作的类型(如果有)。 |
| CRichEditCtrl::GetSel | 获取当前选定内容在此 CRichEditCtrl 对象中的起始和结束位置。 |
| CRichEditCtrl::GetSelectionCharFormat | 检索此 CRichEditCtrl 对象中当前选定内容中的字符格式设置属性。 |
| CRichEditCtrl::GetSelectionType | 检索此 CRichEditCtrl 对象中当前选定内容中的内容类型。 |
| CRichEditCtrl::GetSelText | 获取此 CRichEditCtrl 对象中当前选定内容的文本 |
| CRichEditCtrl::GetTextLength | 检索此 CRichEditCtrl 对象中文本的长度(以字符为单位)。 不包括终止 null 字符。 |
| CRichEditCtrl::GetTextLengthEx | 检索 Rich Edit 视图中的字符数或字节数。 接受标志列表以指示在 Rich Edit 控件中确定文本长度的方法 |
| CRichEditCtrl::GetTextMode | 检索 Rich Edit 控件的当前文本模式和撤消级别。 |
| CRichEditCtrl::GetTextRange | 检索指定范围内的文本。 |
| CRichEditCtrl::GetUndoName | 检索下一个撤消操作的类型(如果有)。 |
| CRichEditCtrl::GetWordWrapMode | 检索 Rich Edit 控件的当前换行和断字选项。 此消息仅适用于操作系统的亚洲语言版本。 |
| CRichEditCtrl::HideSelection | 显示或隐藏当前选定内容。 |
| CRichEditCtrl::LimitText | 限制用户可以输入 CRichEditCtrl 对象的文本量。 |
| CRichEditCtrl::LineFromChar | 确定哪一行包含给定字符。 |
| CRichEditCtrl::LineIndex | 检索此 CRichEditCtrl 对象中给定行的字符索引。 |
| CRichEditCtrl::LineLength | 检索此 CRichEditCtrl 对象中给定行的长度。 |
| CRichEditCtrl::LineScroll | 滚动此 CRichEditCtrl 对象中的文本。 |
| CRichEditCtrl::Paste | 将剪贴板的内容插入 Rich Edit 控件。 |
| CRichEditCtrl::PasteSpecial | 以指定的数据格式将剪贴板的内容插入到此 Rich Edit 控件中。 |
| CRichEditCtrl::PosFromChar | 检索编辑控件中指定字符的工作区坐标。 |
| CRichEditCtrl::Redo | 恢复控件的恢复队列中的下一个操作。 |
| CRichEditCtrl::ReplaceSel | 将此 CRichEditCtrl 对象中的当前选定内容替换为指定的文本。 |
| CRichEditCtrl::RequestResize | 强制此 CRichEditCtrl 对象发送请求重设大小通知。 |
| CRichEditCtrl::SetAutoURLDetect | 指示自动 URL 检测在 Rich Edit 控件中是否处于活动状态。 |
| CRichEditCtrl::SetBackgroundColor | 设置此 CRichEditCtrl 对象中的背景色。 |
| CRichEditCtrl::SetDefaultCharFormat | 设置此 CRichEditCtrl 对象中的当前默认字符格式设置属性。 |
| CRichEditCtrl::SetEventMask | 设置此 CRichEditCtrl 对象的事件掩码。 |
| CRichEditCtrl::SetModify | 设置或清除此 CRichEditCtrl 对象的修改标志。 |
| CRichEditCtrl::SetOLECallback | 设置此 Rich Edit 控件的 IRichEditOleCallback COM 对象。 |
| CRichEditCtrl::SetOptions | 设置此 CRichEditCtrl 对象的选项。 |
| CRichEditCtrl::SetParaFormat | 设置此 CRichEditCtrl 对象中当前选定内容中的段落格式设置属性。 |
| CRichEditCtrl::SetPunctuation | 设置 Rich Edit 控件的标点符号。 此消息仅适用于操作系统的亚洲语言版本。 |
| CRichEditCtrl::SetReadOnly | 设置此 CRichEditCtrl 对象的只读选项。 |
| CRichEditCtrl::SetRect | 设置此 CRichEditCtrl 对象的格式设置矩形。 |
| CRichEditCtrl::SetSel | 设置此 CRichEditCtrl 对象中的选项。 |
| CRichEditCtrl::SetSelectionCharFormat | 设置此 CRichEditCtrl 对象中当前选定内容中的字符格式设置属性。 |
| CRichEditCtrl::SetTargetDevice | 设置此 CRichEditCtrl 对象的目标输出设备。 |
| CRichEditCtrl::SetTextMode | 设置 Rich Edit 控件的文本模式或撤消级别。 如果控件包含文本,消息将失败。 |
| CRichEditCtrl::SetUndoLimit | 设置可存储在撤消队列中的操作的最大操作数。 |
| CRichEditCtrl::SetWordCharFormat | 设置此 CRichEditCtrl 对象中当前单词中的字符格式设置属性。 |
| CRichEditCtrl::SetWordWrapMode | 设置 Rich Edit 控件的换行和断字选项。 此消息仅适用于操作系统的亚洲语言版本。 |
| CRichEditCtrl::StopGroupTyping | 阻止控件将其他键入操作收集到当前撤消操作中。 控件将下一个键入操作(如果有)存储到撤消队列中的新操作中。 |
| CRichEditCtrl::StreamIn | 将输入流中的文本插入到此 CRichEditCtrl 对象中。 |
| CRichEditCtrl::StreamOut | 将此 CRichEditCtrl 对象中的文本存储到输出流中。 |
| CRichEditCtrl::Undo | 反转上次编辑操作。 |
静态创建

不清楚为什么静态创建出来在VS2019上无法运行
动态创建

#define IDC_BUTTON1 1001
#define IDC_RICHEDIT21 1077

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};

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);
}



CScrollBar 类
| 名称 | 描述 |
|---|---|
| CScrollBar::Create | 创建 Windows 滚动条并将其附加到 CScrollBar 对象。 |
| CScrollBar::EnableScrollBar | 启用或禁用滚动条的一个或两个箭头。 |
| CScrollBar::GetScrollBarInfo | 使用 SCROLLBARINFO 结构检索有关滚动条的信息。 |
| CScrollBar::GetScrollInfo | 检索有关滚动条的信息。 |
| CScrollBar::GetScrollLimit | 检索滚动条的限制 |
| CScrollBar::GetScrollPos | 检索滚动框的当前位置。 |
| CScrollBar::GetScrollRange | 检索给定滚动条的当前最小和最大滚动条位置。 |
| CScrollBar::SetScrollInfo | 设置有关滚动条的信息。 |
| CScrollBar::SetScrollPos | 设置滚动框的当前位置。 |
| CScrollBar::SetScrollRange | 设置给定滚动条的最小和最大位置值。 |
| CScrollBar::ShowScrollBar | 显示或隐藏滚动条。 |
静态创建



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
}



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);
}



动态创建

#define IDC_SCROLLBAR1 1078
#define IDC_SCROLLBAR2 1079
#define IDC_EDIT1 1080

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
}


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);
};

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 类
静态创建



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
}



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;
}

动态创建


#define IDC_TAB1 1081

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCTest4Dlg::OnTcnSelchangeTab1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult);
};

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 类
静态创建


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
}



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;
}



动态创建


#define IDC_TREE1 1082

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &CMFCTest4Dlg::OnNMDblclkTree1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnNMDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult);
};

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
| 名称 | 描述 |
|---|---|
| CVSListBox::AddItem | 将字符串添加到列表控件。 (替代 CVSListBoxBase::AddItem。) |
| CVSListBox::EditItem | 对列表控件项的文本启动编辑操作。 (替代 CVSListBoxBase::EditItem。) |
| CVSListBox::GetCount | 检索可编辑列表控件中的字符串数。 (替代 CVSListBoxBase::GetCount。) |
| CVSListBox::GetItemData | 检索与可编辑列表控件项关联的应用程序特定的 32 位值。 (替代 CVSListBoxBase::GetItemData。) |
| CVSListBox::GetItemText | 检索可编辑列表控件项的文本。 (替代 CVSListBoxBase::GetItemText。) |
| CVSListBox::GetSelItem | 检索可编辑列表控件中当前选定项的从零开始的索引。 (替代 CVSListBoxBase::GetSelItem。) |
CVSListBox::PreTranslateMessage | 在将窗口消息发送到 TranslateMessage 和 DispatchMessage Windows 函数之前,对此消息进行转换。 有关详细信息和方法语法,请参阅 CWnd::PreTranslateMessage。 (替代 CVSListBoxBase::PreTranslateMessage。) |
| CVSListBox::RemoveItem | 从可编辑列表控件中删除项。 (替代 CVSListBoxBase::RemoveItem。) |
| CVSListBox::SelectItem | 选择可编辑列表控件字符串。 (替代 CVSListBoxBase::SelectItem。) |
| CVSListBox::SetItemData | 将应用程序特定的 32 位值与可编辑列表控件项关联。 (替代 CVSListBoxBase::SetItemData。) |
| 名称 | 描述 |
|---|---|
| CVSListBox::GetListHwnd | 返回当前嵌入列表视图控件的句柄。 |
静态创建





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);
}
}


动态创建

#define IDC_BUTTON1 1001
#define IDC_MFCVSLISTBOX1 1083

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
}

BEGIN_MESSAGE_MAP(CMFCTest4Dlg, CDialogEx)
...
ON_BN_CLICKED(IDC_BUTTON1, &CMFCTest4Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()

class CMFCTest4Dlg : public CDialogEx
{
...
public:
afx_msg void OnBnClickedButton1();
};

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);
}
}















浙公网安备 33010602011771号