Bitmaps in Dialogen
-
HI,
Ich habe ein paar Dialoge erstellt (mit dem Ressourcen Editor) und habe eine Bitmaps (.bmp Datei) als Ressource. Nun moechte ich diese Bitmap auf meinen Dialog platzieren.
Wenn ich ein MFC Projekt erstelle geht das ganz einfach mit den Bitmap Tool (ihr wisst schon.. )
Aber in WINAPI funktioniert das nicht , warum ?
Ich brauch anscheinend einen Code dafuer hm ?

-
Plazier einfach im Resourcen-Editor ein Image-Static-Control und setzt dann in den Eigenschaften die Bitmap...oder du blittest es unter WM_PAINT direkt auf dein Dialog-Hintergrund.
-
Das mit dem Image Static Control hab ich versucht , funktionert komischer weiss nicht , weiss echt nicht warum.
das mit WM_PAINT funktioniert wie ?
Ich habe das mal versucht
case WM_PAINT: hwnd = FindWindow("Testprogram",NULL); hdC = BeginPaint (hwnd, &ps); hBitmap = (HBITMAP)LoadImage(GetModuleHandle( NULL ),MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,0,0,0); if (!hBitmap) MessageBox(0,"!hBitmap","Error",MB_OK); BITMAP bmp; GetObject(hBitmap,sizeof(bmp),&bmp); if (!hwnd) { return 2; MessageBox(0,"!hwnd","Error",MB_OK);} hDC = GetDC(hwnd); if (!hDC) { return 3; MessageBox(0,"!hDC","Error",MB_OK);} hBitmapDC = CreateCompatibleDC(hDC); if (!hBitmapDC) { return 4; MessageBox(0,"!hBitmapDC","Error",MB_OK);} SelectObject(hBitmapDC,hBitmap); BitBlt(hDC,0,0,48,48,hBitmapDC,0,0,SRCCOPY); DeleteObject(hBitmap); ReleaseDC(hwnd,hBitmapDC); ReleaseDC(hwnd,hDC); EndPaint (hwnd, &ps); return(0);Was raus kam war eine 100 % Prozessor belastung und alles hing
-
N' Abend,
PhoeNix_FasT schrieb:
Das mit dem Image Static Control hab ich versucht , funktionert komischer weiss nicht , weiss echt nicht warum.
Also bei mir (MSVS 6.0) ist es der 2. Button in dem Fenster 'Steuerelemente' mit dem Tooltip 'Bild'
. Unter den Eigenschaften in der Kategorie 'Allgemein' gibt ne Combobox 'Typ' da muss dann 'Bitmap' stehen und darunter in der Combobox 'Abbild' muss dann die Resourcen-ID eingetragen werden. Hoffe das hilft dir.PhoeNix_FasT schrieb:
das mit WM_PAINT funktioniert wie ?
Ich habe das mal versucht[...]
Jo da sind ne Menge Fehler drin....kb das jetzt allews zu korrigieren -sorry- So musst du es richtig machen. Kannst das ja mit deiner Version vergleichen
.case WM_PAINT: PAINTSTRUCT ps; RECT rcClient; GetClientRect(hWnd, &rcClient); // Display-Kontext anfordern: BeginPaint(hWnd, &ps); // Speicherkontext anlegen: HDC hdcMem = CreateCompatibleDC(NULL); // Hintergrund-Bitmap laden und in Speicherkontext selektieren; Dabei vorherige Bitmap sichern: HBITMAP hbmpOldBits = reinterpret_cast<HBITMAP>(SelectObject(hdcMem, LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_BMP)); // ... // TODO: Hier können nun weitere Zeichenaktionen folgen // ... // Den Speicherkontext auf den Display-Kontext blitten: BitBlt(ps.hdc, 0, 0, rcClient.right, rcClient.bottom, hdcMem, 0, 0, SRCCOPY); // GDI-CleanUp: DeleteObject(SelecetObject(hdcMem, hbmpOldBits)); DeleteDC(hdcMem); EndPaint(hWnd, &ps);
-
case WM_PAINT: BeginPaint(hDlg, &ps); hdcMem = CreateCompatibleDC(NULL); hbmpOldBits = reinterpret_cast<HBITMAP>(SelectObject(hdcMem, LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)))); BitBlt(ps.hdc, 0, 0, 50, 50, hdcMem, 0, 0, SRCCOPY); DeleteObject(SelectObject(hdcMem, hbmpOldBits)); DeleteDC(hdcMem); EndPaint(hDlg, &ps); return(0);So hab ich das jetzt... nun kann ich meinen Dialog nichtmehr anklicken ^^ Wenn ich ihn anklicke geht er weg
und ich muss mit ihn alt + tab oder in der taskleiste wieder herholen, und ich kann wieder nicht draufklicken
-
In Dialogen arbeitest du _MIT_ dem DialogManager, deswegen: return (TRUE); da die Nachricht ja von dir behandelt wurde.
-
Laeuft alles , danke CodeFinder
-
PhoeNix_FasT schrieb:
Laeuft alles , danke CodeFinder
Jo kein Problem.
Hast ja auch gut formulierte Fragen gestellt. Das ist auch mal selten bzw. lobenswert! 