码迷,mamicode.com
首页 > 其他好文 > 详细

CEdit 非客户区,客户区,文字区

时间:2014-08-02 15:17:33      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:color   ar   line   amp   size   window   c   text   

CEdit属性:
在MulitLine时,Edit分为三层次:NC,Client(无字区域), 文字区域(SetRect)
在SingleLine时,Edit只分为NC与Client区域,即Client区域和文字区域重合(此时SetRect无效)
GetRect,SetRect --设置文字区域,从client中再减去一块,只对多行有效? 单行时两者始终重合。ES_MULTILINE,ES_WANTRETURN!
WM_NCCALCSIZE: LPRECT rc = (LPRECT)lParam; 计算非客户区

CRect rctText;
::SendMessage(hEditDir, EM_GETRECT, 0, (LPARAM)&rctText);
rctText.OffsetRect(0, 10);
::SendMessage(hEditDir, EM_SETRECT, 0, (LPARAM)&rctText);


子类化Edit窗口后,由于Edit窗口已经创建好了,自己的EditProc是收不到WM_NCCALCSIZE时,因此可以在子类化后Move一下Edit窗口,以重新触发这个消息

CEdit绘制顺序:
WM_NCPAINT: multi line时,ncpaint会刷掉客户区,因此需要注意剪裁; single line时,想刷掉客户区都刷不掉
EraseBk -- 刷掉 CLIENT 区域(在单行模式没用,因为跟文字区域重合了,文字区域是最后绘制的)
WM_CTLCOLOR nCtlColor == CTLCOLOR_EDIT; 这里刷掉文字区域背影;(这里可以直接绘,但是返回NULL笔刷,或者不绘制但返回一个非NULL刷子)
WM_PAINT不会弄???

case WM_NCPAINT:
{
HDC hdc;
hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);
// Paint into this DC
ReleaseDC(hwnd, hdc);
}

CEdit 非客户区,客户区,文字区,布布扣,bubuko.com

CEdit 非客户区,客户区,文字区

标签:color   ar   line   amp   size   window   c   text   

原文地址:http://www.cnblogs.com/gakusei/p/3886893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!