VS开发之自定义编辑框文本颜色及字体

目录

1.消息映射

2.设置文本颜色

3.设置文本字体

后记


1.消息映射

可读可写的编辑框可以通过响应WM_CTLCOLOREDIT消息,来自定义编辑框的文本颜色和字体。但如果该编辑框只读,那么需要响应WM_CTLCOLORSTATIC消息。

public:
	BEGIN_MSG_MAP(TestDialog)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnColorEdit)
	END_MSG_MAP()

public:
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

2.设置文本颜色

LRESULT TestDialog::OnColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	UINT ctrID = ::GetDlgCtrlID((HWND)lParam);
	HDC dc = (HDC)wParam;
	switch (ctrID)
	{
		case IDC_TESTEDIT:
		{
			SetBkMode(dc, TRANSPARENT);
			SetTextColor(dc, RGB(0, 0, 255));
		}
		break;
	}
	return (LRESULT)GetStockObject(WHITE_BRUSH);
}

3.设置文本字体

设置编辑框的字体的最佳时机应该是在窗口初始化的时候,所以我们要在WM_INITDIALOG消息中给编辑框发送WM_SETFONT消息。创建的字体记得在窗口销毁前删除!

LRESULT TestDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	HWND editHwnd = GetDlgItem(IDC_TESTEDIT);
	HFONT editFont = CreateFont(14, 0, 0, 0, FW_NORMAL, FALSE,
			FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
			CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH,
			L"宋体");
	SendMessage(editHwnd, WM_SETFONT, (WPARAM)editFont, (LPARAM)FALSE);

	return TRUE;
}

效果图:

后记

编辑框默认是可以复制其显示的内容的,但是要想自己实现也可以。我们创建一个按钮,通过响应按钮按下的动作,然后获取编辑框中的内容复制到粘贴板,复制内容到粘贴板的实现如下:

BOOL result = FALSE;
size_t len = wcslen(text);
HGLOBAL hClip;
if (OpenClipboard())
{
    EmptyClipboard();	//将剪贴板内容清空
    hClip = GlobalAlloc(GMEM_MOVEABLE, sizeof(TCHAR) * (len + 1));
    if (hClip != NULL)
    {
        TCHAR* buff = (TCHAR*)GlobalLock(hClip);
        if (buff != NULL)
		{
            //将数据复制到分配的内存块中
		    memcpy(buff, text, sizeof(TCHAR) * len);
			buff[len] = (TCHAR)0;
			GlobalUnlock(hClip);
	        //将内存块放入剪贴板中, 当前是ASCII码格式需要转为UNICODE否则字符串可能乱码。
            HANDLE res = SetClipboardData(CF_UNICODETEXT, hClip);
			CloseClipboard();	
			if (res != NULL)
				result = TRUE;
		  }
		  else
		  {
		    result = FALSE;
            GlobalUnlock(hClip);
		  }

	  }
	  return result;
}
return result;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值