wxScrolledWindow : dessin qui s'efface
Salut,
j'ai un petit problème avec la visualisation de ma wxScorlledWindow quand je dessine une image plus grande que ma fenêtre. Les scrollbar sont affixes mais quand j'arrive au bout de mon dessin il s'efface. Si quelqu'un pourrait m'aider ce serait génial.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
void MainFrame::OnCreate( wxCommandEvent& event )
{
wxClientDC dc( scrollWin );
scrollWin->DoPrepareDC( dc );
/*wxFontDialog font( this );
if( font.ShowModal() == wxID_OK );*/
int idx = convDataVtr.size() - 1;
int heigth = scrollWin->GetSize().GetHeight();
int width = scrollWin->GetSize().GetWidth();
int startPointW = 0, startPointH = 0;
int endPointW = 0, endPointH = 0;
wxPoint centerPoint( scrollWin->GetSize().GetWidth() / 2 , scrollWin->GetSize().GetHeight() / 2 );
//If image > srolledWindow
if( bitMapReader.bmpInfoHeader.width > ( unsigned ) scrollWin->GetSize().GetWidth() && bitMapReader.bmpInfoHeader.height > ( unsigned ) scrollWin->GetSize().GetHeight() )
{
//set scrollbars with image dimentions
scrollWin->SetScrollbars( 10, 10, bitMapReader.bmpInfoHeader.width - scrollWin->GetSize().GetWidth(), bitMapReader.bmpInfoHeader.height - scrollWin->GetSize().GetHeight() );
//Set initial points to start drawing
startPointW = 0;
startPointH = 0;
//set end points for drawing
endPointW = bitMapReader.bmpInfoHeader.width;
endPointH = bitMapReader.bmpInfoHeader.height;
}
else if( bitMapReader.bmpInfoHeader.width > ( unsigned ) scrollWin->GetSize().GetWidth() || bitMapReader.bmpInfoHeader.height > ( unsigned ) scrollWin->GetSize().GetHeight() )
{
//If image width higher
if( bitMapReader.bmpInfoHeader.width > ( unsigned ) scrollWin->GetSize().GetWidth() )
{
//set scrollbars with image width
scrollWin->SetScrollbars( 10, 0, bitMapReader.bmpInfoHeader.width, 0 );
//Set limits for drawing
startPointW = 0;
endPointW = bitMapReader.bmpInfoHeader.width;
if( bitMapReader.bmpInfoHeader.height % 2 == 0 )
startPointH = centerPoint.y - bitMapReader.bmpInfoHeader.height / 2;
else
startPointH = centerPoint.y - ( ( int ) ( bitMapReader.bmpInfoHeader.height / 2 ) + 1 );
endPointH = bitMapReader.bmpInfoHeader.height / 2;
}//If image height higher
else if( bitMapReader.bmpInfoHeader.height > ( unsigned ) scrollWin->GetSize().GetHeight() )
{
//set scrollbars with image width
scrollWin->SetScrollbars( 0, 10, 0, bitMapReader.bmpInfoHeader.height );
//Set limits for drawing
startPointH = 0;
endPointH = bitMapReader.bmpInfoHeader.height;
if( bitMapReader.bmpInfoHeader.width % 2 == 0 )
startPointW = centerPoint.x - bitMapReader.bmpInfoHeader.width / 2;
else
startPointW = centerPoint.x - ( ( int ) ( bitMapReader.bmpInfoHeader.width / 2 ) + 1 );
endPointW = centerPoint.x + bitMapReader.bmpInfoHeader.width / 2;
}
}
else //Image < scrolledWindow
{
if( bitMapReader.bmpInfoHeader.width % 2 == 0 )
startPointW = centerPoint.x - bitMapReader.bmpInfoHeader.width / 2;
else
startPointW = centerPoint.x - ( ( int ) ( bitMapReader.bmpInfoHeader.width / 2 ) + 1 );
if( bitMapReader.bmpInfoHeader.height % 2 == 0 )
startPointH = centerPoint.y - bitMapReader.bmpInfoHeader.height / 2;
else
startPointH = centerPoint.y - ( ( int ) ( bitMapReader.bmpInfoHeader.height / 2 ) + 1 );
endPointW = centerPoint.x + bitMapReader.bmpInfoHeader.width / 2;
endPointH = centerPoint.y + bitMapReader.bmpInfoHeader.height / 2;
}
wxPoint startPoint( startPointW , startPointH );
wxPoint endPoint( endPointW, endPointH );
wxPoint currentPoint( endPoint.x,startPoint.y );
for( currentPoint.y; currentPoint.y < endPoint.y; currentPoint.y++ )
{
for( currentPoint.x; currentPoint.x > startPoint.x; currentPoint.x-- )
{
if( convDataVtr.at( idx ) <= 0x0F )
dc.SetPen( wxPen( wxColour( wxT("#00000") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
else if( convDataVtr.at( idx ) <= 0xFF )
dc.SetPen( wxPen( wxColour( wxT("#0000") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
else if( convDataVtr.at( idx ) <= 0xFFF )
dc.SetPen( wxPen( wxColour( wxT("#000") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
else if( convDataVtr.at( idx ) <= 0xFFFF )
dc.SetPen( wxPen( wxColour( wxT("#00") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
else if( convDataVtr.at( idx ) <= 0xFFFFF )
dc.SetPen( wxPen( wxColour( wxT("#0") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
else
dc.SetPen( wxPen( wxColour( wxT("#") + wxString::Format( "%X", convDataVtr.at( idx ) ) ) ) );
dc.DrawPoint( currentPoint );
idx--;
}
currentPoint.x = endPoint.x;
}
} |
Merci,
RCosta.