BITMAPINFOHEADER bmih = {
    sizeof(BITMAPINFOHEADER), // お約束
    640, // 幅
    480, // 高さ
    1, // must be 1
    24, // 画素深度
    BI_RGB, 0, // お約束
    0,0,0,0 // てきとー
};

HDC mainDC=GetDC(winHandle);
HDC dc=CreateCompatobleDC(mainDC);
BYTE *pixels;
HBITMAP hBitmap=CreateDIBSection(dc,(BITMAPINFO *)&bmih,DIB_RGB_COLORS,(void **)&pixels,NULL,0);

//////////
// このあたりで pixels[] に何か描く
// 全部 0 にすればまっくろけ(わらい
//////////

HGDIOBJ old=SelectObject( dc, hBitmap );
BitBlt(mainDC,0,0,640,480,dc,0,0,SRCCOPY);
GdiFlush();
SelectObject(dc, old);
DeleteDC(dc);
DeleteObject(hBitmap);
ReleaseDC(mainDC);

んーと,実際には動かしてないんスけど,
DIBSection を使うといったら大体こんな感じだと思います。# 「デバイス独立ビットマップ」のくせに,
# どうして CreateDIBSection の引数には DC が必要かなぁ?