天道酬勤,学无止境

MFC:更改列表控件的字体(MFC: Changing font of a List control)

问题

我需要在运行时更改列表控件的字体,以便使用固定宽度的字体。 我看过一些例子,建议我应该捕获 NM_CUSTOMDRAW 消息,但我想知道是否有更好的方法来做到这一点。

谢谢。

回答1

创建一个合适的 CFont 对象,并通过调用 SetFont() 设置控件的字体,传入 CFont,如下所示:

m_font.CreatePointFont(90,"Courier New");
m_listCtrl.SetFont(&m_font);

这假设您有一个带有“CFont m_font”成员和附加到列表控件的“m_listCtrl”成员的窗口或对话框对象。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • MFC 最详细入门教程
    From:https://blog.csdn.net/wang18323834864/article/details/78621633/ Visual Studio 2019:https://visualstudio.microsoft.com/zh-hans/ 鸡啄米 ----- VS2010/MFC编程入门教程之目录和总结:http://www.jizhuomi.com/software/257.html 一、VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) 第二部分:VS2010/MFC应用程序框架 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC消息映射机制概述) 第三部分:对话框 VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC编程入门之七(对话框:为对话框添加控件) VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门之九(对话框
  • MFC教程(Visual C++ 6.0)|合集 |更新中
    文章目录 前言第1章 Visual C++ 6.0的安装和使用第1节安装 Visual C++ 6.0第2节 安装MSDN for Visual C++ 6.0第3节 开始使用Visual C++ 6.0第4节 Visual C++ 6.0开发环境简介第5节 Visual C++ 6.0调试环境介绍 第2章 Windows编程基础第1节 第一个Win32软件第2节 Win32程序资源管理第3节 基于对话框的Win32程序第4节 Windows数据类型第5节 初步使用MFC第6节对话框资源编辑第7节 MFC封装的数据类型 第3章 MFC原理介绍第1节 使用时间类(CTime)第2节 C++ 封装原理第3节 MFC六大关键技术第4节 Win32消息处理机制第5节 MFC消息映射机制第6节 使用“MFC应用程序向导”建立MFC工程第7节 消息传递第8节 解码消息映射机制 第4章 对话框程序第1节 模式对话框和非模式对话框第2节 调用非模式对话框第3节 对话框的常用回调函数第4节 对话框程序的关闭过程第5节 MFC类库介绍第6节 CWnd类第7节 CWinApp类第8节 CWinApp类的应用第9节 读/写配置文件(.ini) 第5章 对话框组合第1节 登录对话框与主对话框组合第2节 权限管理与登录对话框组合第3节 数据录入与对话框组合第4节 系统对话框第5节 CFile类第6节
  • 当我单击下拉菜单时,MFC 组合框控件未显示项目的完整列表(MFC Combo-Box Control is not showing the full list of items when I click the drop-down menu)
    问题 我正在 MSVS 2008 中编写一个应用程序,它有一个 ComboBox 控件,我通过如下代码进行初始化: static char* OptionString[4] = {"Opt1", "Opt2", "Opt3", "Opt4"}; BOOL CMyAppDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_Option.AddString(OptionString[0]); m_Option.AddString(OptionString[1]); m_Option.AddString(OptionString[2]); m_Option.AddString(OptionString[3]); m_Option.SetCurSel(0)
  • 界面开发:为什么Xtreme Toolkit Pro会成为MFC UI库的一枝独秀
    Codejock软件公司的Xtreme Toolkit Pro是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。 点击下载最新版Xtreme Toolkit Pro Xtreme Calendar Xtreme Calendar控件能为 Windows开发者提供完善的类似于Outlook 2003 Calendar的风格。Windows开发者能方便的创建可管理指定任务的日程表,对这些任务可按天、星期、工作周或月来进行管理。日程表中的数据可通过外部数据库、xml文件或二进制文件来进行绑定。 Xtreme Command Bars Xtreme Command Bars 提供非常漂亮的Office风格的命令条和One Note样式的Tab. 这种构架完全支持菜单和工具栏的个性化设置, 它将在应用程序工作台上给你更大的控制权, Xtreme Command Bars提供嵌入式主题支持,允许你选择预先定义的主题如Officexp
  • 使用 winapi 或 mfc 从 .NET 应用程序列表控件中获取项目名称(Get item names from a .NET applications list control using winapi or mfc)
    问题 所以基本上我有这个软件,它以列表形式输出数据。 感谢这里的评论,我们了解到它很可能是用 .NET 编写的。 我想扫描列表,以便我可以对数据进行一些算法。 使用 Spy++,我发现保存此列表的内容名为“Panel2”,我可以使用 EnumChildWindows 获取此句柄(其类为“WindowsForms10.Window.8.app”)。 但是我不知道如何进入列表本身以便我可以阅读它的项目。 我已经在“Panel2”句柄上尝试过 EnumChildWindows 并输出所有这些窗口的标题,但它们都是空的。 panel2 可以是实际列表吗? 如果是这样,我可以将它转换为 (CListCtrl*) 吗? Axilles 在评论中提到它可能是用 .NET 编写的,是否可以使用诸如 http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1 之类的东西来获取列表的控件 ID/句柄? CWnd* mainWindow; CWnd* panel; CListCtrl* list; BOOL CALLBACK findWindow( HWND hwnd,LPARAM lParam) { char text[8]; GetWindowText(hwnd,text,8); if(strcmp(text,"Fetcher") == 0
  • 单元测试 MFC UI 应用程序?(Unit testing MFC UI applications?)
    问题 如何对大型 MFC UI 应用程序进行单元测试? 我们有一些已经开发多年的大型 MFC 应用程序,我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础、文件打开等。这些由 QA 小组在每日构建后运行。 但是我们想介绍一些程序,以便个别开发人员可以在将代码提交到日常构建之前针对应用程序的对话框、菜单和其他可视元素构建和运行测试。 我听说过诸如对话框上的隐藏测试按钮之类的技术,这些技术仅出现在调试版本中,是否有任何标准工具包可用于此目的。 环境为 C++/C/FORTRAN、MSVC 2005、Intel FORTRAN 9.1、Windows XP/Vista x86 & x64。 回答1 这取决于应用程序的结构。 如果逻辑和 GUI 代码是分开的 (MVC),那么测试逻辑就很容易了。 看看 Michael Feathers 的“谦虚对话框”(PDF)。 编辑:如果您考虑一下:如果应用程序的结构不是这样,您应该非常仔细地重构。 没有其他技术可以测试逻辑。 模拟点击的脚本只是触及表面。 其实很简单: 假设当用户单击按钮时,您的控件/窗口/任何更改列表框的内容,并且您希望确保单击后列表框包含正确的内容。 重构以便有一个单独的列表,其中包含要显示列表框的项目。 这些项目存储在列表中,不会从您的数据来源处提取。 使列表框列表事物的代码只知道新列表。
  • MFC 窗体背景图片设置
    MFC 窗体背景图片设置 2013-08-13 21:48 狂师 阅读(937) 评论(0) 编辑 收藏 很多人在做MFC 界面的时候想要给对话框加入背景图片,很多人都会想到在OnPaint()里面来加一段代码来实现,其实这样做并不怎么科学,因为它会导致窗口不断重绘,在很多项目中窗口会闪烁(比如带播放视频的一个对话框);下面的方法我感觉更为合理。 先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中:CBrush m_brBk;//在public中定义TestDlg.cpp中:在初始化函数OnInitDialog()中加入:BOOL CTestDlg::OnInitDialog(){CDialog::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP2);m_brBk.CreatePatternBrush(&bmp);bmp.DeleteObject();return TRUE; // return TRUE unless you set the focus to a control} 再打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下:HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  • Windows 功能区框架:如何更改字体和大小?(Windows Ribbon Framework: How to change font face and size?)
    问题 如何更改 Windows Ribbon 框架的 UIribbon 使用的字体和字体大小? 功能区使用的字体与用户选择作为其 Windows 首选项的字体不匹配 - 这是我的应用程序使用的首选项。 这意味着随着 Windows 中的字体变大,功能区变小。 请注意每个屏幕截图中的功能区如何变小: Segoe UI 9pt(Windows 默认) Segoe UI 12pt(我使用的) Segoe UI 16pt(客户使用什么) 您可以看到,当我们达到 16pt 时,功能区上的文字很难阅读。 背景 用户可以配置 Windows 使用他们喜欢的字体大小,例如: 8pt 9pt 12pt 以及他们喜欢的字体,例如: MS 无衬线微软无衬线塔霍马用户界面卡利布里 但默认情况下, Windows Ribbon Framework使用的字体不是用户偏好的字体。 编辑:将图片移到顶部以捕捉被闪亮事物吸引的松鼠。 编辑 2:添加了另一张彩色图片,以获得凹凸效果。 编辑 3:编辑以获得凹凸编辑 4:添加另一张不同的图片以获得凹凸 功能区确实允许自定义功能区的颜色。 以下代码片段用于设置功能区的UI_PKEY_GlobalBackgroundColor 。 在这种情况下,我使用用户当前选择的 Aero 配色方案的颜色: IUIFramework framework; ... TColor glass
  • MFC消息机制
    MFC消息机制 2014-11-27 23:02 狂师 阅读(2249) 评论(0) 编辑 收藏 何谓消息、消息处理函数、消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络。一个switch case语句就可以搞定,消息循环直到遇到WM_QUIT消息才会结束,其余的消息均被拦截后调用相应的处理函数。 但在封装了API的MFC中,消息似乎变的有些复杂了,我们看不到熟悉的switch case语句了,取而代之的是一个叫消息映射的东西。为什么MFC要引入消息映射机制,你可以想象一下,在现在的程序开发活动中,你的一个程序是否拥有多个窗体,主窗口就算只有一个,那菜单、工具条、控件这些都是子窗口,那我们需要写多少个switch case,并且还要为每个消息分配一个消息处理函数,这样做是多么的复杂呀。因此MFC采用了一种新的机制。利用一个数组,将窗口消息和相对应的消息处理函数进行映射,你可以理解成这是一个表。这种机制就是消息映射。这张表在窗口基类CWnd定义,派生类的消息映射表如果你没有动作它是空的,也就是说如果你不手工的增加消息处理函数,则当派生窗口接受一个消息时会执行父类的消息处理函数
  • 在 MFC 控件中更改背景和标题的颜色(Change color of background and title in MFC Control)
    问题 我想在 MFC 应用程序中更改我的 EDIT CONTROL、STATIC CONTROL 和 BUTTON CONTROL 的文本颜色和背景颜色。 该控件位于CDialogEx对话框中。 我尝试添加 OnCtlColor(在 Visual Studio 中使用向导,在 WM_CTLCOLR 消息上),但我无法设置可能静态控件和按钮控件的颜色。 我还在OnCtlColor函数(在 IF 构造中)中放置了一个断点,但我什么也没收到。 我还尝试使用SetTextColor函数从GetDlgItem检索控件的句柄,但我无法根据需要更改颜色。 请帮助我。 回答1 我可以断言,我尝试在CDialog中的OnCtlColor中使用,并且它适用于静态和编辑控件。 您所要做的就是: 要更改背景颜色,您需要创建一个仍然存在于该函数之外的画笔并返回其HBRUSH return (HBRUSH) m_brush.GetSafeHandle(); 因此,您必须创建一个成员变量或静态变量(此代码中的m_brush )(我推荐第一个),并且在对话框初始化中您必须创建您想要的画笔。 我想也许有些控件不适用于这个,对于那些我也做过的pDC->SetBkColor(RGB(0,0,255)); 但似乎什么都不做; 它在安全规范中。 为了改变文字颜色,我做了pDC->SetTextColor(RGB(255,0
  • 如何在 mfc 中将控件置于前端(How can you bring a control to front in mfc)
    问题 如何在设计时更改 MFC中控件的 Z 顺序 - 即我不能使用 SetWindowPos 或在运行时执行此操作 - 我想在设计器中看到更改后的 z 顺序(即使我不得不求助于直接 -编辑 .rc 代码)。 我有一个 MFC 对话框,我正在向其中添加控件。 如果控件的边缘之间有重叠,我想将一个放在另一个的前面。 在 Windows 窗体或 WPF 等中。我可以将其置于前面、发送到后面、向前、发送回来。 我在 MFC 中找不到这些选项,也无法说明它如何确定前面的内容,因为刚添加的控件通常位于以前存在的控件后面。 如何在 MFC 中操作 Z 顺序? 即使我必须直接操作 .rc 文件代码(即围绕设计器结束运行)。 回答1 我认为前面的控件将是 rc 文件中出现的最后一个控件。 换句话说,对话框编辑器将在 rc 文件中从上到下绘制每个控件,并在必要时将它们重叠。 您可以编辑 rc 文件以对它们重新排序,或者您可以在编辑器中更改 Tab 键顺序,这样做的作用相同,因为 Tab 键顺序也是根据控件在文件中出现的顺序设置的。 据我所知,MFC 在设计时不提供任何其他分层重叠控件的方法。 回答2 在 Visual Studio 6.0 中执行以下操作。 打开对话框屏幕(在设计器视图中) 按 Ctrl + D 将为每个控件显示选项卡顺序 按您希望在运行时看到的 Tab 键顺序开始单击控件(即
  • MFC: Changing font of a List control
    I need to at run time change the font of a List Control so as to used a fixed width font. I have seen some examples which suggest I should trap the NM_CUSTOMDRAW message, but I was wondering if there was a better way of doing it. Thanks.
  • MFC界面类库Xtreme Toolkit Pro 下载及使用教程介绍
    Xtreme Toolkit Pro 是针对Windows程序员的一套先进的用户界面套包,强大的功能可使您的应用程序具有专业的、现代感的外观。 Xtreme Toolkit Pro 由8个专业级的构件组成,Xtreme CommandBars, Xtreme Docking Pane, Xtreme Property Grid, Xtreme Report Control, Xtreme Calendar, Xtreme ShortcutBar, Xtreme Skinframework, 和 Xtreme Task Panel。 有了Xtreme Toolkit Pro,您可以创建企业级的,结合全套高度定制化用户界面构件,包括微软风格的工具条和功能选单的应用程序。 包含几种流行的外观风格,例如微软OfficeXP、Office2003、OFFICE 2007和Visual Studio.NET。 下载最新版Xtreme Toolkit Pro Xtreme Calendar Xtreme Calendar支持许多您希望从企业级网格构件中获得的标准功能。 集成化的时间刻度集成化的数据拾取器轻松对约会进行编辑 Calendar视图 - Xtreme Calendar 提供了几种内建的现实格式,可供您选择。 您可以选择星期,一周7天、一周5天或月份视图。 如果不希望采用某个内建的视图
  • 如何尽可能快地将大量字符串加载到 MFC 组合框控件中?(How to load a large array of strings in to an MFC combobox control fast as possible?)
    问题 我有一个包含 1000 个字符串的数组要加载到组合框中。 将字符串数组加载到组合框中的最快方法是什么? 除了迭代字符串列表,将每个字符串一次一个地放入组合框之外,还有其他方法吗? 以及如何将加载到其他 10 个组合框的组合框数据复制? 回答1 如果您在 10 个组合框中重复了 1,000 个字符串,您可能需要考虑使用所有者绘制的组合框,它根据数组中的索引动态绘制字符串,而不是将它们完全存储在组合框中。 速度更快,内存效率更高。 查看在线帮助中的DrawItem方法和DRAWITEMSTRUCT结构。 基本上,您可以使用InitStorage和InsertString (如 NuSonic 所述)在组合框中创建 1000 个空白项目,并覆盖DrawItem以根据索引提取和绘制所需的字符串,因为它需要绘制。 回答2 我不知道以原子方式加载多个字符串的任何方法,但是您可以做一些事情来使该过程更高效: 在添加项目以预分配内存之前调用 CComboBox::InitStorage 使用 InsertString 而不是 AddString 来防止在每次添加时触发排序(假设启用了 CBS_SORT 样式) 回答3 可能比带有 DrawItem 的 CComboBox 更快的是所有者数据 CListCtrl。 这也有助于您将项目的子集复制到其他列表中,因为可以使用公共数据源。
  • MFC:更改CEdit的颜色(MFC: Changing the colour of CEdit)
    问题 伙计们,有人可以简要介绍一下如何在运行时更改CEdit控件的背景颜色吗? 如果字段长度为零,我希望能够将背景更改为红色,否则,将背景更改为正常的白色。 回答1 您不能使用普通的CEdit来做到这一点,您需要重写一些位。 实现自己的ON_WM_CTLCOLOR_REFLECT处理程序,然后在处理程序中返回彩色的CBrush: (粗略地讲,您需要在其中放置常规的资源管理,并使用memormebr来删除析构函数中的笔刷) class CColorEdit : public CEdit { .... CBrush m_brBkgnd; afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor) { m_brBkgnd.DeleteObject(); m_brBkgnd.CreateSolidBrush(nCtlColor); } } 回答2 这也可以在不派生自CEdit的情况下完成: 将ON_WM_CTLCOLOR()添加到对话框的BEGIN_MESSAGE_MAP()代码块中。 将OnCltColor()添加到对话框类中: afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 像这样实现OnCtlColor() : HBRUSH CMyDialog
  • 如何在MFC中更改静态文本控件(在按下按钮或在计时器中)的背景颜色?(how to change background color of a static text control (when a button is pushed or in a timer) in mfc?)
    问题 我知道可以使用OnCtlColor()完成此操作,但是在加载表单和绘制静态文本时会更改颜色,我想在加载表单后执行此操作,也许需要使用计时器,我正在寻找解决方案但是我没有找到一个清晰的,这就是我写的: void CTabFive::OnBnClickedButton1() { // TODO: Add your control notification handler code here CWnd* pWnd = this->GetDlgItem(IDC_Chromosome1); CDC* dc = pWnd->GetDC(); dc->SetBkColor(RGB(200,0,0)); pWnd->Invalidate(); pWnd->UpdateWindow(); Invalidate(); UpdateWindow(); //flag = true; } 回答1 无需计时器。 在这里,我有一个bool m_coloured类的成员,该成员初始化为false,并在按下按钮时进行切换。 OnCtlColor将以红色或系统颜色绘制,具体取决于m_coloured的值。 效果很好。 HBRUSH Cmfcvs2010Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx
  • 如何获取复选框的大小和间隙?(How to get size of check and gap in check box?)
    问题 我有一个要准确测量的复选框,以便可以在对话框上正确放置控件。 我可以轻松地测量控件上文本的大小-但是我不知道计算复选框大小和文本之前(或之后)的间距的“官方”方法。 回答1 我很确定复选框的宽度等于 int x = GetSystemMetrics( SM_CXMENUCHECK ); int y = GetSystemMetrics( SM_CYMENUCHECK ); 然后,您可以通过减去以下内容来算出内部区域... int xInner = GetSystemMetrics( SM_CXEDGE ); int yInner = GetSystemMetrics( SM_CYEDGE ); 我在我的代码中使用了它,到目前为止还没有出现问题... 回答2 简短答案: 长版 根据MSDN布局规格:Win32,我们具有复选框尺寸的规格。 从控件的左边缘到文本的开头,共有12个对话框单位: 复选框控件的高度为10个对话框单元: Surfaces and Controls Height (DLUs) Width (DLUs) ===================== ============= =========== Check box 10 As wide as possible (usually to the margins) to accommodate
  • VS2019/MFC编程入门教程:图片控件Picture Control
    上一节中讲的是滚动条控件,本节主要讲一种简单实用的控件,图片控件Picture Control。我们可以在界面某个位置放入图片控件,显示图片以美化界面。在内容开始前有必要了解一下MFC相关控件。 Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。 点击下载Xtreme Toolkit Pro最新试用版 图片控件简介 图片控件和前面讲到的静态文本框都是静态文本控件,因此两者的使用方法有很多相同之处,所属类都是CStatic类,有关成员函数已在前面介绍,这里就不重复了。 图片控件静态和动态加载图片 下面为大家演示如何为图片控件静态和动态加载位图图片。 1. 图片控件静态加载图片 1)创建一个基于对话框的MFC工程,名称设置为“Example27”。 2)准备一张Bitmap图片,名称设为“test.bmp”,放到工程的res文件夹中,res文件夹路径为...\Example27
  • 如何为通过 CreateWindow 创建的窗口指定字体?(How can I specify a font for a window created through CreateWindow?)
    问题 我正在使用纯 Win32 API(RegisterClass 和 CreateWindow 函数)创建窗口。 如何为窗口指定字体而不是系统定义的字体? 回答1 当您创建自己的窗口类时,您有责任自己管理字体。 此任务将分为四个部分: 当窗口被创建时(即当你处理 WM_CREATE 时),使用 CreateFont() 或 CreateFontIndirect() 来获取你想在窗口中使用的字体的 HFONT。 您需要将此 HFONT 与为窗口类的每个实例保留的其他数据一起存储。 您也可以选择让您的窗口类处理 WM_GETFONT 和 WM_SETFONT,但顶级窗口通常不需要它(如果您正在创建一个控制窗口类,您将需要处理 WM_SETFONT,因为对话框管理器发送该消息)。 如果您的窗口有任何包含文本的子窗口,请在窗口的字体更改时向每个子窗口发送 WM_SETFONT 消息。 所有常见的 Windows 控件都处理 WM_SETFONT。 当您绘制窗口的内容时(通常是为了响应 WM_PAINT 消息),在绘制文本(或使用诸如 或 GetTextMetrics() 之类的文本函数)之前,使用 SelectObject() 函数将 HFONT 选择到设备上下文中。 当窗口被销毁时(即当您处理 WM_DESTROY 时),使用 DeleteObject() 释放您在步骤 1
  • MFC:像 Windows 资源管理器一样的地址栏控件(MFC: Address Bar control like Windows Explorer)
    问题 在我的 MFC 应用程序中,我试图创建一个类似于 Windows 7 打开文件对话框的窗口,但它浏览的是虚拟/假文件系统。 它不需要像素完美,但我希望在可能的情况下与本机操作系统对话框保持一致。 可能最具挑战性的部分是沿着打开对话框顶部运行的地址栏。 地址栏控件也位于所有 Windows 资源管理器窗口的顶部。 它显示构成您的路径的文件夹名称。 它在鼠标悬停时显示和隐藏按钮(包括一个有吸引力的淡入淡出动画),在单击名称时更改活动目录,并在单击名称之间的三角形时显示子菜单。 这似乎不对应于任何 MFC 控件(或控件组)。 Spy++ 将其显示为“AddressDisplay Control”,但除此之外我找不到太多文档。 有没有办法在 MFC 中访问这样的控件或模仿它? 此外,我没有浏览真正的文件系统,所以我必须能够告诉控件要显示什么——我不能只将它指向 C:\ 而让系统完成剩下的工作。 这是有问题的控件的图片。 回答1 不幸的是,我认为这是 Microsoft 决定不通过 Feature Pack 向开发人员公开的控件之一。 Feature Pack 是从 BCG 控制库开发的。 而且,该库包含您想要的控件。 但是,它不是免费的。 唯一的另一种选择是自己编码。