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 剪辑。

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 类

通过为图像列表提供支持扩展组合框控件。

控件支持每个项最多三个图像:一个用于选定状态,一个用于未选定状态,一个用于覆盖图像。

名称 描述
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 设置扩展组合框控件的视觉样式。

静态创建

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

名称 描述
CListCtrl::ApproximateViewRect 确定显示列表视图控件项需要的宽度和高度。
CListCtrl::Arrange 对齐网格上的项。
CListCtrl::CancelEditLabel 取消项文本编辑操作。
CListCtrl::Create 创建列表控件并将它附加到 CListCtrl 对象。
CListCtrl::CreateDragImage 为指定项创建拖拽图像列表。
CListCtrl::CreateEx 创建具有指定 Windows 扩展样式的列表控件,并将其附加到 CListCtrl 对象。
CListCtrl::DeleteAllItems 删除控件中所有的项。
CListCtrl::DeleteColumn 从列表视图控件删除列。
CListCtrl::DeleteItem 删除控件中的项。
CListCtrl::DrawItem 在所有者绘制的控件的可视特征发生变化时调用。
CListCtrl::EditLabel 开始对项的文本进行就地编辑。
CListCtrl::EnableGroupView 启用或禁用控制列表视图控件中的项是否显示为组的功能。
CListCtrl::EnsureVisible 确保项可见。
CListCtrl::FindItem 搜索具有指定特征的列表视图项。
CListCtrl::GetBkColor 检索列表视图控件的背景色。
CListCtrl::GetBkImage 检索列表视图控件的当前背景图像。
CListCtrl::GetCallbackMask 检索列表视图控件的回调掩码。
CListCtrl::GetCheck 检索与项关联的状态图像的当前显示状态。
CListCtrl::GetColumn 检索控件的列的属性。
CListCtrl::GetColumnOrderArray 检索列表视图控件的列顺序(从左到右)。
CListCtrl::GetColumnWidth 检索报表视图或列表视图中的列的宽度。
CListCtrl::GetCountPerPage 计算列表视图控件中可垂直容纳的项数。
CListCtrl::GetEditControl 检索用于编辑项文本的编辑控件的句柄。
CListCtrl::GetEmptyText 检索显示当前列表视图控件是否空的字符串。
CListCtrl::GetExtendedStyle 检索列表视图控件当前的扩展样式。
CListCtrl::GetFirstSelectedItemPosition 检索列表视图控件中第一个选定的列表视图项的位置。
CListCtrl::GetFocusedGroup 检索当前列表视图控件中具有键盘焦点的组。
CListCtrl::GetGroupCount 检索当前列表视图控件中的组数。
CListCtrl::GetGroupInfo 获取列表视图控件的指定组的信息。
CListCtrl::GetGroupInfoByIndex 检索关于当前列表视图控件中的指定组的信息。
CListCtrl::GetGroupMetrics 检索组的指标。
CListCtrl::GetGroupRect 检索当前列表视图控件中的指定组的边框。
CListCtrl::GetGroupState 检索当前列表视图控件中的指定组的状态。
CListCtrl::GetHeaderCtrl 检索列表视图控件的标头控件。
CListCtrl::GetHotCursor 检索为列表视图控件启用了热跟踪时使用的光标。
CListCtrl::GetHotItem 检索当前位于光标下的列表视图项。
CListCtrl::GetHoverTime 检索列表视图控件的当前悬停时间。
CListCtrl::GetImageList 检索用于绘制列表视图项的图像列表的句柄。
CListCtrl::GetInsertMark 检索插入标记的当前位置。
CListCtrl::GetInsertMarkColor 检索插入标记的当前颜色。
CListCtrl::GetInsertMarkRect 检索绑定插入点的矩形。
CListCtrl::GetItem 检索列表视图项的属性。
CListCtrl::GetItemCount 检索列表视图控件中的项数。
CListCtrl::GetItemData 检索与项关联的特定于应用程序的值。
CListCtrl::GetItemIndexRect 检索当前列表视图控件中的子项的全部或部分的边框。
CListCtrl::GetItemPosition 检索列表视图项的位置。
CListCtrl::GetItemRect 检索项的边框。
CListCtrl::GetItemSpacing 计算当前列表视图控件中的项之间的间距。
CListCtrl::GetItemState 检索列表视图项的状态。
CListCtrl::GetItemText 检索列表视图项或子项的文本。
CListCtrl::GetNextItem 搜索一个列表视图项,它具有指定属性并具有与给定项的指定关系。
CListCtrl::GetNextItemIndex 检索具有指定属性集的当前列表视图控件中的项的索引。
CListCtrl::GetNextSelectedItem 检索一个列表视图项位置的索引,以及下一个用于迭代的列表视图项的位置。
CListCtrl::GetNumberOfWorkAreas 检索列表视图控件当前工作区域的数量。
CListCtrl::GetOrigin 检索列表视图控件当前视图原点。
CListCtrl::GetOutlineColor 检索列表视图控件的边框颜色。
CListCtrl::GetSelectedColumn 检索列表控件中当前选定的列的索引。
CListCtrl::GetSelectedCount 检索列表视图控件中选定项的数量。
CListCtrl::GetSelectionMark 检索列表视图控件的选择标记。
CListCtrl::GetStringWidth 确定显示给定字符串的全部所必需的最小列宽。
CListCtrl::GetSubItemRect 检索列表视图控件中的项的边框。
CListCtrl::GetTextBkColor 检索列表视图控件的文本背景色。
CListCtrl::GetTextColor 检索列表视图控件的文本颜色。
CListCtrl::GetTileInfo 检索有关列表视图控件中的图块的信息。
CListCtrl::GetTileViewInfo 检索有关平铺视图中的列表视图控件的信息。
CListCtrl::GetToolTips 检索列表视图控件用于显示工具提示的工具提示控件。
CListCtrl::GetTopIndex 检索最上面的可见项的索引。
CListCtrl::GetView 获取列表视图控件的视图。
CListCtrl::GetViewRect 检索列表视图控件中所有项的边框。
CListCtrl::GetWorkAreas 检索列表视图控件的当前工作区域。
CListCtrl::HasGroup 确定列表视图控件是否具有指定组。
CListCtrl::HitTest 确定位于指定位置的列表视图项。
CListCtrl::InsertColumn 在列表视图控件中插入新列。
CListCtrl::InsertGroup 在列表视图控件中插入组。
CListCtrl::InsertGroupSorted 将指定组插入已排序的组列表中。
CListCtrl::InsertItem 在列表视图控件中插入新项。
CListCtrl::InsertMarkHitTest 检索最靠近指定点的插入点。
CListCtrl::IsGroupViewEnabled 确定是否为列表视图控件启用了组视图。
CListCtrl::IsItemVisible 指示指定项在当前列表视图控件中是否可见。
CListCtrl::MapIDToIndex 将当前列表视图控件中的项的唯一 ID 映射到索引。
CListCtrl::MapIndexToID 将当前列表视图控件中的项的索引映射到唯一 ID。
CListCtrl::MoveGroup 移动指定组。
CListCtrl::MoveItemToGroup 将指定组移到列表视图控件的指定的从零开始的索引。
CListCtrl::RedrawItems 强制列表视图控件重新绘制一系列的项。
CListCtrl::RemoveAllGroups 从列表视图控件中删除所有的组。
CListCtrl::RemoveGroup 从列表视图控件中删除指定的组。
CListCtrl::Scroll 滚动列表视图控件的内容。
CListCtrl::SetBkColor 设置列表视图控件的背景色。
CListCtrl::SetBkImage 设置列表视图控件的当前背景图像。
CListCtrl::SetCallbackMask 设置列表视图控件的回调掩码。
CListCtrl::SetCheck 设置与项关联的状态图像的当前显示状态。
CListCtrl::SetColumn 设置列表视图列的属性。
CListCtrl::SetColumnOrderArray 设置列表视图控件的列顺序(从左到右)。
CListCtrl::SetColumnWidth 更改报表视图或列表视图中的列的宽度。
CListCtrl::SetExtendedStyle 设置列表视图控件当前的扩展样式。
CListCtrl::SetGroupInfo 设置列表视图控件的指定组的信息。
CListCtrl::SetGroupMetrics 设置列表视图控件的组指标。
CListCtrl::SetHotCursor 设置为列表视图控件启用了热跟踪时使用的光标。
CListCtrl::SetHotItem 设置列表视图控件的当前热项。
CListCtrl::SetHoverTime 设置列表视图控件的当前悬停时间。
CListCtrl::SetIconSpacing 设置列表视图控件中的图标间的间距。
CListCtrl::SetImageList 向列表视图控件分配图像列表。
CListCtrl::SetInfoTip 设置工具提示文本。
CListCtrl::SetInsertMark 将插入点设置为定义的位置。
CListCtrl::SetInsertMarkColor 设置插入点的颜色。
CListCtrl::SetItem 设置列表视图项的部分属性或全部属性。
CListCtrl::SetItemCount 准备一个列表视图控件,用于添加大量的项。
CListCtrl::SetItemCountEx 设置虚拟列表视图控件的项计数。
CListCtrl::SetItemData 设置项的应用程序特定的值。
CListCtrl::SetItemIndexState 设置当前列表视图控件中的项的状态。
CListCtrl::SetItemPosition 将项移到列表视图控件中的指定位置。
CListCtrl::SetItemState 更改列表视图控件中的项的状态。
CListCtrl::SetItemText 更改列表视图项或子项的文本。
CListCtrl::SetOutlineColor 设置列表视图控件的边框颜色。
CListCtrl::SetSelectedColumn 设置列表视图控件的选定列。
CListCtrl::SetSelectionMark 设置列表视图控件的选择标记。
CListCtrl::SetTextBkColor 设置列表视图控件中的文本的背景色。
CListCtrl::SetTextColor 设置列表视图控件的文本颜色。
CListCtrl::SetTileInfo 设置列表视图控件的图块的信息。
CListCtrl::SetTileViewInfo 设置列表视图控件在平铺视图中使用的信息。
CListCtrl::SetToolTips 设置列表视图控件将用于显示工具提示的工具提示控件。
CListCtrl::SetView 设置列表视图控件的视图。
CListCtrl::SetWorkAreas 设置可在列表视图控件中显示图标的区域。
CListCtrl::SortGroups 使用用户定义的函数对列表视图控件的组进行排序。
CListCtrl::SortItems 使用应用程序定义的比较函数对列表视图项排序。
CListCtrl::SortItemsEx 使用应用程序定义的比较函数对列表视图项排序。
CListCtrl::SubItemHitTest 确定哪一个列表视图项(如果有)位于给定位置。
CListCtrl::Update 强制控件重新绘制指定的项。

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

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::CleanUp 重置内部变量并释放分配的资源,如图像、位图和图标。
CMFCButton::CreateObject 由框架用于创建此类类型的动态实例。
CMFCButton::DrawItem 当所有者绘制的按钮的视觉外观发生变化时由框架调用。 (替代 CButton::DrawItem。)
CMFCButton::EnableFullTextTooltip 指定是在大工具提示窗口中显示工具提示的完整文本,还是在小工具提示窗口中显示文本的截断版本。
CMFCButton::EnableMenuFont 指定按钮文本字体是否与应用程序菜单字体相同。
CMFCButton::EnableWindowsTheming 指定按钮边框的样式是否与当前 Windows 主题相对应。
CMFCButton::GetThisClass 由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。
CMFCButton::GetToolTipCtrl 返回对基础工具提示控件的引用。
CMFCButton::IsAutoCheck 指示复选框或单选按钮是否为自动按钮。
CMFCButton::IsAutorepeatCommandMode 指示按钮是否设置为自动重复模式。
CMFCButton::IsCheckBox 指示按钮是否为复选框按钮。
CMFCButton::IsChecked 指示当前按钮是否已选中。
CMFCButton::IsHighlighted 指示按钮是否已突出显示。
CMFCButton::IsPressed 指示按钮是否已按下并突出显示。
CMFCButton::IsPushed 指示按钮是否已按下。
CMFCButton::IsRadioButton 指示按钮是否为单选按钮。
CMFCButton::IsWindowsThemingEnabled 指示按钮边框的样式是否与当前 Windows 主题相对应。
CMFCButton::OnDrawParentBackground 在指定区域中绘制按钮的父级的背景。 (替代 AFX_GLOBAL_DATA::DrawParentBackground。)
CMFCButton::PreTranslateMessage 在窗口消息调度到 TranslateMessageDispatchMessage Windows 函数之前对其进行转换。 (替代 CWnd::PreTranslateMessage。)
CMFCButton::SetAutorepeatMode 将按钮设置为自动重复模式。
CMFCButton::SetCheckedImage 设置选中的按钮的图像。
CMFCButton::SetFaceColor 设置按钮文本的背景色。
CMFCButton::SetImage 设置按钮的图像。
CMFCButton::SetMouseCursor 设置光标图像。
CMFCButton::SetMouseCursorHand 将光标设置为手形图像。
CMFCButton::SetStdImage 使用 CMenuImages 对象设置按钮图像。
CMFCButton::SetTextColor 设置未选中的按钮的按钮文本的颜色。
CMFCButton::SetTextHotColor 设置选中的按钮的按钮文本的颜色。
CMFCButton::SetTooltip 将工具提示与按钮相关联。
CMFCButton::SizeToContent 调整按钮的大小以包含按钮文本和图像。
名称 描述
CMFCButton::OnDraw 由框架调用以绘制按钮。
CMFCButton::OnDrawBorder 由框架调用以绘制按钮的边框。
CMFCButton::OnDrawFocusRect 由框架调用以绘制按钮的聚焦框。
CMFCButton::OnDrawText 由框架调用以绘制按钮文本。
CMFCButton::OnFillBackground 由框架调用以绘制按钮文本的背景。
CMFCButton::SelectFont 检索与指定设备上下文关联的字体。

