3 pièce(s) jointe(s)
[wxWidgets-3.1.1] [Code::Blocks 17.12] Utilisation de la fonction DC->Blit()
Bonjour,
J'ai suivi les vidéos https://www.youtube.com/watch?v=42jJDAfFVfI&t=346s
Cet exercice permet de mettre en oeuvre les wxWidgets suivants : -wxFrame -wxMenuBar -wxDialog -wxButton -wxFileDialog -wxClientDC -wxMemoryDC -wxPanel -wxMenu -wxToolBar -wxBitmap -wxTheClipboard.
J'ai refait tout le code en partant de zéro, mais j'ai un petit problème avec la fonction DC->Blit() et ses paramètres :roll:
Voici le résultat que j'obtiens :
Pièce jointe 363088
La copie ne donne que le cadre du wxPanel qui est tout noir :(
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| void MonPanelFrame::OnCopyClick(wxCommandEvent& event)
{
wxBitmap mon_bitmap_tmp(Panel1->GetSize(),wxBITMAP_SCREEN_DEPTH);
mon_wxmemorydc->SelectObject(mon_bitmap_tmp);
mon_wxmemorydc->Blit(wxPoint(0,0),Panel1->GetSize(),mon_wxclientdc,wxPoint(-1,-1),wxCOPY, true, wxDefaultPosition);
if (wxTheClipboard->Open())
{
wxTheClipboard->SetData(new wxBitmapDataObject(mon_bitmap_tmp));
wxTheClipboard->Close();
}
} |
Dans les liens de la vidéo en question, on trouve le source du projet et un exécutable.
J'ai téléchargé le source puis je l'ai adapté à ma version, et cela donne le même résultat :roll:
Pièce jointe 363103
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| void My_ImageFrame::OnCopyClick(wxCommandEvent& event)
{
wxBitmap my_bitmap_tmp(Panel1->GetSize(),wxBITMAP_SCREEN_DEPTH);
my_wxmemorydc->SelectObject(my_bitmap_tmp);
my_wxmemorydc->Blit(wxPoint(0,0), Panel1->GetSize(), my_wxclientdc, wxPoint(-1,-1), wxCOPY, true, wxDefaultPosition);
if (wxTheClipboard->Open())
{
wxTheClipboard->SetData(new wxBitmapDataObject(my_bitmap_tmp));
wxTheClipboard->Close();
}
} |
Puis j'ai téléchargé l'exécutable qui lui fonctionne comme dans la vidéo :ptdr:
Pièce jointe 363100
Je cherche donc des précisions sur les 3 derniers paramètres de la fonction Blit()
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| bool wxDC::Blit ( wxCoord xdest,
wxCoord ydest,
wxCoord width,
wxCoord height,
wxDC * source,
wxCoord xsrc,
wxCoord ysrc,
wxRasterOperationMode logicalFunc = wxCOPY,
bool useMask = false,
wxCoord xsrcMask = wxDefaultCoord,
wxCoord ysrcMask = wxDefaultCoord
) |
Certains pourrons me répondre que je devrais poser ma question dans les commentaires de la vidéo, mais j'ai qq difficultés à poser une question compréhensible en grand-breton :oops:
Ensuite, j'aurai une autre question, pour une second problème qui ne marche pas dans aucuns des 3 cas ci-dessus (donc aussi avec l'exécutable fourni), mais ce n'est peut être pas le sujet de l'exercice.
Le wxPanel, n'est pas sauvegardé, donc si une autre fenêtre vient le recouvrir, quand la fenêtre revient en premier plan, le wxPanel est blanc :oops: