CListBox 控件字体枚举以及填充

本文介绍了如何在C++中实现CListBox控件的字体枚举功能,并详细讲解了EnumFontFamProc回调函数的使用,以及如何在CListBox中填充字体列表。文章还探讨了回调函数为何需要声明为静态成员函数,以及创建和操作控件的具体步骤。
摘要由CSDN通过智能技术生成


前言

在继承自CWnd的窗口上创建控件,CListBox显示系统所有安装的字体,然后在显示在CStatic控件上,涉及到 函数:
  • ::EnumFontFamilies((HDC)dc,NULL,(FONTENUMPROC)EnumFontFamProc,(LPARAM)this);
  • static int CALLBACK EnumFontFamProc(ENUMLOGFONT *lpelf, // logical-font data
    NEWTEXTMETRIC *lpntm, // physical-font data
    DWORD FontType, // type of font
    LPARAM lParam // application-defined data
    );

    EnumFontFamProc为静态的原因是由于回调函数在C++应用程序中要求专门的处理。Windows 严格地定义了回调函数的接口,即通过参数列表传递的参数。
    当C++类的成员函数被声明时,编译程序会自动附加一个额外的参数来保存 this 指针。不幸的是,附加了参数就使回调函数的参数列表与Windows期望的参数列表不匹配了,
    由此会导致各种问题出现,
    甚至包括无效内存访问错误,是Windows程序员的灾难。有几种解决此问题的方法,而将回调函数声明为静态成员函数是其中最简单最直接的一种。
    在C++ ,不给静态成员函数传递this指针,因此它的参数列表不会改变

  • SetFont(CFont* pFont, BOOL bRedraw)
  • CreatePointFont(80, _T(“MS Sans Serif”));
  • CreateEx(WS_EX_CLIENTEDGE, _T(“listbox”), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, rect, this, IDC_LISTBOX, NULL);
  • SetRect
  • CreateFont(-2 * m_cyChar, 0, 0, 0, FW_NORMAL, 0, 0, 0,
    DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, strFontFace);

一、实现自定义窗口类

实现自定义窗口类

1.注册窗口类

  • 在构造函数里面实现
CFontView::CFontView()
{
   
	CString strWndClass = AfxRegisterWndClass(
		NULL,										// Class style
		AfxGetApp()->LoadStandardCursor(IDC_ARROW),   // Class cursor
		(HBRUSH)(COLOR_3DFACE + 1),					// Background brush
		AfxGetApp()->LoadStandardIcon(IDI_WINLOGO)	// Class icon
	);
		...//省略
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值