静态创建

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


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 当用户从颜色选取器对话框的调色板中选择颜色时由框架调用。

静态创建

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 类

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

静态创建

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 类

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

静态创建

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 类

名称 描述
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 字母数字字符或空格。
* 可打印字符。

静态创建

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

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 允许默认处理(针对按钮文本/图像)。

静态创建

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 类

名称 描述
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 设置列表控件显示的项的类型。

静态创建

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 项。 使用的显示格式类似于资源管理器窗口的列表视图的格式。

名称 描述
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 对象之间的关系。

静态创建

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

名称 描述
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上无法运行

动态创建

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

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 显示或隐藏滚动条。

静态创建

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

名称 描述
CTabCtrl::AdjustRect 计算给定窗口矩形的选项卡控件的显示区域,或计算对应于给定显示区域的窗口矩形。
CTabCtrl::Create 创建选项卡控件并将其附加到 TabCtrl 对象的实例
CTabCtrl::CreateEx 创建具有指定 Windows 扩展样式的选项卡控件并将其附加到 CTabCtrl 对象的实例。
CTabCtrl::DeleteAllItems 从选项卡控件中移除所有项。
CTabCtrl::DeleteItem 从选项卡控件中移除项。
CTabCtrl::DeselectAll 重置选项卡控件中的项,清除已按下的任何项。
CTabCtrl::DrawItem 绘制选项卡控件的指定项。
CTabCtrl::GetCurFocus 检索具有选项卡控件当前焦点的选项卡。
CTabCtrl::GetCurSel 确定选项卡控件中当前选定的选项卡。
CTabCtrl::GetExtendedStyle 检索当前用于选项卡控件的扩展样式。
CTabCtrl::GetImageList 检索与选项卡控件关联的图像列表。
CTabCtrl::GetItem 检索有关选项卡控件中选项卡的信息。
CTabCtrl::GetItemCount 检索选项卡控件中选项卡的数目。
CTabCtrl::GetItemRect 检索选项卡控件中选项卡的边框。
CTabCtrl::GetItemState 检索指示的选项卡控件项的状态。
CTabCtrl::GetRowCount 检索选项卡控件中选项卡的当前行数。
CTabCtrl::GetToolTips 检索与选项卡控件关联的工具提示控件的句柄。
CTabCtrl::HighlightItem 设置选项卡项的突出显示状态。
CTabCtrl::HitTest 确定哪个选项卡(如果有)位于指定的屏幕位置。
CTabCtrl::InsertItem 在选项卡控件中插入新选项卡。
CTabCtrl::RemoveImage 从选项卡控件的图像列表中移除图像。
CTabCtrl::SetCurFocus 将焦点设置为选项卡控件中的指定选项卡。
CTabCtrl::SetCurSel 在选项卡控件中选择一个选项卡。
CTabCtrl::SetExtendedStyle 设置选项卡控件的扩展样式。
CTabCtrl::SetImageList 将图像列表分配给选项卡控件。
CTabCtrl::SetItem 设置选项卡的部分或全部属性。
CTabCtrl::SetItemExtra 设置选项卡控件中为应用程序定义数据保留的每个选项卡的字节数。
CTabCtrl::SetItemSize 设置项的宽度和高度。
CTabCtrl::SetItemState 设置指示的选项卡控件项的状态。
CTabCtrl::SetMinTabWidth 设置选项卡控件中项的最小宽度。
CTabCtrl::SetPadding 设置选项卡控件中每个选项卡图标和标签周围的空间量(填充)。
CTabCtrl::SetToolTips 将工具提示控件分配给选项卡控件。

