Aurigma Forums
»
Legacy Products
»
Archive
»
Other Products
»
How to work with doublebufferpaintevent in C++?
Rank: Member
Groups: Member
Joined: 1/5/2005(UTC) Posts: 20
|
I am trying to draw a rubberband selection box in C++. I took the example code you posted for the de-warping routine and converted it to C++. The problem is that the iembeddedgraphics interface doesn't provide access to the HDC, so there is no doublebuffering and it writes directly onto the bitmap, not onto the viewer. Furthermore, I can't figure out how to change pen colors/sizes, etc. Here is my code for the doublebuffer event. Clearly I need to be doing something different, as this leaves lines all over the bitmap. Note the comments in Capitals. Thanks, Ken Code:void CDeWarp::DoubleBufferPaintDewarppreviewer(long Hdc)
{
VARIANT_BOOL bLoaded;
m_piUnchangedPreview->get_IsLoaded(&bLoaded);
if(bLoaded) // there is something in the viewer
{
//Attach Graphics to the temporary DC (control's double buffer)
// HOW TO DO THIS IN C++?
//objGraphics.Hdc = Hdc
//Adjust pen and brush // HOW TO DO THIS IN C++?
//objGraphics.Pen.ForeColor = &HFFFF0000
//Scale pen weight proportionally to zoom
//objGraphics.Pen.Weight = 2
//Recalculate anchor points from bitmap coordinates to the control ones
long i;
long arrControlPointX[4], arrControlPointY[4];
for (i=0;i<4 ;i++ )
{
piPreviewBox->BitmapToControlXCoord(arrSrcPointX[i],&arrControlPointX[i]);
piPreviewBox->BitmapToControlXCoord(arrSrcPointY[i],&arrControlPointY[i]);
}
//Draw fitting quadrangle - LEAVES LINES ALL OVER THE BITMAP
m_piPreviewGraphics->DrawLine(arrControlPointX[0], arrControlPointY[0],
arrControlPointX[1], arrControlPointY[1]);
m_piPreviewGraphics->DrawLine(arrControlPointX[1], arrControlPointY[1],
arrControlPointX[2], arrControlPointY[2]);
m_piPreviewGraphics->DrawLine(arrControlPointX[2], arrControlPointY[2],
arrControlPointX[3], arrControlPointY[3]);
m_piPreviewGraphics->DrawLine(arrControlPointX[3], arrControlPointY[3],
arrControlPointX[0], arrControlPointY[0]);
//Draw anchor points
for(i=0; i<4; i++)
m_piPreviewGraphics->DrawRectangle(arrControlPointX[i] - 3, arrControlPointY[i] - 3, 7, 7, FALSE, TRUE,0);
} //end .isloaded
piPreviewBox->put_AutoUpdate(FALSE);
}
Edited by user Sunday, December 23, 2007 5:59:11 PM(UTC)
| Reason: Not specified
|
|
|
|
Rank: Advanced Member
Groups: Member, Administration Joined: 8/2/2003(UTC) Posts: 876
Thanks: 2 times Was thanked: 27 time(s) in 27 post(s)
|
1. You can create Graphics object instead of using IEmbeddedGraphics interface (which is always accosiated with a bitmap). It exposes IGraphics interface which supports get_Hdc/put_Hdc property. 2. To get access to Pen and Brush settings in C++, you need to get IPen and IBrush interface and then modify properties, something like this (error handling is omitted for brevity): Code:CComPtr<IGraphics> piGraphics;
piGraphics.CoCreateInstance(CLSID_Graphics);
CComPtr<IPen> piPen;
piGraphics->get_Pen(&piPen);
piPen->put_ForeColor(0xFFFF0000);
...
Hope this helps. Edited by user Sunday, December 23, 2007 5:59:23 PM(UTC)
| Reason: Not specified
|
|
|
|
Rank: Member
Groups: Member
Joined: 1/5/2005(UTC) Posts: 20
|
Thank you, that worked perfectly. I did not understand about the CoCreateInstance. Ken
|
|
|
|
Rank: Advanced Member
Groups: Member, Administration Joined: 8/2/2003(UTC) Posts: 876
Thanks: 2 times Was thanked: 27 time(s) in 27 post(s)
|
CoCreateInstance is a single way to create new instance of the COM object. It is an analogue to VB6 function CreateObject.
|
|
|
|
Aurigma Forums
»
Legacy Products
»
Archive
»
Other Products
»
How to work with doublebufferpaintevent in C++?
Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.