《Windows核心编程》の“字体”和“颜色”对话框

MFC学习笔记之八————颜色对话框与字体对话框 当程序中需要用到画图的时候,就要选择画笔的颜色,在MFC中提供了一个CColorDialog的类,通过此类可以很方便的创建这样一个颜色对话框。其构造函数如下: CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd 阅读详情

“字体”通用对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色,以及一些效果如斜线、粗体、删除线或下划线等,显示选择“字体”对话框的函数是ChooseFont:

BOOL WINAPI ChooseFont(

  __inout  LPCHOOSEFONT lpcf

);

lpcf指向CHOOSEFONT结构:

typedef struct {

  DWORD        lStructSize; //结构长度

  HWND         hwndOwner; //所属窗口

  HDC          hDC; //当Flags标志指定CF_PRINTERFONTS标志时,它是打印机的DC句柄

  LPLOGFONT    lpLogFont; //指向一个LOGFONT结构

  INT          iPointSize; //选择的字体的大小,单位是1/10磅

  DWORD        Flags; //标志

  COLORREF     rgbColors; //选择的字体的颜色

  LPARAM       lCustData; //

  LPCFHOOKPROC lpfnHook; //

  LPCTSTR      lpTemplateName; //

  HINSTANCE    hInstance; //

  LPTSTR       lpszStyle; //

  WORD         nFontType; //

  INT          nSizeMin; //

  INT          nSizeMax; //

} CHOOSEFONT, *LPCHOOSEFONT;

 

结构中一些重要的字段说明:

lpLogFont---指向一个包含LOGFONT结构的缓冲区。LOGFONT结构可以用来指定字体的名称和属性。如果Flags标志中指定CF_INITTOLOGFONTSTRUCT标志的话,对话框将根据这个结构初始化对话框,函数也在这里返回用户选择的字体名称:

typedef struct tagLOGFONT {

  LONG  lfHeight;

  LONG  lfWidth;

  LONG  lfEscapement;

  LONG  lfOrientation;

  LONG  lfWeight;

  BYTE  lfItalic;

  BYTE  lfUnderline;

  BYTE  lfStrikeOut;

  BYTE  lfCharSet;

  BYTE  lfOutPrecision;

  BYTE  lfClipPrecision;

  BYTE  lfQuality;

  BYTE  lfPitchAndFamily;

  TCHAR lfFaceName[LF_FACESIZE];

} LOGFONT, *PLOGFONT;

 

rgbColor---如果Flags标志中指定CF_EFFECTS,对话框将根据这个数值初始化“颜色”下拉式列表框。另外,函数在返回时在这里返回用户选择的字体颜色。

 

nFontType---返回用户选择的字体属于哪一类,可能返回值是:BOLD_FONTTYPE,ITALIC_FONTTYPE,PRINTER_FONTTYPE,REGULAR_FONTTYPE和SCREEN_FONTTYPE。

 

Flags---该字段的初始值决定对话框的不同行为,函数返回时也会在这里返回一些用户的选择,它可以是下列值的组合:

CF_BOTH       //对话框同时列出打印机字体和屏幕字体

CF_TTONLY  //对话框只显示TrueType字体

CF_EFFECTS   //对话框只显示“效果”复选框

CF_FIXEDPITCHONLY //对话框的字体列表中只显示等宽字体

CF_LIMITSIZE         //对话框显示的字体尺寸限于nSizeMin和nSizeMax字段指定的数值之间

CF_NOSTYLESEL   //对话框不显示“字形”组合列表框

CF_NOSIZESEL       //对话框不显示“大小”组合列表框

CF_SCREENFONTS        //字体列表中只显示屏幕字体

 

调用ChooseFont函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE;用户单击“取消”按钮时,函数返回FALSE。

在调用ChooseFont函数之前,lpLogFont字段被指向一个LOGFONT结构,对话框关闭时,函数在LOGFONT结构的lfFaceName字段中返回字体的名称,字体的效果和字形也在LOGFONT结构中返回。

