ein kleines Bitmap über ein größeres Legen
-
Titel hab ich mal abgeändert da die erste frage ja geklärt ist
Hallo ich würde gern in einem Programm auf das Bild des Nutzerkontos Zurückgreifen es soll genau diese Bild eines Users angezigt werden das man auch bei der Anmeldung bzw. beim Startmenü sehen kann.
Wisst ihr ob und wie man an dieses Bild rankommt?
-
Datei: %ALLUSERSPROFILE%[Anwendungsdaten]\Microsoft\User Account Pictures\%USERNAME%.bmp
-
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
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
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