hello i am a beginner in using MFC,
i drew a hexagon in mfc using this code: ( a part of the code)
m_StartPoint.x -= int(ceil(r));//50,100
m_EndPoint.y -= int(ceil(h)); //100,99
dc.MoveTo(m_StartPoint);
dc.LineTo(m_EndPoint);
m_EndPoint.y -= int(ceil(s)); //m_Endpoint:100,49
dc.LineTo(m_EndPoint);
m_EndPoint.y -= int(ceil(h));
m_EndPoint.x -= int(ceil(r));
dc.LineTo(m_EndPoint);
m_EndPoint.y += int(ceil(h));
m_EndPoint.x -= int(ceil(r));
dc.LineTo(m_EndPoint);
m_EndPoint.y += int(ceil(s));
dc.LineTo(m_EndPoint);
m_EndPoint.y += int(ceil(h));
m_EndPoint.x += int(ceil(r));
dc.LineTo(m_EndPoint);
and it looks like the picture "hexagon.jpg"
the question is how can i fill it with color, lets say in red? or even more how can i fill it with a small picture instead of coloring it?
Any idea?
thank you
|
Contributor
|
|
| 10Nov2009,21:10 | #2 |
|
For solid color, use CDC::FloodFill(). For an image, you'll have to set a clipping region to the shape of your hexagon and bitblt the image.
|
|
Newbie Member
|
|
| 10Nov2009,22:52 | #3 |
|
Quote:
Originally Posted by Gene Poole can you tell me what should i add in this code: ---------------------------------------------------- Code:
CClientDC dc(pntWnd);
CPoint m_StartPoint = crdSouthEast;//(100,100)
CPoint m_EndPoint = crdSouthEast;
CPoint Temp;
computeHexagonQuantities(hexagonSide);//
POINT pts[6];
//Drawing
m_StartPoint.x -= int(ceil(r));
int temp=int(ceil(r));
m_EndPoint.x =m_StartPoint.x+temp;
m_EndPoint.y -= int(ceil(r));
pts[0]=m_StartPoint;
pts[1]=m_EndPoint;
m_EndPoint.x=m_StartPoint.x;
m_EndPoint.y-= int(ceil(r));
pts[2]=m_EndPoint;
m_EndPoint.x-=int(ceil(s));
pts[3]=m_EndPoint;
Temp.x=m_EndPoint.x;
m_EndPoint.x-=int(ceil(r));
m_EndPoint.y+= int(ceil(r));
pts[4]=m_EndPoint;
m_EndPoint.x = Temp.x;
m_EndPoint.y+= int(ceil(r));
pts[5]=m_EndPoint;
m_EndPoint.x =m_StartPoint.x;
m_EndPoint.y =m_StartPoint.y;
dc.Polygon(pts,6);
//PS
//i loaded a bitmap in another cpp file by doing :
CBitmap test;
test.LoadBitmapW(IDB_BITMAP7);//IDB_BITMAP2
//this "test" is passed by reference in the class containing the above code...
//so how to clipper and BitBlt it?
|
|
Contributor
|
|
| 11Nov2009,00:22 | #4 |
|
This paints a bitmap defined in resources as IDB_BITMAP1 into a triangular clipping region on the screen:
Code:
CPaintDC dc(this); POINT pts[3]; CRgn rgn1; CDC memdc; CBitmap cbm; BITMAP bmp; pts[0].x=10; pts[0].y=100; pts[1].x=60; pts[1].y=20; pts[2].x=100; pts[2].y=100; //dc.Polygon(pts,3); rgn1.CreatePolygonRgn(pts,3,ALTERNATE); dc.SelectClipRgn(&rgn1); memdc.CreateCompatibleDC(&dc); cbm.LoadBitmap(IDB_BITMAP1); cbm.GetBitmap(&bmp); CBitmap *tbmp=memdc.SelectObject(&cbm); dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&memdc,0,0,SRCCOPY); memdc.SelectObject(tbmp); |
|
Newbie Member
|
|
| 11Nov2009,12:16 | #5 |
|
Quote:
Originally Posted by Gene Poole how can i fit this bitmap in one hex, because i want to fit other bitmaps in the other hexes thank you for the help. |
|
Contributor
|
|
| 11Nov2009,21:23 | #6 |
|
Between drawing each hexagon, call SelectClipRgn(NULL) to reset the clipping region, then call it again with the new hex region.
|
|
Newbie Member
|
|
| 16Nov2009,05:20 | #7 |
|
Quote:
Originally Posted by Gene Poole if u dun mind ill show u my code tell me how exactly should i do it , and thx in advance but its just i need to fix it before wednesday and its not working... i have a class called childview.cpp it has sthg like: . . . .//code . . Code:
void CChildView::drawMap(CDC * pdc)
{
Hexagon obj;
CPoint point(600, 150);
CClientDC dc(this);
Dimensions dStep;
double hexagonSide = 40;//side of one edge
double r=((cos(30*PI/180))*hexagonSide);
int r2=int (ceil(r));
int NbOfHexes=3;
int shiftByX=hexagonSide+r2;
CBitmap test;
test.LoadBitmapW(IDB_BITMAP7);//IDB_BITMAP2
COLORREF RGB=RGB(255,0,255);//RGB object
//**** Starting hex
dStep = obj.draw(pdc, point, hexagonSide,test,RGB,RandColorsVec);
..//then changing coordinate of points then drawing again
dStep = obj.draw(pdc, point, hexagonSide,test,RGB,RandColorsVec);
//etc....
//and the method .draw is in a class called hexagons.cpp and is as follows:
Dimensions Hexagon::draw(CDC * pdc,
CPoint crdSouthEast, double hexagonSide,CBitmap& test,COLORREF RGB,vector <COLORREF> *RandColorsVec)
{
Dimensions dResult;
CPoint m_StartPoint = crdSouthEast;//(100,100)
CPoint m_EndPoint = crdSouthEast;
CPoint Temp;
computeHexagonQuantities(hexagonSide);//
POINT pts[6];//set of vertices of the hex
//Drawing
m_StartPoint.x -= int(ceil(r));
int temp=int(ceil(r));
m_EndPoint.x =m_StartPoint.x+temp;
m_EndPoint.y -= int(ceil(r));
pts[0]=m_StartPoint;
pts[1]=m_EndPoint;
m_EndPoint.x=m_StartPoint.x;
m_EndPoint.y-= int(ceil(r));
pts[2]=m_EndPoint;
m_EndPoint.x-=int(ceil(s));
pts[3]=m_EndPoint;
Temp.x=m_EndPoint.x;
m_EndPoint.x-=int(ceil(r));
m_EndPoint.y+= int(ceil(r));
//dc.LineTo(m_EndPoint);
pts[4]=m_EndPoint;
m_EndPoint.x = Temp.x;
m_EndPoint.y+= int(ceil(r));
//dc.LineTo(m_EndPoint);
pts[5]=m_EndPoint;
m_EndPoint.x =m_StartPoint.x;
m_EndPoint.y =m_StartPoint.y;
pdc->Polygon(pts,6);
dResult.height = int(ceil(b));
dResult.width = int(ceil(a));
dResult.h = int(ceil(h));
dResult.r = int(ceil(r));
return dResult;
}
//so can u add the codes for me plz? thx again
|
|
Contributor
|
|
| 16Nov2009,19:40 | #8 |
|
Sorry, I can't do much with that code. There are several classes that I have no idea what they do and I don't know how or where you are calling this function. I don't see any use of CRgn or SetClipRgn in this code snippit either.
|

