VC Edit控件单行垂直居中和定制外框的实现
Edit控件很奇怪,不在WM_PAINT里面画图,且外框也不在WM_NCPAINT里面画,客户区就是整个窗口,非客户区没有。也没有垂直居中风格可以设置。在界面排版的时候,看起来怪怪的。
下面提供Edit控件单行垂直居中和定制外框的实现。
1. 如果要定制外框,控件的风格不要包含WS_BORDER。
hWnd_text = CreateWindow(WC_EDIT, NULL, WS_CHILD | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, NULL, NULL);
2. 子类化控件的窗口处理函数。
SetWindowProc(hWnd_text, (WNDPROC) CPDFRetriever::TextWindowProc);
3. 响应WM_NCCALCSIZE消息,定制客户区,使文本居中

case WM_NCCALCSIZE:
OnTextCalNCSize(((LPNCCALCSIZE_PARAMS) lParam)->rgrc);
return ; VOID OnTextCalNCSize(RECT * rect){
rect->left += ;
rect->top += (rect->bottom - rect->top - ) / ; // 13为字符高度
rect->bottom -= ;
rect->right -= ;
}
字符高度的获取,使用下面的方法
int GetFontHeigth(HWND hWnd){
    HFONT hFont = SendMessage(hWnd, WM_GETFONT, , );
    LOGFONT logFont;
    GetObject(hFont, sizeof(LOGFONT), &logFont);
    return abs(logFont.lfHeight);
}
4. 响应WM_NCPAINT绘制边框
VOID DrawFrame(HWND hWnd){
    RECT rect;
    GetWindowRect(hWnd, &rect);
    OffsetRect(&rect, -rect.left, -rect.top);
    HDC hdc = GetWindowDC(hWnd);
    HPEN hPen = CreatePen(PS_SOLID, , COLORFRAME);
    SelectObject(hdc, hPen);
    SelectObject(hdc, GetStockObject(WHITE_BRUSH));
    Rectangle(hdc, , , rect.right, rect.bottom);
    DeleteObject(hPen);
    ReleaseDC(hWnd, hdc);
}
这样,有定制边框的垂直居中文本就实现了。

如果不忍看空间原生的界面,试一试,几行的代码,不复杂。
VC Edit控件单行垂直居中和定制外框的实现的更多相关文章
- vc中edit控件使用总结
		通过类向导可以生成两种类成员变量,一种是cstring类型,一种是cedit类型.在程序中使用时如果只是简单的获取 edit控件内容,或设置简单的内容建议使用cstring类型成员变量.示例:CStr ... 
- vc 在edit控件中动态插入数据滚动显示
		内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ... 
- VC++6.0/MFC中如何限制Edit控件输入   例子,只能输入0和1
		1.Insert -> New Class -> 在Base Class中选择CEdit,在Name中输入CMyEdit. 2.在左边的ClassView中,右键击CMyEdit,选择Ad ... 
- C++ 一个程序获取另一个程序Edit控件的内容
		//一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ... 
- 增加duilib edit控件的提示功能和多种文字颜色
		转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ... 
- emWin(ucGui) Edit控件数值模式 ——符号编辑 worldsing
		emWin(ucGui) Edit控件数值模式出现负数值编辑时,如果键盘按键全可以设置独立的"-","+"键,这样可以正常编辑正数和负数,但是要没有设置这两个键 ... 
- emWin(ucGui)的Edit控件退格处理方法 worldsing
		在enWin(ucGui)中EDIT控件在数值模式(十进制/十六进制/二进制/浮点数)下编辑是,无法使用BackSpace键进行退格,主要涉及到的函数有: EDIT_SetBinMode() EDIT ... 
- delphi Components[i]清除所有edit控件中的内容
		(* 一般的清空combobox方法 combobox1.clear; ... combobox9.clear; *) procedure TForm1.Button1Click(Sender: ... 
- Windows获取其他进程中Edit控件的内容
		最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下. 刚开始拿到这个问题,很自然的就想到GetDlgItemText() ... 
随机推荐
- Django Tastypie: 贴士,技巧和故障排除
			为Resource加入字段 1.为字段实现专门的dehydrate函数 2.实现(resource级别的)dehydrate方法 3.额外的方法 排除故障 通过外键,外键的反向关系来映射一个对象的属性 ... 
- python的一些基本概念
			1.为什么python被称为胶水语言?他是新一代的系统脚本参考博客:https://www.cnblogs.com/ningskyer/articles/5264172.html 2.python百度 ... 
- 【python】md5加密方法相关使用
			md5方法在hashlib库中,使用前需要先导入.它的主要方法为update,copy,以及转换为二进制,十六进制. 用法说明: Help on HASH object: class HASH(bui ... 
- cdh  zookeeper 不断拒绝连接
			测试hiveserver2高可用的时候,需要登录zookeeper检查hiveserver2是否在zookeeper中注册 执行 zookeeper-client 不断的拒绝连接 -- ::, [my ... 
- 数据表为null的字段添加默认值
			UPDATE im_clusters SET `location`='深圳会展中心' WHERE `location` is NULL 
- 论文阅读笔记四十六:Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019)
			论文原址:https://arxiv.org/abs/1903.00621 摘要 本文提出了基于无anchor机制的特征选择模块,是一个简单高效的单阶段组件,其可以结合特征金字塔嵌入到单阶段检测器中. ... 
- Go Socket实现简单的HttpServer
			在上篇博客中写到如何用Python实现一个类似tomcat的简单服务器,接下来用go语言去实现 1. Go本身自己封装实现了非常简单的httpServer package main import ( ... 
- 加载Assetbundle需要注意的地方
			WWW:异步实现,手机上不能用于同步代码,需要监测其完成状态.不用www.dispose. CreateFromFile:阻塞,但是移动平台上面的路径格式有点坑,没时间看,不用. 以下两个方式需要先使 ... 
- 你好!酷痞 Coolpy
			欢迎你进入酷痞的物联网世界.这里有着自由的空气和自然的气息.接下来我将告诉你如果一步步建立一个自己专属的物联网平台. 由于目前的酷痞的官方域名还没有通过备案所以现在用临时域名解说本说明. 最终酷痞的官 ... 
- iOS之UIApplicatio、AppDelegate
			UIApplication,代表的是整个应用做的事,因此每个程序只能有一个,系统使用的是单例模式,就是[UIApplication sharedApplication]来得到一个实例. 这个单例实例是 ... 
