我自绘了一个按钮,放在Dialog上,要求按钮的颜色和Dialog一样,Dialog的颜色可变,也是绘制上去的,现在我想取到Dialog背景色涂到按钮上,哪为高手能告诉我怎么取到?

解决方案 »

  1.   

    void C***Dlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    //获得设备场景
    CDC* pDC = GetDC(); //获得指定点的颜色
    COLORREF clr = pDC->GetPixel(point);..... //释放设备场景
    ReleaseDC(pDC); CDialog::OnLButtonDown(nFlags, point);
    }
      

  2.   

    我现在用的就是GetPixel,但出错的几率很高,比如窗体拖动、置顶窗体覆盖的时候都容易出错,取到的颜色有问题。
      

  3.   

    在OnPaint完成之后取出来的一定是准的
      

  4.   

    可以把父窗口的背景拷贝过来就是了
    //这段代码从一个程序中拷贝过来的,不是按钮用的,不过对按钮也有效,可能需要稍微修改
    void CTrStatic::ShowText(CDC &pDC)
    {
    CRect wndRect;
    GetWindowRect(&wndRect); CWnd* pParent=GetParent();
    pParent->ScreenToClient(&wndRect); CDC dc; 
    CBitmap bitmap; 
    CBitmap* pOldBitmap;  dc.CreateCompatibleDC(&pDC); bitmap.CreateCompatibleBitmap(&pDC,wndRect.Width(),wndRect.Height());
    pOldBitmap=dc.SelectObject(&bitmap); dc.BitBlt(0,0,wndRect.Width(),wndRect.Height(),
    pParent->GetDC(),
    wndRect.left,wndRect.top,
    SRCCOPY
    );

    CString strDrawText;
    GetWindowText(strDrawText);

    CRect textRect;
    GetClientRect(&textRect); int nOldMode=dc.SetBkMode(TRANSPARENT);
    CFont *pOldFnt = dc.SelectObject(&m_Fnt); COLORREF OldClr=dc.SetTextColor(RGB(250,250,0));
    dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER );

    textRect.OffsetRect(-1,-1);
    OldClr=dc.SetTextColor(RGB(0,0,0));
    dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER );
    dc.SetTextColor(OldClr); dc.SetBkMode(nOldMode);
    dc.SelectObject(pOldFnt); pDC.BitBlt(textRect.left,textRect.top,textRect.Width(),textRect.Height(),
    &dc,0,0,SRCCOPY); dc.DeleteDC();}如果窗体背景是变化的,那么也对该按钮Invalidate