MFC 之 控件的颜色、字体、背景设置

实现WM_CTLCOLOR消息
HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	if (pWnd->GetDlgCtrlID() == IDC_TEST)
	{
		pDC->SetTextColor(m_color);			//设置字体颜色
		pDC->SetBkColor(RGB(255, 255, 255));//设置背景颜色
		pDC->SetBkMode(TRANSPARENT);		//设置背景透明
		pDC->SetTextAlign(SS_LEFT);			//设置对齐方式
		pDC->SelectObject(&m_font);			//设置字体
	}
	
	//return m_bru;		//返回你需要的画笔
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}


设置字体

方法一:
在onpaint中选择所需要的字体CFont
pDC->SelectObject(&m_font); //设置字体

方法二:

LOGFONT lf;
CClientDC dc(this);
font = dc.GetCurrentFont();
if(NULL != font)
font->GetLogFont(&lf);
::ZeroMemory(&lf, sizeof(&lf));
lf.lfHeight = 30;

具体字体操作参考:
http://www.360doc.com/content/16/1019/22/35648956_599729894.shtml

MFC中LOGFONT字体大小转换
MFC中,LOGFONT的lfHeihgt与FontSize的大小转换规则为:
LOGFONT.lfHeight = MulDiv(-m_FontSize,GetDeviceCaps(GetDC(NULL),LOGPIXELSX),72); 
NULL也可以用hDC;


模拟给控件发送消息

如果是想在子窗口操作父窗口的按钮,那么可以模拟按钮事件:
WPARAM wParam;
wParam = BN_CLICKED;
wParam <<= 16;
wParam |= uID; //按钮ID
LPARAM lParam;
lParam = (LPARAM)::GetDlgItem(GetSafeHwnd(), uID);
//pWnd:接受按钮事件的窗口的指针
::PostMessage(pWnd->GetSafeHwnd(), WM_COMMAND, wParam, lParam);


设置DC属性,例如:画刷,画笔,字体等。

CPen *pOldPen=dc->SelectObject(&pen);//画笔选入设备描述表,并返回当前的画笔
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//创建一个透明的画刷
CBrush *pOldBrush=dc->SelectObject(pBrush);//选择画刷
dc->Rectangle(rect);
dc->FillRect(rect,pBrush);
dc->SelectObject(pOldBrush);//恢复以前 的画刷


消息反射

在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就像是从父窗口反射回来一样


在派生一个控件类时,往往需要设置控件本身的一些属性。可以使用向导类实现带等号的消息,例如: =WM_CTLCOLOR消息

具体参考网址:
https://blog.csdn.net/feimashenhua/article/details/7039859

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值