Avatar billede zerohero Nybegynder
25. februar 2005 - 13:07 Der er 2 kommentarer

Bitmaps i C++

Hejsa, jeg har i et stykke tid proevet at lave nogle bitmaps i C++, men det er ikke rigtigt lykkedes endnu. Det jeg gerne vil er at lave en bitmap, som jeg kan tegne paa, som jeg saa kan kopier til et vindue! Jeg har nemlig opdaget at hvis jeg tegner direkte til et vindue "flimre" grafikken! Nogen der har et "easy-to-use" eksempel paa at bruge bitmaps i VC++!

Kode der er kommenteret, vaerdsaettes hoejt :))
Avatar billede bertelbrander Novice
26. februar 2005 - 00:52 #1
Er det noget i stil med dette du er ude efter:
void OnDraw(HWND hwnd)
{
  PAINTSTRUCT PaintStruct;
  BeginPaint(hwnd, &PaintStruct);
  HFONT Font = CreateFont(16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Arial");
  HDC dc = PaintStruct.hdc; // The screen Device Context

  HDC MemDc = CreateCompatibleDC(dc);                    // And a memory DC compatible with the screen DC
  SelectObject(MemDc,  Font);                            // Tell windows that we want to use the font when drawing on the DC
  HBITMAP Bitmap = CreateCompatibleBitmap(dc, 200, 100); // Now create a Ditmap
  HGDIOBJ OldBitmap = SelectObject(MemDc,  Bitmap);      // Use the Bitmap with the memory DC
  HBRUSH Brush = CreateSolidBrush(RGB(255, 128, 128));  // Create a light red brush
  RECT Rect = {0, 0, 200, 100};
  FillRect(MemDc, &Rect, Brush);                        // Fill the background of the bitmap with brush
  SetBkMode(MemDc, TRANSPARENT);                        // Don't draw background while drawing text.
  TextOut(MemDc, 5, 5, "Whatever", 8);                  // Put some text
  HPEN Pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));    // Create a blue pen
  HGDIOBJ OldPen = SelectObject(MemDc, Pen);            // Tell windows to use the pen with this DC
  MoveToEx(MemDc, 0, 0, 0);                              // Move to upper left corner
  LineTo(MemDc, 199, 0);                                // Draw some lines
  LineTo(MemDc, 199, 99);
  LineTo(MemDc, 0, 99);
  LineTo(MemDc, 0, 0);

  BitBlt(dc, 10, 10, 200, 100, MemDc, 0, 0, SRCCOPY);    // Copy everything to the screen

  SelectObject(MemDc,  OldBitmap);                      // Cleanup
  SelectObject(MemDc,  OldPen);                          // Cleanup
  EndPaint(hwnd, &PaintStruct);
  DeleteDC(MemDc);
  DeleteObject(Font);
  DeleteObject(Brush);
  DeleteObject(Bitmap);
  DeleteObject(OldPen);
}

Der er en hel applikation der bruger det her:
http://home20.inet.tele.dk/midgaard/bitmapwin.html

Hvis du bruger MFC vil du nok bruge nogle class'er, så som CDC, CBitmap, CPen etc. men fremgangsmåden er den samme.
Avatar billede zerohero Nybegynder
01. marts 2005 - 14:09 #2
Det er SUPERT!
Det er praecist hvad jeg soeger efter!
Mange tak!

Smid et svar og du vil faa points!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester