Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Bitmap in Statusbar anzeigen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
03.01.2005, 13:37 Uhr
mike
Pinguinhüpfer
(Operator)


Welcher Fehler kommt? Ist IDB_BITMAP eine gültige Ressourcedatei?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
03.01.2005, 14:03 Uhr
~Sandra
Gast


Das Bitmap kennt er. Steht auch in der Resource.

Wenn ich das letze gepostete Compiliere kommt folgender Fehler:


C++:
error C2275: "HBITMAP" : Ungültige Verwendung dieses Typs als  Ausdruck



In der MSDN steht der Befehl so:


C++:
static CBitmap* PASCAL FromHandle( HBITMAP hBitmap );



Wenn ich dann folgendes Versuche:

C++:
hBmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP));
CBitmap* pBitmap = PASCAL FromHandle( HBITMAP hBmp );

´

Also das PASCAL noch dazu schreibe....
Dann bekomm ich den Fehler:

C++:
: error C2059: Syntaxfehler : '__stdcall'

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
03.01.2005, 21:20 Uhr
mike
Pinguinhüpfer
(Operator)


Wenn dus gleich wie in dem MSDN howto gemacht hast und es geht nicht weiß ich auhc nicht mehr weiter - sorry
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
04.01.2005, 08:47 Uhr
~Sandra
Gast


Schade. Trotzdem Danke für deine Mühe.

Hat vielleicht sonst noch jemand ne Idee wie ich einen Pointer auf ein Bitmap bekomme?

Gruß
Sandra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
04.01.2005, 13:15 Uhr
Th



Hi Sandra,

du mußt das HBITMAP in deinem Aufruf weglassen, also

C++:
CBitmap* pBitmap = FromHandle(hBmp);/* pointer to current CBitmap */;



In einer Deklaration muß der Typ angegeben werden, beim Aufruf muß die Variable von diesem Typ sein, oder aber in diesen Typ gecastet werden können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
04.01.2005, 16:26 Uhr
~Sandra
Gast


Da hast du wohl sowas von recht................aber
Ich mags ja schon gar nicht mehr sagen.......aber
es geht immer noch nicht.

Also wenn ich das so compiliere wie von dir beschrieben kommt folgender Fehler:


C++:
error C2664: 'FromHandle' : Konvertierung des Parameters 1 von 'struct HBITMAP__ *' in 'struct HWND__ *' nicht moeglich


komisch wo doch in der MSDN steht das er eine Handel von einem Bitmap haben will und nicht von einem Fenster.

Wenn ich dieses PASCAL davor schreibe kommt wieder:

C++:
CBitmap* pBitmap = PASCAL FromHandle(hBmp);



C++:
: error C2059: Syntaxfehler : '__stdcall'



Ich werd hier noch Oval....... Und nun? Ich weiß schon lange nicht mehr weiter

Gruß
Sandra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
04.01.2005, 16:58 Uhr
Th



Hi,

da die Methode "static" ist, mußt du noch den Klassennamen davorschreiben, also

C++:
CBitmap* pBitmap = CBitmap::FromHandle(hBmp);/* pointer to current CBitmap */;



sorry, hatte ich übersehen: ich dachte, es wäre eine globale Funktion.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
05.01.2005, 08:12 Uhr
~Sandra
Gast


Guten morgen.
@Th:Kein Problem.Anscheinend ist das eh nicht der entscheidende Fehler.
Das nimmt er zwar aber jetzt schmiert das Programm ab. Ich poste mal den ganzen Code. Wenn das so nicht klappt kann ich dir das Programm auch mal zuschicken. Kann doch nicht sein das ich an sonem Bitmap scheitere.
Die Quelle ist:
http://support.microsoft.com/kb/q149407/

Folgende Dateien habe ich einer nackten SDI-Anwendung mit FromView als Basisklasse hinzugefügt:

C++:
// MyStatusBar.cpp: Implementierung der Klasse CMyStatusBar.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "stdafx.h"
#include "MyStatusBar.h"
#include "Resource.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CMyStatusBar::CMyStatusBar()
{

}

CMyStatusBar::~CMyStatusBar()
{

}


  #if _MFC_VER < 0x400
/*  void CMyStatusBar::DoPaint(CDC* pDC)
   {
       CRect rect;
       GetItemRect(1, &rect);  // get pane rect
       pDC->ExcludeClipRect(&rect);  // exclude pane rect from paint
       CStatusBar::DoPaint(pDC);  // paint remainder of status bar

       CRgn paneRgn;
       paneRgn.CreateRectRgnIndirect(rect);
       pDC->SelectClipRgn(&paneRgn); // set clip region to pane rect

       CBitmap* pBitmap = // pointer to current CBitmap ;
       CDC srcDC; // select current bitmap into a compatible CDC
       srcDC.CreateCompatibleDC(NULL);
       CBitmap* pOldBitmap = srcDC.SelectObject(pBitmap);
       pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
                 &srcDC, 0, 0, SRCCOPY); // BitBlt to pane rect
       srcDC.SelectObject(pOldBitmap);
   }*/

   #endif

   #if _MFC_VER >= 0x400
   void CMyStatusBar::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
   {
       switch(lpDrawItemStruct->itemID)
       {
       case 1:
           // Attach to a CDC object
           CDC dc;
           dc.Attach(lpDrawItemStruct->hDC);

           // Get the pane rectangle and calculate text coordinates
           CRect rect(&lpDrawItemStruct->rcItem);

           hBmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));


           CBitmap* pBitmap = CBitmap::FromHandle(hBmp);/* pointer to current CBitmap */
           CDC srcDC; // select current bitmap into a compatible CDC
           srcDC.CreateCompatibleDC(NULL);
           CBitmap* pOldBitmap = srcDC.SelectObject(pBitmap);
           dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
                     &srcDC, 0, 0, SRCCOPY); // BitBlt to pane rect
           srcDC.SelectObject(pOldBitmap);

           // Detach from the CDC object, otherwise the hDC will be
           // destroyed when the CDC object goes out of scope
           dc.Detach();

           return;
       }

       CStatusBar::DrawItem(lpDrawItemStruct);
   }
   #endif





C++:
// MyStatusBar.h: Schnittstelle für die Klasse CMyStatusBar.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYSTATUSBAR_H__9B1944A2_0EC7_4E0A_ACF4_500F69443152__INCLUDED_)
#define AFX_MYSTATUSBAR_H__9B1944A2_0EC7_4E0A_ACF4_500F69443152__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CMyStatusBar : public CStatusBar  
{
public:
    CMyStatusBar();
    virtual ~CMyStatusBar();

    HBITMAP hBmp;
      #if _MFC_VER < 0x400
      //virtual void DoPaint(CDC* pDC);
   #endif

   #if _MFC_VER >= 0x400
       virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
   #endif


};

#endif // !defined(AFX_MYSTATUSBAR_H__9B1944A2_0EC7_4E0A_ACF4_500F69443152__INCLUDED_)



Ich habe dann der Resource ein Bitmap zugefügt und der Statusbar einen Pane.

Die OnCreate Funktion im Main sieht so aus:



C++:
static UINT indicators[] =
{
    ID_SEPARATOR,           // Statusleistenanzeige
    ID_INDICATOR_BITMAP,
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame Konstruktion/Zerstörung

CMainFrame::CMainFrame()
{
    // ZU ERLEDIGEN: Hier Code zur Member-Initialisierung einfügen
    
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Statusleiste konnte nicht erstellt werden\n");
        return -1;      // Fehler bei Erstellung
    }


    // Add the following code
   #if _MFC_VER >= 0x400
       UINT nID, nStyle;
   int cxWidth;

   m_wndStatusBar.GetPaneInfo(0, nID, nStyle, cxWidth);
   m_wndStatusBar.SetPaneInfo(0, nID, nStyle | SBT_OWNERDRAW,
   cxWidth);
   #endif
    



    return 0;
}



Das wars schon. Vielleicht könnt ihr mir ja helfen wo der Fehler liegt. Wie gesagt zuschicken wär auch kein Thema. Danke schonmal für eure Mühe.

Gruß
Sandra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
05.01.2005, 10:10 Uhr
xXx
Devil


Bei dem 2. Source hast de

C++:
HBITMAP hBmp;
      #if _MFC_VER < 0x400
      //virtual void DoPaint(CDC* pDC);
   #endif

   #if _MFC_VER >= 0x400
       virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
   #endif


stehen, nach MSDN muss da aber

C++:
HBITMAP hBmp;
#if _MFC_VER < 0x400
   virtual void DoPaint(CDC* pDC);
#endif

#if _MFC_VER >= 0x400
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
#endif


hin, oder hab ich mich vertan?

Jetzt weiß ich warum du das gemacht hast, du hast die OnPaint Funktion ja garnicht in deinem Source, liegt das daran?

Dieser Post wurde am 05.01.2005 um 10:13 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
05.01.2005, 12:34 Uhr
~Sandra
Gast


Hi ich hab die Funktion:

C++:
virtual void DoPaint(CDC* pDC);



komplett rausgenommen weil in dem stand:

C++:
You can add the sample code to an application built with an earlier version of Visual C++ (a version previous to 4.0), and then recompile the application using Visual C++ 4.0 without modifying the code. If you are using Visual C++ 4.0 or later, you need not add code between the    #if _MFC_VER < 0x400
   ...
   #endif
                
directives.


Ich benutze VS6.0

Hab das aber auch schon mit der Funktion versucht. Das ist das gleiche passiert. Das Programm ist abgeschmiert und beim Debuggen bleibt der irgendwo beim Assembler-Code stehen.

Gruß
Sandra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: