ein kleines Bitmap über ein größeres Legen



  • ooh doch so einfach dacht schon ich muss in der registry rumkramen oder schlimmere sachen.

    jetzt nur nochrausbekommen wie ich ein externes Bitmap lade und dann kanns losgehen



  • hätte dazu nochmal ne frage bei dem programm handelt es sich um MailMonitor++

    http://www.codeproject.com/internet/MailMonitor.asp#xx1019821xx

    so hier mal die Funktion mit der dort das Bild geladen wird

    BOOL CTaskbarNotifier::SetBitmap(UINT nBitmapID, short red, short green, short blue)
    {
      BITMAP bm;
    
      m_bitmapBackground.DeleteObject();
    
      if (!m_bitmapBackground.LoadBitmap(nBitmapID))
        return FALSE;
      GetObject(m_bitmapBackground.GetSafeHandle(), sizeof(bm), &bm);
      m_nBitmapWidth = bm.bmWidth;
      m_nBitmapHeight = bm.bmHeight;
      m_rcText.SetRect(0, 0, bm.bmWidth, bm.bmHeight);
    
      if (red!=-1 && green!=-1 && blue!=-1)
      {
        // No need to delete the HRGN,  SetWindowRgn() owns it after being called
        m_hBitmapRegion = CreateRgnFromBitmap((HBITMAP)m_bitmapBackground.GetSafeHandle(), RGB(red, green, blue));
        SetWindowRgn(m_hBitmapRegion, true);
      }
    
      return TRUE;
    }
    

    könnt mir jemand erklären wie man das am besten macht.
    hab nämlich leider keinen blassen schimmer



  • mal nen weiteres Problemchen also der Pfad ist so schonmal nicht korrekt

    %ALLUSERSPROFILE%**[Anwendungsdaten]**\Microsoft\User Account Pictures\%USERNAME%.bmp

    denn Fehler hab ich dann ja noch gefunden

    %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\User Account Pictures\%USERNAME%.bmp

    dann hab ich meinen code schonmal versucht zu ergenzen

    BOOL CTaskbarNotifier::SetBitmap(UINT nBitmapID, short red, short green, short blue)
    {
      BITMAP bm;
    
      BITMAP bm2;
      HBITMAP hBmp2;
      CString PathToLogo = "%ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\User Account Pictures\%USERNAME%.bmp";
    
      hBmp2 = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), LPCTSTR(PathToLogo), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
      if (!hBmp2)
       AfxMessageBox("Anmelde Bildchen konnte nicht geladen werden");
      if (hBmp2)
       AfxMessageBox("Anmelde Bildchen konnte geladen werden");
    

    aber er sagt mir beim Programmstart das das bild nicht geladen werden könnte.
    Kann mir jemand sagen was dann am pfad falsch ist??

    Und mein zweites Problem ist weiterhin wie bekomme ich dieses kleine Logo in mein Hintergrundbild eingefügt ??? mir schwirt da in meinem Kopf irgendwas von Double Buffering oder so



  • Du musst die Variablen noch selbst ersetzen!



  • es währe ja auch zu schön um wahr zu sein gewesen wenns so einfach währe

    dann zusätzlich die frage weiss jemand wie ich das mache? 😃



  • SHGetSpecialFolderPath
    GetUserName



  • danke nochmal 😉 Das laden hab ich jetzt hinbekomen

    das sieht bei mir jetzt folgendermaßen aus

    DWORD dwSize = 20;
      CString sUser("");
      CString sPath;
      TCHAR szPath[MAX_PATH];
    
      if(!GetUserName(sUser.GetBuffer(dwSize + 1), &dwSize))
      {
    	  if(!GetUserName(sUser.GetBuffer(dwSize + 1), &dwSize))
    		  sUser.Empty();
      }
    
      if(SHGetSpecialFolderPath(NULL, szPath, CSIDL_COMMON_APPDATA, FALSE)) 
      {
    	  sPath.Format("%s\\Microsoft\\User Account Pictures\\%s.bmp", szPath, sUser);
      }
    
      hBmp2 = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), LPCTSTR(sPath), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
      if (!hBmp2)
       AfxMessageBox("Anmelde Bildchen konnte nicht geladen werden");
      if (hBmp2)
       AfxMessageBox("Anmelde Bildchen konnte geladen werden");
    

    kann man dies vielleicht noch besser schreiben?

    und nun nochmal zur zweiten frage wie bekomme ich dies Logo nun auf mein Hintergundbild?



  • Hab hier noch etwas dazu gefunden

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-125857-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-bitmap-and-start-is-20.html

    hilft mir zwar nicht wirklich weiter

    da ich folgenden teil in meinem code nicht finden tue

    CClientDC dc (this);
    CDC dcHintergrund, dcSprite, dcSpeicher;
    


  • Hab hier noch etwas dazu gefunden

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-125857-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-bitmap-and-start-is-20.html

    hilft mir zwar nicht wirklich weiter

    da ich folgenden teil in meinem code nicht finden tue

    CClientDC dc (this);
    CDC dcHintergrund, dcSprite, dcSpeicher;
    


  • nun hab ich mal ein bischen weiter gesucht und hab zumindest den Teil gefunden wo ich das bild ausgebe nun hab ich versucht dort das so einzubinden das beides wiedergeben wird

    BOOL CTaskbarNotifier::OnEraseBkgnd(CDC* pDC)
    {
      CDC memDC, dcLogo, dcSpeicher;
      CBitmap *pOldBitmap, bmpSpeicher;
    
      dcLogo.CreateCompatibleDC(pDC);
      dcLogo.SelectObject(&m_bitmapLogo);
    
     //Der Speicher hat hier die gleiche Größe wie der Hintergrund.
      bmpSpeicher.CreateComaptibleBitmap (pDC, m_nBitmapWidth, m_nBitmapHeight);
      dcSpeicher.CreateCompatibleDC (pDC);
      dcSpeicher.SelectObject (&bmpSpeicher);
    
      memDC.CreateCompatibleDC(pDC);
      pOldBitmap = memDC.SelectObject(&m_bitmapBackground);
    //  pDC->BitBlt(0, 0, m_nCurrentWidth, m_nCurrentHeight, &memDC, 0, 0, SRCCOPY);
      memDC.SelectObject(pOldBitmap);
    
      dcSpeicher.BitBlt (0, 0, m_nBitmapWidth, m_nBitmapHeight, &memDC, 0, 0, SRCCOPY);
      dcSpeicher.BitBlt (10, 10, m_nBitmapLogoWidth, m_nBitmapLogoHeight, &dcLogo, 0, 0, SRCCOPY);
    
      pDC->BitBlt(0, 0, m_nCurrentWidth, m_nCurrentHeight, &dcSpeicher, 0, 0, SRCCOPY);
    
      return TRUE;
    }
    

    nun bekomme ich aber ide fehlermeldung das folgende Zeile so nicht richtig ist

    bmpSpeicher.CreateComaptibleBitmap (pDC, m_nBitmapWidth, m_nBitmapHeight);
    

    error C2039: 'CreateComaptibleBitmap': Ist kein Element von 'CBitmap'

    die frage ist nun warum nach dem link aus meinen vorigen Post ist das doch richtig


Anmelden zum Antworten