静态创建

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

名称 描述
CTreeCtrl::Create 创建树视图控件并将其附加到 CTreeCtrl 对象。
CTreeCtrl::CreateDragImage 为指定的树视图项创建拖动位图。
CTreeCtrl::CreateEx 创建具有指定 Windows 扩展样式的树控件,并将其附加到 CTreeCtrl 对象。
CTreeCtrl::DeleteAllItems 删除树视图控件中的所有项。
CTreeCtrl::DeleteItem 删除树视图控件中的某个新项。
CTreeCtrl::EditLabel 就地编辑指定的树视图项。
CTreeCtrl::EndEditLabelNow 取消当前树视图控件中对树视图项标签的编辑操作。
CTreeCtrl::EnsureVisible 确保树视图项在其树视图控件中可见。
CTreeCtrl::Expand 展开或折叠指定树视图项的子项。
CTreeCtrl::GetBkColor 检索控件的当前背景色。
CTreeCtrl::GetCheck 检索树控件项的选中状态。
CTreeCtrl::GetChildItem 检索指定树视图项的子级。
CTreeCtrl::GetCount 检索与树视图控件关联的树项数。
CTreeCtrl::GetDropHilightItem 检索拖放操作的目标。
CTreeCtrl::GetEditControl 检索用于编辑指定树视图项的编辑控件的句柄。
CTreeCtrl::GetExtendedStyle 检索当前树视图控件正在使用的扩展样式。
CTreeCtrl::GetFirstVisibleItem 检索指定树视图项的第一个可见项。
CTreeCtrl::GetImageList 检索与树视图控件关联的图像列表的句柄。
CTreeCtrl::GetIndent 检索树视图项与其父级之间的偏移量(以像素为单位)。
CTreeCtrl::GetInsertMarkColor 检索用于绘制树视图的插入标记的颜色。
CTreeCtrl::GetItem 检索指定树视图项的属性。
CTreeCtrl::GetItemData 返回与项关联的特定于应用程序的值。
CTreeCtrl::GetItemExpandedImageIndex 检索在当前树视图控件的指定项处于展开状态时要显示的图像的索引。
CTreeCtrl::GetItemHeight 检索树视图项的当前高度。
CTreeCtrl::GetItemImage 检索与项关联的图像。
CTreeCtrl::GetItemPartRect 检索当前树视图控件中指定项的指定部分的边框。
CTreeCtrl::GetItemRect 检索树视图项的边框。
CTreeCtrl::GetItemState 返回项的状态。
CTreeCtrl::GetItemStateEx 检索当前树视图控件中指定项的扩展状态。
CTreeCtrl::GetItemText 返回项的文本。
CTreeCtrl::GetLastVisibleItem 检索当前树视图控件中最后的扩展项。
CTreeCtrl::GetLineColor 检索树视图控件的当前线条颜色。
CTreeCtrl::GetNextItem 检索与指定关系匹配的下一个树视图项。
CTreeCtrl::GetNextSiblingItem 检索指定树视图项的下一个同级。
CTreeCtrl::GetNextVisibleItem 检索指定树视图项的下一个可见项。
CTreeCtrl::GetParentItem 检索指定树视图项的父级。
CTreeCtrl::GetPrevSiblingItem 检索指定树视图项的前一个同级。
CTreeCtrl::GetPrevVisibleItem 检索指定树视图项的前一个可见项。
CTreeCtrl::GetRootItem 检索指定树视图项的根。
CTreeCtrl::GetScrollTime 检索树视图控件的最大滚动时间。
CTreeCtrl::GetSelectedCount 检索当前树视图控件中已选定的项的数目。
CTreeCtrl::GetSelectedItem 检索当前已选定的树视图项。
CTreeCtrl::GetTextColor 检索控件的当前文本颜色。
CTreeCtrl::GetToolTips 检索树视图控件使用的子 ToolTip 控件的句柄。
CTreeCtrl::GetVisibleCount 检索与树视图控件关联的可见树项数。
CTreeCtrl::HitTest 返回与 CTreeCtrl 对象相关的游标的当前位置。
CTreeCtrl::InsertItem 在树视图控件中插入某个新项。
CTreeCtrl::ItemHasChildren 如果指定项具有子项,则返回非零值。
CTreeCtrl::MapAccIdToItem 将指定的辅助功能标识符映射到当前树视图控件中的树视图项的句柄。
CTreeCtrl::MapItemToAccID 将当前树视图控件中的树视图项的指定句柄映射到辅助功能标识符。
CTreeCtrl::Select 选择、滚动到视图中,或重新绘制指定的树视图项。
CTreeCtrl::SelectDropTarget 将树项重新绘制为拖放操作的目标。
CTreeCtrl::SelectItem 选择指定的树视图项。
CTreeCtrl::SelectSetFirstVisible 选择指定的树视图项作为第一个可见项。
CTreeCtrl::SetAutoscrollInfo 设置当前树视图控件的自动注册速率。
CTreeCtrl::SetBkColor 设置控件的背景色。
CTreeCtrl::SetCheck 设置树控件项的选中状态。
CTreeCtrl::SetExtendedStyle 设置当前树视图控件的扩展样式。
CTreeCtrl::SetImageList 设置与树视图控件关联的图像列表的句柄。
CTreeCtrl::SetIndent 设置树视图项与其父级之间的偏移量(以像素为单位)。
CTreeCtrl::SetInsertMark 设置树视图控件中的插入标记。
CTreeCtrl::SetInsertMarkColor 设置用于绘制树视图的插入标记的颜色。
CTreeCtrl::SetItem 设置指定树视图项的属性。
CTreeCtrl::SetItemData 设置与项关联的特定于应用程序的值。
CTreeCtrl::SetItemExpandedImageIndex 设置在当前树视图控件的指定项处于展开状态时要显示的图像的索引。
CTreeCtrl::SetItemHeight 设置树视图项的高度。
CTreeCtrl::SetItemImage 将图像与项相关联。
CTreeCtrl::SetItemState 设置项的状态。
CTreeCtrl::SetItemStateEx 设置当前树视图控件中指定项的扩展状态。
CTreeCtrl::SetItemText 设置项的文本。
CTreeCtrl::SetLineColor 设置树视图控件的当前线条颜色。
CTreeCtrl::SetScrollTime 设置树视图控件的最大滚动时间。
CTreeCtrl::SetTextColor 或设置控件的文本颜色。
CTreeCtrl::SetToolTips 设置树视图控件的子 ToolTip 控件。
CTreeCtrl::ShowInfoTip 显示当前树视图控件中指定项的信息提示。
CTreeCtrl::SortChildren 对给定父项的子级进行排序。
CTreeCtrl::SortChildrenCB 使用应用程序定义的排序函数对给定父项的子级进行排序。