用户选择的颜色在rgbColor字段中返回,字体大小在iPointSize字段中返回,由于单位是1/10磅,所以返回的数值等于对话框中选择的字体大小乘以10。

 

函数实例代码片段如下:

HWND hwnd;                // owner window

HDC hdc;                  // display device context of owner window

 

CHOOSEFONT cf;            // common dialog box structure

static LOGFONT lf;        // logical font structure

static DWORD rgbCurrent;  // current text color

HFONT hfont, hfontPrev;

DWORD rgbPrev;

 

// Initialize CHOOSEFONT

ZeroMemory(&cf, sizeof(cf));

cf.lStructSize = sizeof (cf);

cf.hwndOwner = hwnd;

cf.lpLogFont = &lf;

cf.rgbColors = rgbCurrent;

cf.Flags = CF_SCREENFONTS | CF_EFFECTS;

 

if (ChooseFont(&cf)==TRUE)

{

    hfont = CreateFontIndirect(cf.lpLogFont);

    hfontPrev = SelectObject(hdc, hfont);

    rgbCurrent= cf.rgbColors;

    rgbPrev = SetTextColor(hdc, rgbCurrent);

 .

 .

 .

}

 

=======================================================

打开“颜色选择”对话框使用函数ChooseColor:

BOOL WINAPI ChooseColor(

  __inout  LPCHOOSECOLOR lpcc

);

 

lpcc指向结构CHOOSECOLOR:

typedef struct {

  DWORD        lStructSize; //结构长度

  HWND         hwndOwner; //所属窗口

  HWND         hInstance; //

  COLORREF     rgbResult; //如果Flags字段指定了CC_RGBINIT标志,那么创建对话框时使用这个字段

                   //来初始化选择框中的颜色;函数返回时在这里返回用户选择的颜色

  COLORREF     *lpCustColors; //指向一个16个双字的缓冲区,定义16种自定义颜色

  DWORD        Flags; //标志,如下的组合:

                   //CC_FULLOPEN---对话框显示右边的扩展部分,如果不指定这个标志,初始化时扩展

                   //部分不显示,但用户可以通过单击“规定自定义颜色”按钮将对话框打开

                   //CC_PREVENTFULLOPEN---禁止“规定自定义颜色”按钮,即不允许用户展开对话框

                   //的扩展部分

                 //CC_RGBINIT---对话框显示时用rgbResult字段的值初始化选择框中的颜色

  LPARAM       lCustData; //

  LPCCHOOKPROC lpfnHook; //

  LPCTSTR      lpTemplateName; //

} CHOOSECOLOR, *LPCHOOSECOLOR;

其中COLORREF是用来指定一个RGB颜色值,如0x00bbggrr,定义如下:

typedef DWORD COLORREF;

typedef DWORD* LPCOLORREF

 

如果用户单击“确定”按钮,函数返回TRUE;否则函数返回FALSE。使用ChooseColor函数时要注意:lpCustColors指针不能为NULL,所以必须分配一个16个双字长度的缓冲区,如果指针是NULL会导致函数违规访问00000000h处的内存!

 

函数实例代码片段如下:

CHOOSECOLOR cc;                 // common dialog box structure

static COLORREF acrCustClr[16]; // array of custom colors

HWND hwnd;                      // owner window

HBRUSH hbrush;                  // brush handle

static DWORD rgbCurrent;        // initial color selection

 

// Initialize CHOOSECOLOR

ZeroMemory(&cc, sizeof(cc));

cc.lStructSize = sizeof(cc);

cc.hwndOwner = hwnd;

cc.lpCustColors = (LPDWORD) acrCustClr;

cc.rgbResult = rgbCurrent;

cc.Flags = CC_FULLOPEN | CC_RGBINIT;

 

if (ChooseColor(&cc)==TRUE)

{

    hbrush = CreateSolidBrush(cc.rgbResult);

    rgbCurrent = cc.rgbResult;

}

Python Matplotlib绘图进阶:从散点图、柱状图到组合图实战 数据可视化是数据分析与工程实践中的核心环节,它通过图形化手段将抽象数据转化为直观洞察。其基本原理在于将数据映射为视觉元素,如位置、颜色、大小等,以揭示数据内在的模式、趋势与关联。在Python生态中,Matplotlib作为最基础且功能强大的绘图库,其技术价值在于提供了从简单图表到复杂出版级图形的完整控制能力,广泛应用于科研论文、商业报告及数据仪表盘等场景。掌握Matplotlib的面向对象编程范式与核心图表类型的灵活变通,是提升可视化表达能力的关键。本文聚焦于散点图、柱状图、折线图等常用图表,深入解析其参 阅读详情

相关推荐

Python数据可视化进阶:Matplotlib核心对象模型与实战图表解析

数据可视化是数据分析与科学计算中的基础环节,它通过图形化手段将抽象数据转化为直观洞察。其核心原理在于将数据映射为视觉元素,如位置、形状、颜色和大小,以揭示数据内在的模式、趋势和关联。掌握有效的可视化技术,对于提升数据分析效率、清晰传达信息具有重要价值,广泛应用于学术研究、商业分析和机器学习等领域。本文聚焦于Python生态中广泛使用的Matplotlib库,深入剖析其面向对象的绘图逻辑与核心架构,而非停留在简单的函数调用层面。通过解析散点图、柱状图、折线图等基础图表的设计逻辑与高级参数,并结合性能优化与样式

weixin_34166472的博客 336

10.3颜色对话框

MFC为我们提供了一个类:CColorDialog类,可以很方便创建一个颜色对话框。 CColorDialog类构造函数: CColorDialog( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL ); 第一个参数指定默认颜色选择,默认是黑色。 第二个参数来设置对话框的功能和它的外观。 第三个参数指向父窗口或者拥有者窗口指针。 在绘图子菜单下添加颜色菜单项,ID设置为IDM_COLOR,在视类中为该菜单项添加命令消息响应函数

qq_42148307的博客 671

Aegisub实战:手把手教你制作专业级中日双语音乐字幕

字幕是连接视频内容与观众理解的关键桥梁,其核心原理在于通过时间轴同步技术,将文本信息精准匹配到视频的每一帧。在多媒体制作领域,高质量的字幕不仅能提升内容的可访问性,更是增强艺术表现力和情感传达的重要工具。对于日语音乐爱好者或内容创作者而言,制作中日双语字幕具有独特的技术价值,它不仅是语言学习的辅助,更是深度解析歌词意境、保留原曲语感韵律的文化实践。应用场景广泛覆盖个人MV收藏、同好分享乃至专业的视频内容本地化。本文以经典工具Aegisub为核心,结合**时间轴**校准与**ASS字幕格式**的精细排版,系统

weixin_34021089的博客 372

使用CFontDialog 选择字体

