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控件单行垂直居中和定制外框的实现的更多相关文章

  1. vc中edit控件使用总结

    通过类向导可以生成两种类成员变量,一种是cstring类型,一种是cedit类型.在程序中使用时如果只是简单的获取 edit控件内容,或设置简单的内容建议使用cstring类型成员变量.示例:CStr ...

  2. vc 在edit控件中动态插入数据滚动显示

    内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ...

  3. VC++6.0/MFC中如何限制Edit控件输入 例子,只能输入0和1

    1.Insert -> New Class -> 在Base Class中选择CEdit,在Name中输入CMyEdit. 2.在左边的ClassView中,右键击CMyEdit,选择Ad ...

  4. C++ 一个程序获取另一个程序Edit控件的内容

    //一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd=::FindWindow(NULL,"zhang001"); if( ...

  5. 增加duilib edit控件的提示功能和多种文字颜色

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41786407 duilib的CEditUI控件内部使用了win32的原生 ...

  6. emWin(ucGui) Edit控件数值模式 ——符号编辑 worldsing

    emWin(ucGui) Edit控件数值模式出现负数值编辑时,如果键盘按键全可以设置独立的"-","+"键,这样可以正常编辑正数和负数,但是要没有设置这两个键 ...

  7. emWin(ucGui)的Edit控件退格处理方法 worldsing

    在enWin(ucGui)中EDIT控件在数值模式(十进制/十六进制/二进制/浮点数)下编辑是,无法使用BackSpace键进行退格,主要涉及到的函数有: EDIT_SetBinMode() EDIT ...

  8. delphi Components[i]清除所有edit控件中的内容

    (* 一般的清空combobox方法 combobox1.clear; ... combobox9.clear; *)   procedure TForm1.Button1Click(Sender: ...

  9. Windows获取其他进程中Edit控件的内容

    最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下. 刚开始拿到这个问题,很自然的就想到GetDlgItemText() ...

随机推荐

  1. 分享超好用的截动图工具ScreenToGif

    安装很简单,首先看看本地是否安装了.Net Framework 4.6.1,没有就在微软官网搜一下,选[离线安装包]版本 下载安装后,直接安装ScreenToGif即可使用(有绿色版,免安装) htt ...

  2. C#基础之Assembly

    一直以来,我们都在用C#编写程序,编写程序的时候,我们用到继承.多态.接口以及泛型,我们也都明白子类可以继承抽象类,并能够重写父类的抽象方法,可是大家是否想过,如下几个问题: 1.凡树必有根和叶,类的 ...

  3. 【原创】运维基础之keepalived

    keepalived 2.0.12 官方:http://www.keepalived.org/ 一 简介 Keepalived is a routing software written in C. ...

  4. iOS URL Cache文章推荐 (待完成)

    推荐链接是:http://www.cnblogs.com/Mike-zh/archive/2016/02/24/5210169.html http://blog.csdn.net/y550918116 ...

  5. thymeleaf的onclick标签传参异常

    转自https://my.oschina.net/u/2312080/blog/2878183 异常 严重: Servlet.service() for servlet [DispatcherServ ...

  6. 原生js实现无缝轮播

    原生js实现无缝轮播 因为要做到无缝,所以就要把第一张图片和最后一张连接起来,在此处采用js克隆了第一张图片的节点,添加到最后,显示图片序号的小圆按钮也是使用js动态添加的. html部分 <d ...

  7. verilog 仿真时读取txt文件

    :]data; initial begin # clk =; clk = ~clk; end initial begin # rst=; # rst=; end :]data_sin[:]; //// ...

  8. Number Sequence(周期是336!!不是48!!)

    1005 Number Sequence 时间限制: 1 Sec  内存限制: 60 MB 题目描述 A number sequence is defined as follows: f(1) = 1 ...

  9. selenium+python-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时...那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线程 ...

  10. spring Boot异步操作报错误: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.self.spring.springboot.Jeep' available

    我也是最近开始学习Spring Boot,在执行异步操作的时候总是汇报如下的错误: Exception in thread "main" org.springframework.b ...