CDC Help для окраски объекта - PullRequest
       36

CDC Help для окраски объекта

0 голосов
/ 08 апреля 2011

hi В C ++ Visual Studio есть функция CDC :: ExtFloodFill (int x, int y, COLORREF crColor, UINT nFillType);

Мой вопрос заключается в том, что мы предполагаем написать вместо

int x, int y, COLORREF crColor, UINT nFillType

Например, если у меня есть объект, который я хочу раскрасить Как это сделать

enter code here
                 #include "afxwin.h"

    class fr : public CFrameWnd
             {

               public:

CPoint st;
CPoint en;

fr()
{

    Create(0,"First Frame");
}


//////////////////////
void OnLButtonDown(UINT fl,CPoint p )

{
    st.x=p.x;
    st.y=p.y;
}

//////////////////////
void OnLButtonUp(UINT fl,CPoint r)
{

    en.x=r.x;
    en.y=r.y;




    CClientDC d(this);

    d.Ellipse(st.x,st.y,en.x,en.y);

      }
      void OnRButtonDown(UINT fl,CPoint q)
      {
        CClientDC e(this);


    e.ExtFloodFill(............);
      }
    DECLARE_MESSAGE_MAP()
 };
    BEGIN_MESSAGE_MAP(fr,CFrameWnd)
ON_WM_LBUTTONDOWN()
    ON_WM_RBUTTONDOWN()
    END_MESSAGE_MAP()

   class app : public CWinApp
 {


    public:
int InitInstance()
{   

    fr*sal;
    sal=new fr;
    m_pMainWnd=sal;
    sal->ShowWindow(1);

    return true;
}

  };

  app a;

1 Ответ

0 голосов
/ 08 апреля 2011

Для вашего примера ExtFloodFill (или любая другая версия FloodFill) на самом деле не является правильным выбором.

Вместо этого вы обычно хотите установить текущую кисть на нужный вам цвет / рисунок, а затем нарисоватьваш объект (и он будет автоматически заполнен текущей кистью).Скажем, например, что вы хотите нарисовать красный эллипс:

CMyView::OnDraw(CDC *pDC) { 
    CBrush red_brush;

    red_brush.CreateSolidBrush(RGB(255, 0, 0));

    pDC->SelectObject(red_brush);
    pDC->Ellipse(0, 0, 100, 50);
}

Редактировать: Хорошо, если вы действительно настаиваете, что это должно быть наводнение, и вы 'Делая это в ответ на нажатие кнопки, вы, вероятно, сделали бы что-то вроде этого:

void CYourView::OnRButtonDown(UINT nFlags, CPoint point)
{
    CClientDC dc(this);
    CBrush blue_brush;
    blue_brush.CreateSolidBrush(RGB(0, 0, 255));
    dc.SelectObject(blue_brush);
    dc.ExtFloodFill(point.x, point.y, RGB(0, 0,0), FLOODFILLBORDER);
    CView::OnRButtonDown(nFlags, point);
}
...