静态创建

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

名称 描述
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 在将窗口消息发送到 TranslateMessageDispatchMessage Windows 函数之前,对此消息进行转换。 有关详细信息和方法语法,请参阅 CWnd::PreTranslateMessage。 (替代 CVSListBoxBase::PreTranslateMessage。)
CVSListBox::RemoveItem 从可编辑列表控件中删除项。 (替代 CVSListBoxBase::RemoveItem。)
CVSListBox::SelectItem 选择可编辑列表控件字符串。 (替代 CVSListBoxBase::SelectItem。)
CVSListBox::SetItemData 将应用程序特定的 32 位值与可编辑列表控件项关联。 (替代 CVSListBoxBase::SetItemData。)
名称 描述
CVSListBox::GetListHwnd 返回当前嵌入列表视图控件的句柄。

静态创建

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);
	}	
}
相关推荐
习惯就好zz2 小时前
画画抓型学习总结
学习·九宫格·画画·抓型
Surpass余sheng军2 小时前
AI 时代下的网关技术选型
人工智能·经验分享·分布式·后端·学习·架构
Jack___Xue3 小时前
LangChain实战快速入门笔记(二)--LangChain使用之Model I/O
笔记·langchain
2401_871260023 小时前
Java学习笔记(二)面向对象
java·python·学习
weixin_409383124 小时前
简单四方向a*学习记录10 重写前面的所有逻辑
学习
遇到困难睡大觉哈哈4 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
风123456789~4 小时前
【健康管理】第12章 健康信息学 2/2
笔记·考证·健康管理
hetao17338374 小时前
2025-12-11 hetao1733837的刷题笔记
c++·笔记·算法