Bonjour,

J'ai suivi les vidéos


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

Voici le résultat que j'obtiens :
Nom : CopyMon.PNG
Affichages : 563
Taille : 76,9 Ko

La copie ne donne que le cadre du wxPanel qui est tout noir

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Nom : CopySource.PNG
Affichages : 559
Taille : 56,3 Ko
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Nom : CopyExe.PNG
Affichages : 526
Taille : 59,1 Ko

Je cherche donc des précisions sur les 3 derniers paramètres de la fonction Blit()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

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