编辑控件边框和WM_CTLCOLOREDIT?
Posted
技术标签:
【中文标题】编辑控件边框和WM_CTLCOLOREDIT?【英文标题】:Edit control border and WM_CTLCOLOREDIT? 【发布时间】:2012-11-27 07:13:26 【问题描述】:我尝试执行以下操作,但没有显示框架/边框。我尝试了 FrameRect 和 Rectangle。 任何想法,为什么这不起作用?
case WM_CTLCOLOREDIT:
HDC hdC = (HDC)wParam;
SetTextColor( hdC, RGB(112,112,112) );
SetBkMode( hdC, TRANSPARENT );
RECT rect;
GetClientRect( (HWND)lParam, &rect );
HBRUSH hBrush = CreateSolidBrush( RGB(209,209,209) );
//FrameRect( hdC, &rect, hBrush );
Rectangle( hdC, (int)rect.left, (int)rect.top, (int)rect.right, (int)rect.bottom );
DeleteObject( hBrush );
LOGBRUSH lb;
lb.lbStyle = BS_SOLID;
lb.lbColor = RGB(249,249,249);
lb.lbHatch = 0;
return (LRESULT)CreateBrushIndirect(&lb);
break;
【问题讨论】:
【参考方案1】:好的,开始工作了。 上面代码的问题是当 WM_CTLCOLOREDIT 返回时,系统用返回的画笔绘制编辑控件,所以任何绘制都被清除了。 因此,不要返回使用 CreateBrushIndirect 创建的画笔,而是返回 NULL 画笔,方法是从 GetStockObject(NULL_BRUSH) 获取它。
Rectangle 函数绘制一个矩形。矩形使用当前笔勾勒出轮廓,并使用当前画笔填充。 这样就行了。
【讨论】:
以上是关于编辑控件边框和WM_CTLCOLOREDIT?的主要内容,如果未能解决你的问题,请参考以下文章
编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)