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 类

名称描述
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

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::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在窗口消息调度到 TranslateMessage 和 DispatchMessage 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检索与指定设备上下文关联的字体。

静态创建

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_ColorCOLORREF 值。 包含当前选定的颜色。
m_ColorAutomaticCOLORREF 值。 包含当前选定的默认颜色。
m_ColorsCOLORREF 值的 CArray。 包含当前可用的颜色。
m_lstDocColorsCOLORREF 值的 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 类

名称描述
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将工具提示控件分配给选项卡控件。

静态创建

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 类

名称描述
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使用应用程序定义的排序函数对给定父项的子级进行排序。

静态创建

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

posted @ 2026-01-09 20:59  clnchanpin  阅读(11)  评论(0)    收藏  举报