Fragen zu Farbe und zu Bitmap



  • Hallo

    Noch mal zwei Fragen, die euch wahrscheinlich eher leicht vorkommen, aber für mich eine große Hürde darstellen:
    1.Wie kann ich die Farbe meines Hauptdialogs ändern. Ich würde gerne in der Menüleiste eine Auswahlmöglichkeit bieten, in der der Benutzer die Hintergrundfarbe des Dialogs bestimmen kann. Ich habe natürlich auch versucht zu googeln und habe auch einiges gefunden, aber s hat nicht geklappt. Ich muss mir einen Gerätekontext holen und dann mit diesem arbeiten, bei:

    CClientDC dc(this); 
    dc.SetBkColor(RGB(56,56,56));
    

    passiert nichts
    Ich stelle mir das vor, dass der Benutzer die Farbe anklickt und scih dann der Dialog in der angeklickten Farbe zeigt.

    2.Wie kann man Bitmaps in einem Dialog anzeigen? Auch hierzu habe ich natürlich versucht erst mal selber Lösungen zu finden. Aber auch da scheine ich etwas verkehrt zu machen:

    CBitmap *pMeinBild= new CBitmap; 
    pMeinBild->LoadBitmap(IDB_BITMAP1); 
    BITMAP bm; 
    CPaintDC dc(this); 
    CDC MeinDc; 
    MeinDC.CreateCompatibleDC(NULL); 
    MeinDC.SelectObject(pMeinBild); 
    pMeinBild->GetObject(sizeof(bm), &bm); 
    dc.BitBlt(10,10,bm.bmWidth,bm.bmHeight, &MeinDC,0,0,SRCCOPY);
    

    Ich bekomme keine Fehlermeldung, aber ich sehe den Bitmap auch nicht, warum?

    Danke für eure Hilfe

    chrische

    [cpp]



  • Also Hintergrundfarbe machste in deiner View ON_CTL_COLOR in der legst du ein HBRUSH Objekt an dem du dann in der OnInit die gewünschte farbe zuweist. In der On_CTL_COLOR machst du dann:

    switch (nCtlColor) 
    	{ 
    		case CTLCOLOR_STATIC:	// Für alle Statics
    			pDC->SetTextColor(RGB(0,0,0);
    			pDC->SetBkColor(255,255,255);
    		case CTLCOLOR_DLG:		// Für den Dialog
    			return (HBRUSH)m_brush;
    	} 
    	return hbr;
    

    Wenn es nur für Dialoge ist kannst du auch in deinProject.cpp in der InitInstance das hier machen

    SetDialogBkColor(RGB(0,0,0),BLACK(255,255,255));
    

    😉

    Hast du das Bitmap im Resourceneditor eingebunden??

    Wenn du Bilder nur einfach statisch anzeigen lassen willst, kannst du auch das über den Recourceeditor machn!



  • Hallo

    Es handelt sich die ganze Zeit um eine Dialogfeldbasierte Anwendung.

    Wenn ich das in der MeinProjektName.cpp versuche:

    SetDialogBkColor(RGB(34,34,34),RGB(255,255,255));
    

    dann ändert sich die Farbe nicht und das Programm meckert:

    d:\Visual Studio Projekte\hddf\hddf.cpp(56): warning C4996: 'CWinApp::SetDialogBkColor' was declared deprecated

    Hast du das Bitmap im Resourceneditor eingebunden??

    Wenn du Bilder nur einfach statisch anzeigen lassen willst, kannst du auch das über den Recourceeditor machn!

    Ich habe das Bitmap als neue Ressource deklariert und bin jetzt daran interessiert es in meinem Dialog anzuzeigen. Aber wie?

    Danke für eure Geduld.

    chrische



  • In der OnPaintn nach

    else
    
    CPaintDC dc(this);	
    
    	CBitmap bitmap;
    	bitmap.LoadBitmap(IDB_BITMAP1D);
    
    	BITMAP bm;
    	bitmap.GetObject(sizeof(bm),&bm);
    
    	CDC speicherDC;
    	speicherDC.CreateCompatibleDC(&dc);
    	speicherDC.SelectObject(&bitmap);
    
    	dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&speicherDC,0,0,SRCCOPY);
    
    	CDialog::OnPaint();
    

    Sollte klappen.



  • oder im Resourceneditor einfach das Symbol Picture auswählen auf den Dialog clicken und dort dann über rechte Maustaste Prperties das Bild einfügen.
    😉



  • Stimmt, die Methode habe ich noch nie ausprobiert, aber funktionier. 😉



  • Hallo

    Ich bekomm es einfach nicht gebacken.

    Polofreak schrieb:

    oder im Resourceneditor einfach das Symbol Picture auswählen auf den Dialog clicken und dort dann über rechte Maustaste Prperties das Bild einfügen.
    😉

    Ich habe es jetzt geschafft, dass ich ein Bitmap in meinem Dialog sehe. Wie das oben beschriebene funktioniert ist mir aber immer noch völlig unklar. Ich mache es also so:

    CBitmap *pMeinBild= new CBitmap; 
    pMeinBild->LoadBitmap(IDB_BITMAP1); 
    BITMAP bm; 
    CPaintDC dc(this); 
    CDC MeinDC; 
    MeinDC.CreateCompatibleDC(NULL); 
    MeinDC.SelectObject(pMeinBild); 
    pMeinBild->GetObject(sizeof(bm), &bm); 
    dc.BitBlt(10,10,bm.bmWidth,bm.bmHeight, &MeinDC,0,0,SRCCOPY);
    

    Wenn ich mir mit dieser Methode jedoch mehere Bitmaps anzeigen lassen will, dann klsppt das nicht und er zeigt immer nur das Erste an. Ich habe probiert den, oben beschriebenen, Quelltext in einen eigenen Funktion auszulagern, an die ich nur BitmapID und Stelle im Dialog übergebe, aber er ezigt immer nur das erste Bitmap an. Außerdem wollte ich mal fragen, wie man den this-Zeiger an eine Funktion übergeben kann, weil er da immer gemeckert hat.
    Meine Frage lautet also: Woe kann man mehrere Bitmaps anzeigen.

    Ich wollte auch noch einmal fragen, ob jemand eine Lösung für mein SetDialogBkColor Problem kennt oder hat.

    Dabke für euer Verständnis und eure Geduld.

    chrische



  • Hallo

    Ich habe das mit dem Picturecontrol jetzt doch noch hingekriegt. Beim Rest bleiben meine Schwierigkeiten jedoch bestehen.

    chrische


Log in to reply