copy a wxDC to wxScrolledWindow

Piotr Starczewski pstarczewski at o2.pl
Mon Dec 4 05:55:34 PST 2006


Your code looks ok (didn't test it yet). The only thing is that you 
should put memDC->SelectObject(wxNullBitmap) instead of 
memDC->DrawBitmap. By drawing your bitmap on memDC theoretically you are 
drawing currently selected bitmap on the same bitmap (I'm not sure if 
that is possible with currently drawn bitmap selected into wxMemoryDC 
and I'm not sure how it will behave). I'll test this solution later this 
evening.

You mentioned that "I have a wxDC drawn before, outside my 
application.". What do you mean by that? Are you trying to take a window 
snapshot from external application or does some external application 
"draws" on your dc?

Regards,
Peter

Miguel Cartagena wrote:
> I test this and when I call Blit method, it's draw a print screen .. my
> IDE.
> Here the code:
>
>   dc.GetSize(&w, &h);
>           // the source DC
>   wxBitmap bmp(w, h, wxBITMAP_TYPE_BMP);
>   wxMemoryDC *memDC = new wxMemoryDC();
>   memDC->SelectObject(bmp);
>   bmp.SaveFile(_T("c:\\test1.bmp"), wxBITMAP_TYPE_BMP);    // just for
> test
>   wxCoord zero = 0;
>   wxCoord ww = w;
>   wxCoord hh = h;
>
>   memDC->Blit(zero, zero, ww, hh, &dc, zero, zero);
>   bmp.SaveFile(_T("c:\\test2.bmp"), wxBITMAP_TYPE_BMP);   // just for
> test
>
>   memDC->DrawBitmap(bmp, 0, 0, false);
>
>   wxImage img = bmp.ConvertToImage();
>   img.Rescale(210, 297);
>   wxBitmap bmpRescaled(img);
>
>   bmpRescaled.SaveFile(_T("c:\\test3.bmp"), wxBITMAP_TYPE_BMP);   //
> just for test
>
>
>
>
> On Dec 4, 9:56 am, pstarczew... at o2.pl (Piotr Starczewski) wrote:
>   
>> That should not be a problem. First of all you need to get a
>> pointer/reference to your source wxDC. Then just wxDC::Blit it into
>> wxMemoryDC with selected bitmap. Final step is to rescale your bitmap
>> and draw it with wxDC::DrawBitmap(...) onto your scrolled window.
>>
>> Regards,
>> Peter
>>
>>
>>
>> Miguel Cartagena wrote:
>>     
>>> Sorry, I'll try to explain the problem better.
>>>       
>>> I have a wxDC drawn before, outside my application. So, I don't know
>>> what is drawn in it and I can't "do my drawing"  :)
>>> What I want to do is: get this DC, rescale to my ScrolledWindow size
>>> and show it into my ScrolledWindow.
>>>       
>>> For this, copy the DC it's not enough, I think. A possible solution is
>>> redraw the DC that I receive on MyScrolledWindow::OnDraw(wxDC& dc)
>>> method, or something like.
>>>       
>>> void DCReceiver::ReceiveDC(wxDC& dc){
>>>   MyScrolledWindow::Draw(dc);
>>> }
>>>       
>>> ...
>>>       
>>> void MyScrolledWindow::Draw(wxDC& dc){
>>>   dc.Redraw();  // the wxDC::Redraw() method not exists, therefore my
>>> doubt.
>>> }
>>>       
>>> void MyScrolledWindow::OnDraw(wxDC& dc){
>>>   Draw(dc);  // rewrite the wxScrolledWindow::OnDraw method ?
>>> }
>>>       
>>> Thanks and regards,
>>> Miguel
>>>       
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: wx-users-unsubscr... at lists.wxwidgets.org
>>> For additional commands, e-mail: wx-users-h... at lists.wxwidgets.org---------------------------------------------------------------------
>>>       
>> To unsubscribe, e-mail: wx-users-unsubscr... at lists.wxwidgets.org
>> For additional commands, e-mail: wx-users-h... at lists.wxwidgets.org
>>     
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: wx-users-unsubscribe at lists.wxwidgets.org
> For additional commands, e-mail: wx-users-help at lists.wxwidgets.org
>
>
>
>   




More information about the wx-users mailing list