我从CStatic继承了一个并且有了frame的样子,我现在想在他的内侧沿着框画一个高亮的矩形框
其实就是一个选中时 让他显得突出点
我在OnEraseBkgnd 和 CtlColor 加入下面代码 都不行
COLORREF hilightcolor = RGB(255,255,0);
CRect rect ;
GetClientRect(&rect);
pDC->Draw3dRect(rect, hilightcolor, hilightcolor);
int dx = -GetSystemMetrics(SM_CXBORDER);
int dy = -GetSystemMetrics(SM_CYBORDER);
rect.InflateRect(dx,dy);
pDC->Draw3dRect(rect, hilightcolor, hilightcolor);
请高人指点

解决方案 »

  1.   

    首先恭喜shunruo有一颗心了另外,我用的是 vc6.0 于是我用了WM_CTLCOLOR代替  ,代码如下
    HBRUSH CVideoShow::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CStatic::OnCtlColor(pDC, pWnd, nCtlColor);

    COLORREF hilightcolor = RGB(255,255,0);
    CRect rect ;
    GetClientRect(&rect);
    pDC->Draw3dRect(rect, hilightcolor, hilightcolor);
    int dx = -GetSystemMetrics(SM_CXBORDER);
    int dy = -GetSystemMetrics(SM_CYBORDER);
    rect.InflateRect(dx,dy);
    pDC->Draw3dRect(rect, hilightcolor, hilightcolor);
    return hbr;
    }
    还是不行
      

  2.   

    添加 ON_WM_CTLCOLOR_REFLECT()
    在向导中有前面有=号的消息
      

  3.   

    covsno 
    这个消息已经试过了  不行  。有谁坐过这种效果的
      

  4.   


    m_Colour = RGB(255,255,0); //初始化一个颜色值
    CDC* dc = GetDC();
    CRect rect;
    GetClientRect(rect);//获取客户区的大小
    rect.InflateRect(1,1,1,1);//将客户区域增大一个像素
    CBrush brush (m_Colour);//创建画刷
    dc->FrameRect(rect,&brush);//绘制边框
      

  5.   


    void CStaticEx::OnPaint() 
    {
    CPaintDC dc(this);
    CRect rt;
    CBrush brush(RGB(255, 0, 0));
    GetWindowRect(&rt);
    ScreenToClient(&rt);
    dc.FrameRect(&rt,&brush);
    }
      

  6.   

    draw3drect 画一次就可以了
    选的颜色不对,试试用::GetSysColor(COLOR_BTNHILIGHT),::GetSysColor(COLOR_BTNSHADOW)
    因为想画出突出效果,即让受光面与其背面有颜色差,其实是选色的问题,这个颜色微软已经给选好了
      

  7.   

    谢谢各位,现在我把鼠标移到static上面就可以画出来了  现在问题是 怎么知道鼠标移出static呢 还有怎么搽掉高亮框呢