I have a function that essentially takes a screen shot and saves a pointer to it as a structure. I would like to use the same structure for bitmaps that I load from files.

typedef struct _BITMAPCAPTURE {
LPDWORD pixels;
INT     width;
INT     height;

BOOL CaptureScreen(BITMAPCAPTURE* bmpCapture)
BOOL bResult = FALSE;
    return bResult;

ZeroMemory(bmpCapture, sizeof(BITMAPCAPTURE));

HDC hdcScreen  = GetDC(NULL);
HDC hdcCapture = CreateCompatibleDC(NULL);
int nWidth     = GetSystemMetrics(SM_CXVIRTUALSCREEN),
    nHeight    = GetSystemMetrics(SM_CYVIRTUALSCREEN);

// Bitmap is stored top down as BGRA,BGRA,BGRA when used as
// DWORDs endianess would change it to ARGB.. windows COLORREF is ABGR
LPBYTE lpCapture;
BITMAPINFO bmiCapture = { {
    sizeof(BITMAPINFOHEADER), nWidth, -nHeight, 1, 32, BI_RGB, 0, 0, 0, 0, 0,
} };

bmpCapture->hbm = CreateDIBSection(hdcScreen, &bmiCapture,
    DIB_RGB_COLORS, (LPVOID *)&lpCapture, NULL, 0);
    HBITMAP hbmOld = (HBITMAP)SelectObject(hdcCapture, bmpCapture->hbm);
    BitBlt(hdcCapture, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY);
    SelectObject(hdcCapture, hbmOld);
    bmpCapture->pixels = (LPDWORD)lpCapture;
    bmpCapture->width  = nWidth;
    bmpCapture->height = nHeight;
    bResult = TRUE;

return bResult;
The handle to the bitmap, as well as the width and height are all easy enough to get but I'm unsure of how to get the pixels. Thanks very much.