copy a wxDC to wxScrolledWindow

Piotr Starczewski pstarczewski at o2.pl
Wed Dec 6 05:28:11 PST 2006


Have you looked at this sample?



Miguel Cartagena wrote:
> Nothing??
> Any idea??
>
> Regards,
>
> Miguel
>
>
> On 5 dez, 14:21, "Miguel Cartagena" <miguel.cartag... at gmail.com> wrote:
>   =

>> Sorry, I didn't has time t explain before, so ...
>>
>> The source DC comes from another module of my application, where it's
>> drawn. In my module, I have to show this DC on screen (using a
>> wxScrolledWindow for that).
>>
>> Now I'm do this in this way:
>>  1 - I'm receive a pointer to the source DC and store a static pointer
>> of a wxBitmap.
>>
>>         wxBitmap* DocToCanvasMapper::BitmapInstance(wxDC &dc){
>>         static wxBitmap *bmp =3D 0;
>>         if (!bmp) {
>>           int w, h;
>>           dc.GetSize(&w, &h);
>>           bmp =3D new wxBitmap(w, h);
>>           wxMemoryDC *memDC =3D new wxMemoryDC();
>>           memDC->SelectObject(*bmp);
>>           wxCoord zero =3D 0;
>>           wxCoord ww =3D w;
>>           wxCoord hh =3D h;
>>
>>           memDC->Blit(zero, zero, ww, hh, dcc, zero, zero);
>>           dc.DrawBitmap(*bmp, zero, zero, true);
>>           bmp->SaveFile(_T("/home/miguel/Desktop/test.bmp"),
>> wxBITMAP_TYPE_BMP);
>>           memDC->SelectObject(wxNullBitmap);
>>           delete memDC;
>>         }
>>         return bmp;
>>
>> } 2 - Rewrinting the wxScrolledWindow::OnDraw() method, I call the bmp
>> pointer and draw on a dc.
>>   void MyScrolledWindow::Draw(wxDC& dc){
>>     wxImage img =3D
>> DocToCanvasMapper::BitmapInstance()->ConvertToImage();
>>     img.Rescale(630, 891);
>>     wxBitmap bmpRescaled(img);
>>     dc.DrawBitmap(bmpRescaled, 0, 0, true);
>>   }
>>
>> To test, I'm using another wxScrolledWindow (SWTest), drawing on it
>> rewriting the OnDraw method, putting the SW on a frame and show it. To
>> send the SWTest DC to my module I do this:
>> wxDC* SWTest::GetDC(){
>>   return new wxClientDC(this);
>>
>> }Well ... the problem that I have is: When the wxBitmap is generated the
>> image that is build is like a print screen, cutting the area where the
>> SWTest is.
>>
>> On 4 dez, 16:41, "Miguel Cartagena" <miguel.cartag... at gmail.com> wrote:
>>
>>     =

>>> The source DC come from another module and is drawn manually. Something
>>> like this:
>>>       =

>>> void BuildDC(){
>>>   wxClientDC dc(this);
>>>   dc.DrawText(_T("TEST"), 10, 10);
>>>   ...
>>>       =

>>> }On Dec 4, 10:55 am, pstarczew... at o2.pl (Piotr Starczewski) wrote:
>>>       =

>>>> 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 a=
re
>>>> 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 th=
is
>>>> 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 wind=
ow
>>>> 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 =3D new wxMemoryDC();
>>>>>   memDC->SelectObject(bmp);
>>>>>   bmp.SaveFile(_T("c:\\test1.bmp"), wxBITMAP_TYPE_BMP);    // just for
>>>>> test
>>>>>   wxCoord zero =3D 0;
>>>>>   wxCoord ww =3D w;
>>>>>   wxCoord hh =3D 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 =3D 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-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
>
>
>
>   =

-------------- next part --------------
A non-text attachment was scrubbed...
Name: dc_to_scrolledwindow.7z
Type: application/octet-stream
Size: 2441 bytes
Desc: not available
Url : http://lists.wxwidgets.org/pipermail/wx-users/attachments/20061206/5a=
a175d3/dc_to_scrolledwindow.obj


More information about the wx-users mailing list