すいません、どなたかお願いいたします。

fh=CreateFile(szFn,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン

lpBuf=GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保

ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);

lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));

offset=*(LPDWORD)(lpBuf+10); // ビットマップまでのオフセット
lpBMP=lpBuf+offset; // ビットマップバッファのポインタ

CloseHandle(fh);

これでビットマップを二つ読み込んで重ねてマスク部分を透過させているのですが
横幅が奇数などになるとうまく透過させることができません。
重ね方は3バイト見ていって0xff 0x00 0xffだったら描画しないとしています。
4の倍数じゃないとうまく表示されないのはわかっているのでがうまくできないのです。

どなたかいいサイト、参考書、やり方などご教授お願いします;;