Ich denke, Sie müssen eine geräteunabhängige Bitmap (DIB) erstellen. Wenn Sie bereits über ein Pixelfeld verfügen, das in ein Anwendungsfenster eingefügt werden kann, müssen Sie möglicherweise das gesamte Array in den von der API CreateDIBSection zugewiesenen Puffer kopieren und BitBlt aufrufen, um die DIB in das Fenster zu übertragen. Dies ist die einzige Art, wie ich weiß, eine bloße Anordnung von Pixeln als sichtbares Bild auf dem Computerbildschirm auf Win32-Plattform zu zeigen, und es ist sehr kompliziert und schwer zu verstehen.
Hier sind die Schritte, die ich Dinge zu testen, nehmen verwendet, um ähnlich dem, was Sie tun möchten:
Erstellen von DIB:
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = /* Width of your image buffer */
bmi.bmiHeader.biHeight = - /* Height of your image buffer */
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
HDC hDesktopDC = GetDC(GetDesktopWindow());
HBITMAP hDib = CreateDIBSection(hDesktopDC, &bmi, DIB_RGB_COLORS, (void **)&buffer, 0, 0);
if (buffer == NULL) { /* ERROR */ }
HDC hDibDC = CreateCompatibleDC(hDesktopDC);
HGDIOBJ hOldObj = SelectObject(hDibDC, hDib);
/* Copy your array of pixels to buffer allocated above. */
ReleaseDC(GetDesktopWindow(), hDesktopDC);
Implementierung WM_PAINT-Ereignishandler (die hWnd Variable enthält das Fenster unten Griff):
case WM_PAINT:
PAINTSTRUCT paint;
HDC hWndDc = BeginPaint(hWnd, &paint);
BitBlt(hWndDC, 0, 0, /* Width of DIB */, /* Height of DIB */,
/* HDC of DIB (hDibDC in the above) */, 0, 0, SRCCOPY);
EndPaint(hWnd, &paint);
break;
Ich erwarte nicht wirklich, dass die oben genannten Codeschnipsel dir direkt helfen würden. Wenn Sie entschlossen sind, GDI-Funktionen wie die in den obigen Snippets zu verwenden, empfehle ich Ihnen, ihre API-Dokumente auf MSDN sorgfältig zu lesen. Weil es sehr schwierig ist, DCs oder GDI-Objekte, die während der Verwendung der APIs erfasst wurden, ordnungsgemäß zu veröffentlichen oder zu löschen.
Diese Frage ist sehr breit, vielleicht möchten Sie [winapi DrawText] (http://stackoverflow.com/search?q= [winapi] + drawtext)? –
Zeichnest du den Text in dein eigenes Fenster oder in ein anderes Programmfenster? – chris
@ Jesse, chris Wie kommst du zu dem Entschluss, dass ich Text auf einem Fenster zeichnen will? '^^ –