#include <stdio.h>
#include <Windows.h>
LPBYTE AllocateBits(int nWidth, int nHeight, int nBitcCount, int *pSize)
{
*pSize = ((nWidth * nBitcCount + 31) / 32) * 4 * nHeight;
if (*pSize < 0)
*pSize = -*pSize;
return (LPBYTE)malloc(*pSize);
}
int main(void)
{
BITMAPINFOHEADER bmh;
HBITMAP hbmp;
HDC hdc;
int size;
LPBYTE pBits;
ZeroMemory(&bmh, sizeof(bmh));
bmh.biSize = sizeof(bmh);
bmh.biBitCount = 24;
bmh.biPlanes = 1;
bmh.biWidth = 200;
bmh.biHeight = 100;
pBits = AllocateBits(bmh.biWidth, bmh.biHeight, bmh.biBitCount, &size);
memset(pBits, 0x99, size);
hdc = GetDC(NULL);
hbmp = CreateDIBitmap(hdc, &bmh, CBM_INIT, pBits, (BITMAPINFO *)&bmh, DIB_RGB_COLORS);
ReleaseDC(NULL, hdc);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hbmp);
CloseClipboard();
free(pBits);
return 0;
}