{ #ifndef CF_INACTIVEFONTS #define CF_INACTIVEFONTS 0x02000000L #endif //CF_INACTIVEFONTS //初始化字体结构体 LOGFONT lgFont={0}; //填充用于初始化LOFGONT GetFont()->GetLogFont(&lgFont); CFon...

zgl7903的专栏 1217

Windows标准颜色对话框,API实现

Windows标准颜色对话框,API实现

改变字体颜色大小通过vc操作编程 改变字体大小颜色

通过vc操作编程 改变字体大小颜色 通过vc操作编程 改变字体大小颜色

《Windows核心编程》の“打开”和“保存”文件对话框

<br />Windows操作系统为一些常用功能提供了一些通用对话框(Common Dialog Box),比如,在不同应用程序中运行打开文件、选择字体、选择颜色等操作时,不同程序显示的对话框的模样都是一样。这些对话框是操作系统提供的,实现对话框的代码封装在Comdlg32.dll库文件中,由于不同版本的Comdlg32.dll在设计上可能有所不同,所以不同版本的Windows下对话框会有所不同。<br />Windows提供多种通用对话框,每种通用对话框都使用一个专用的函数来创建和显示,另外,提供一个数据

ASCE1885 4406

演示调用windows的字体对话框(281KB)

演示调用windows的字体对话框(281KB)

系统美化总出错?3 步搞定 Windows 美化 MToolBox 免费功能实测 MToolBox 使用、免费 Windows 美化工具、绿色便携软件、系统定制工具

枫の美化工具箱_v2.0.2 专为 Windows 设计,支持 Win10/11 系统。核心功能覆盖背景、颜色、图标、窗口效果等模块,所有操作实时预览,无需重启资源管理器。工具体积仅 3 MB,纯绿色单文件运行,无安装过程、无后台残留。

wzk1681106的博客 921

V93000 SmarTest 8入门:从零搭建你的第一个半导体测试程序

半导体测试是芯片从设计走向量产的关键环节,而ATE(自动化测试设备)正是支撑这一环节的核心工具。理解ATE测试程序开发的基本原理,不仅需要掌握测试机台的硬件架构,还要熟悉其软件环境中的管脚映射、电平时序、测试流程等底层逻辑。V93000作为爱德万的主力平台,其SmarTest 8环境通过对象化与流程化设计,将复杂的芯片测试任务拆解为可配置、可复用的模块,极大提升了并行测试效率与调试的便利性。无论是数字逻辑芯片的功能验证,还是模拟混合信号器件的参数测量,掌握SmarTest 8的核心操作都能帮助你快速搭建出可

weixin_31476015的博客 240

485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。      部分原理图如下,上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。1.把R10和R16改为1k,示波器C...

qq_26308521的博客 1万+

GPT-imagev2深度体验:多模态AI如何实现中文“封神”与场景化应用

多模态AI模型通过构建统一的视觉-语言语义空间,实现了对图像和文本的深度融合理解。其核心原理在于将图像图块与文本词元在Transformer架构中进行联合训练,从而在统一语义空间内建立跨模态关联。这一技术突破使得模型能够直接处理中文视觉概念,无需经过英文中转,极大提升了语义理解的准确性和语言生成的地道性。在工程实践层面,这依赖于海量高质量的中文多模态数据集和精细化的RLHF调优。其技术价值在于能够执行复杂推理、指令跟随和内容生成,为开发与生产力工具、内容创作、教育医疗等垂直行业带来变革。例如,在开发场景中,

weixin_33743880的博客 350

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 188

模板驱动型文档自动化:让标准化文档生产变填空题

文档自动化是企业内容规模化交付的基础能力,其核心在于将重复性排版、格式校验与条件逻辑从人工流程中解耦。基于结构化数据输入与可编程模板规则,系统可自动完成章节动态加载、智能图表渲染、多语言语境适配及版本血缘追踪,显著降低PDF交付的不确定性与人力波动成本。该技术不替代内容创作,而是通过模板驱动和结构化填充,把文档生产从‘命题作文’转化为高一致性的‘填空题’,广泛适用于合规报告、融资BP、SaaS产品文档等强标准化场景。

weixin_30487201的博客 465

手把手教你用Zemax优化MTF:从‘离焦平衡球差’到高频像差控制的实战技巧

本文详细介绍了如何使用Zemax优化MTF性能,从基础设置到高级技巧的全流程。通过具体案例,讲解了如何利用离焦平衡球差提升中频MTF,以及识别和控制高频像差的方法,帮助光学设计工程师和学生有效提升成像质量。

weixin_30752699的博客 750

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4278
上一篇: 《Windows核心编程》の“打开”和“保存”文件对话框
下一篇: 《Windows核心编程》の“查找”和“替换”对话框+“页面设置”对话框
ACE1985
博客等级 码龄17年 1307粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值