MM_ISOTROPIC
-
Hallo!
Ich habe folgendes Problem:
Ich möchte in meinem Programm mit einem Memory-DC arbeiten und dabei den
Map-Mode so einstellen, daß ich in dem Ausgabefenster 25 Zeilen und 25 Spalten
mit der 'Kantenlänge' von 16 Pixel erhalte. Leider scheint da etwas nicht zu funzen,
denn BitBlt schägt immer mit der Meldung 'Parameter stimmt nicht' fehl.Folgendes habe ich genau probiert:
TextOut(p_hdcMem, 0, 0, "0", 1);
TextOut(p_hdcMem, 2, 2, "2", 1);
InvalidateRect(p_hWnd, NULL, TRUE);Die 'onPaint' Funktion sieht so aus:
// m_iLines=25, m_iCols=25 ::SetMapMode(p_hdcMem, MM_ISOTROPIC); ::SetWindowExtEx(p_hdcMem, m_iCols, m_iLines, NULL); ::SetViewportExtEx(p_hdcMem, p_cxClient, p_cyClient, NULL); PAINTSTRUCT ps; HDC hdc = ::BeginPaint(p_hWnd, &ps); if ( !::BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom, p_hdcMem, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY) ) { throw ErrorWin(true, ::GetLastError(), TEXT("Konnte nicht blitten")); } ::EndPaint(p_hWnd, &ps);
Gruss,
FoneBone
-
Poste doch mal, wie du p_hdcMem initialisierst.
p.s.:
Das throw ist an dieser Stelle sehr ungeschickt platziert. Dann vergisst dein Programm nämlich das EndPaint.
-
Original erstellt von cd9000:
Poste doch mal, wie du p_hdcMem initialisierst.Okay, initialisiert wird das DC so:
////////////// // Konstruktor d. Fensters: if ( (p_hdcMem = ::CreateCompatibleDC(NULL)) == NULL ) throw ErrorWin(TEXT("Konnte kein hdcMem erstellen")); ////////////// // Create-Win-Funktion: HDC hdc = ::GetDC(NULL); //p_ixMem = p_iyMem -> 400 (25*16) if ( (p_hBitMem = ::CreateCompatibleBitmap(hdc, p_ixMem, p_iyMem)) == NULL ) { int err = ::GetLastError(); ::DeleteObject(p_hdcMem); ::DeleteObject(m_hBrBK); // Wird nur im destruktor gelöscht, wenn m_bInitObjects // auf true gesetzt wurde ::ReleaseDC(NULL, hdc); throw ErrorWin(true, err, TEXT("Konnte BitMem nicht anlegen (Code %d)"), err); } ::ReleaseDC(NULL, hdc); m_bInitObjects = true; // Okay, jetzt sind alle GDI-Objects beisammen... ::SelectObject(p_hdcMem, p_hBitMem);
**
p.s.:
Das throw ist an dieser Stelle sehr ungeschickt platziert. Dann vergisst dein Programm nämlich das EndPaint.**
Stimmt
Gruss,
FoneBone