10:自前クリップ

今回は前回の続き、ウィンドウモードでやります。 前回のプログラムではウィンドウの画面端まで描画されてませんでした、 とはいえウィンドウモードではバックバッファにクリッピングは使えません。 やれば分かると思いますが、ずれるんです。

何故ずれるのか、理由はウィンドウにあります。 クリッパーを使うと、プライマリ&バックバッファはウィンドウに関連づけられるので(SetHWndで)、 ウィンドウが動けばその分だけクリッピング領域も動くことになります。 プライマリはそれでいいのですが、バックバッファ動けないので、ウィンドウの位置(スクリーン座標)分だけずれてしまう訳です。

と言ったわけで今まで通りクリッパーで画面端描画はできなくなりました。 となると自前で処理するしかありません(多分)。 では早速やってみましょう♪

・・・
// 自前クリッピング…
if(rcDest.left < 0)
{
	rcSrc .left+= -rcDest.left;
	rcDest.left = 0;
}
if(rcDest.top  < 0)
{
	rcSrc .top+= -rcDest.top;
	rcDest.top = 0;
}
if(rcDest.right > szWnd.cx)
{
	rcSrc .right-= rcDest.right-szWnd.cx;
	rcDest.right = szWnd.cx;
}
if(rcDest.bottom > szWnd.cy)
{
	rcSrc .bottom-= rcDest.bottom-szWnd.cy;
	rcDest.bottom = szWnd.cy;
}

// BMP転送
lpDDSBack->BltFast(rcDest.left,rcDest.top,lpDDSSprite,&rcSrc,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
・・・

rcDestは描画先のRECT、rcSrcは描画するBMPのRECTで、szWndはクライアント領域のサイズ(640,480)です。 こんな感じでRECTを弄くってやるだけでOKです。クリッパーなしなのでBltFastを使えます。

今回は簡単でした。これで実行すれば画面はしにもばっちり描画できます。

Download dd010.lzh - 自前クリップ


★TOP★

Copyright(C) へぽぽ