IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC]Screensaver:afficher bitmap des ressources dans preview


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut [MFC]Screensaver:afficher bitmap des ressources dans preview
    Bonjour,

    Je suis en train de programmer un screensaver et j'aimerais afficher un bitmap stocké dans les ressources à l'intérieur de la petite fenêtre de preview (vous savez, le petit écran sur l'onglet "écran de veille" des propriétés d'affichage).
    Pour mémoire, lors de l'affichage de cet onglet, le .SCR est lancé avec une ligne de commande du genre "/P:123456", où "123456" est le handle (HWND) de la fenêtre de preview.

    Ca ne doit pas être bien compliqué, mais je n'arrive pas à afficher mon bitmap dans la fenêtre correspondant à ce HWND.

    Quelqu'un peut m'aider ?

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void LaunchSSRPreview()
    {
    	CWnd* pParent = CWnd::FromHandle((HWND)atol(__argv[2]));
    	ASSERT(pParent != NULL);
    	CSSaverWndGL* saver_window = new CSSaverWndGL();
    	CRect rect;
    	pParent->GetClientRect(&rect);
    	saver_window->Init(NULL, WS_VISIBLE|WS_CHILD, rect, pParent, NULL);
    	m_pMainWnd = saver_window;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    bool CSSaverWndGL::Init(DWORD dwExStyle, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
    {
    	LPCTSTR lpszClassName= AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(AfxGetResourceHandle(), MAKEINTRESOURCE(IDC_NULLCURSOR)));
     
    	SCREEN_SIZE_W=rect.right - rect.left;
    	SCREEN_SIZE_H=rect.bottom - rect.top;
    ...
    	bool create=CreateEx(dwExStyle, lpszClassName, _T(""), dwStyle, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, pParentWnd->GetSafeHwnd(), NULL, NULL );
    ...
    	return create;
    }
    Bon voila un exemple de code sachant que CSSaverWndGL est déclaré comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class CSSaverWndGL : public CWnd
    L'exemple complet sur lequel je me suis appuyé est http://www.codeguru.com/Cpp/G-M/open...cle.php/c2695/
    Il est bien réalisé. C'est en OpenGL mais le principe est le même.

    Je pense qu'avec cela tu n'auras plus aucun problème

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut
    Merci, Ti-R.
    Je vais regarder ça de plus près, ainsi que l'article dont tu as donné l'adresse, et je mettrai le tag [Résolu] si ça convient...

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Par défaut
    OK, voici un code qui à l'air de fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    		CWnd hWindow;  // Window de preview
    		CDC MemDC;  // Contexte en mémoire
    		CDC *pDC;  // Contexte "réel" de la window
    		CBitmap Bitmap;  // Bitmap à afficher
    		BITMAP InfosBmp; // Structure d'informations sur le bitmap
    		CRect rect;  // Rectangle correspondant à la window
     
    	    CWnd* pParent = CWnd::FromHandle((HWND)atol(__argv[2])); // Très malin pour récupérer la window en partant de la ligne de commande. Merci, Ti-R !
    		pParent->GetWindowRect(rect);
     
    		Bitmap.LoadBitmap(IDB_BITMAP1); // lecture bitmap dans les ressources
    		Bitmap.GetBitmap(&InfosBmp);
     
    		pDC=pParent->GetDC(); // Récup' du DC de la window de preview
    		MemDC.CreateCompatibleDC(pDC);// creation d'un DC en memoire
    		MemDC.SelectObject(&Bitmap); // selection du bitmap dans le DC en memoire
     
    		pParent->SetRedraw(TRUE); // Indique que la fenêtre doit se re-dessiner après mise à jour
    		// transfert final du bitmap dans le dc de la view, avec redimensionnement
    		pDC->StretchBlt( 0,0,rect.Width(), rect.Height(),
    						 &MemDC,
    						 0,0,InfosBmp.bmWidth , InfosBmp.bmHeight,
    						 SRCCOPY);
     
    		Bitmap.DeleteObject();
    		MemDC.DeleteDC();
    		pParent->ReleaseDC(pDC);
    Ca fonctionne (le bitmap s'affiche au bon endroit et aux bonnes dimensions), mais ce n'est peut-être pas la façon la plus "propre" de faire... Et si une autre fenêtre vient s'afficher par-dessus la preview, elle efface le bitmap.
    Mais bon, ça me convient pour l'instant; je considère le post comme "Résolu".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher/masquer des lignes dans un tableau hiérarchique
    Par linou dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/06/2009, 11h58
  2. Réponses: 1
    Dernier message: 17/03/2009, 17h00
  3. [Resource] Lecture des ressources dans une classe
    Par Mister Nono dans le forum Struts 1
    Réponses: 3
    Dernier message: 09/03/2007, 10h59
  4. rassembler des ressources dans ub fichier xml/html
    Par cbonnard dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 09/01/2006, 17h18
  5. Ajouter des ressources dans un executable.
    Par seeme dans le forum C++
    Réponses: 4
    Dernier message: 20/10/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo