【问题标题】:Edit control border and WM_CTLCOLOREDIT?编辑控件边框和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;

【问题讨论】:

    标签: c++ winapi user-interface


    【解决方案1】:

    好的,开始工作了。 上面代码的问题是当 WM_CTLCOLOREDIT 返回时,系统用返回的画笔绘制编辑控件,所以任何绘制都被清除了。 因此,不要返回使用 CreateBrushIndirect 创建的画笔,而是返回 NULL 画笔,方法是从 GetStockObject(NULL_BRUSH) 获取它。

    Rectangle 函数绘制一个矩形。矩形使用当前笔勾勒出轮廓,并使用当前画笔填充。 这样就行了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多