CBWDraw

現在、開発凍結されています。ここに記載されている内容は、現在実現の目処はたっていません。

概要#

このクラスは表示画面の制御を担う、グラフィックエンジンの中核。
具体的には、低解像度の画面の拡大表示を行う。
内部的に[[CDIBDraw]]を利用しているため、[[CDIBDraw]]と同じ制限を受ける。
なお、レイヤーは拡大表示の対象外なので注意すること([[CDIBDraw]]が直接描画する)。

使用方法#

使用準備として、[[stdafx.h]]に"#define USE_BWDRAW"を記述する(これによりウィンドウのサイズをユーザーが変更したときの不自然な動きがなくなる)。
CBWDrawを使用開始する前にはSetDisplayで低解像度画面のサイズ設定と画面の構築を必ず行う。
これで画面が使用可能になるので、CBWDrawの描画関数を使って描画すれば正しい位置に正しいサイズで表示される。

ダウンロード#

上が新しい。

draw070721.lzh
draw070718.lzh
draw070713.lzh
bwdraw070330.lzh
bwdraw070116.lzh
bwdraw070115.lzh

履歴#

07/07/21画像の一部を切り抜くと画像全体の大きさに拡大されるバグを修正
07/07/18CBWDrawBaseに関する変更
07/07/13CDIB32の整数倍拡大に関するバグ修正に伴うSetBltParameterの単純化
07/03/30BltNaturalNoZoomにオフセット量の引数追加
07/01/1606/08/20~06/10/25の変更を潰してしまっていたのを修正
07/01/15[[yaneSDK]]の変更にあわせて変更
ウィンドウの自由サイズ変更に対応
SetClient系の関数を削除し、SetDisplayに統合
(内容的にはSetDisplayの内容を削除)
これを使うときはstdafx.hに"#define USE_BWDRAW"を追加する
(ウィンドウのリサイズに影響が出る)
06/10/25グローバルスコープのlpBWDrawの初期値をNULLに
06/08/26SetDisplay関連の簡易メソッドを追加
06/08/20ClientToScreenRectが正しい矩形情報を返さないバグを修正
06/08/10[[CBWTextDIB32]]と切り離した
06/08/10Layerを原寸大で描画するようにした(特別な用途以外でLayerは使わないべき)
Saveを改良
06/08/08一応完成

メンバ関数#

ここに記載されていない関数は使うべきではない。
または、ソースコードをよく読んで注意深く使うこと。

BlendBlt#

LRESULT BlendBlt(CPlaneBase* lpSrc,int x,int y,DWORD dwDstRGBRate,
DWORD dwSrcRGBRate,LPRECT lpSrcRect=NULL,LPSIZE lpDstSize=NULL,
LPRECT lpClipRect=NULL)
透過キーを有効にしたブレンドを行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

BlendBltFast#

LRESULT BlendBltFast(CPlaneBase* lpSrc,int x,int y,DWORD dwDstRGBRate,
DWORD dwSrcRGBRate,LPRECT lpSrcRect=NULL,LPSIZE lpDstSize=NULL,
LPRECT lpClipRect=NULL)
透過キーを無効にしたブレンドを行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

Blt#

LRESULT Blt(CPlaneBase* lpSrc,int x,int y,LPRECT lpSrcRect=NULL,
LPSIZE lpDstSize=NULL,LPRECT lpClipRect=NULL)
透過キーを有効にした転送を行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

BltFast#

LRESULT BltFast(CPlaneBase* lpSrc,int x,int y,LPRECT lpSrcRect,
LPSIZE lpDstSize,LPRECT lpClipRect)
透過キーを無効にした転送を行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

BltNatural#

LRESULT BltNatural(CPlaneBase* lpSrc,int x,int y,LPRECT lpSrcRect=NULL,
LPSIZE lpDstSize=NULL,LPRECT lpClipRect=NULL)
自然な転送を行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。
通常画像転送にはこれを用いるべき。

BltNaturalNoZoom#

LRESULT BltNaturalNoZoom(CPlaneBase* lpSrc,int x,int y,
LPRECT lpSrcRect=NULL,LPSIZE lpDstSize=NULL,LPRECT lpClipRect=NULL,
int nOffsetX=0, int nOffsetY=0);
自然な転送を行う。
画面の拡大率に合わせて正しく位置が補正されるが、大きさを補正しない点が異なる。
予め高解像度画面用に作られた大きな画像(例えばテキスト)に対して用いる。
オフセット量は、位置の補正をかけたくないときに使う。

Clear#

LRESULT Clear(DWORD dwDIB32RGB=0,LPRECT lpRect=NULL)
画面のクリアを行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

ClearRect#

LRESULT ClearRect(LPRECT lpRect=NULL)
画面のクリアを行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

ClientToScreen#

void ClientToScreen(int&x, int&y)
低解像度画面の座標から実際の画面の座標へ変換する。

ClientToScreenRect#

void ClientToScreenRect(LPRECT lprcClient, LPRECT lprcScreen=NULL)
低解像度画面の座標から実際の画面の座標へ変換する。

ClientToScreenX#

int ClientToScreenX(int x)
低解像度画面の座標から実際の画面の座標へ変換する。

ClientToScreenY#

int ClientToScreenY(int y)
低解像度画面の座標から実際の画面の座標へ変換する。

FadeBltAlpha#

LRESULT FadeBltAlpha(CPlaneBase* lpSrc,int x,int y,int nFadeRate)
[[α値]]を考慮した転送を行う。
画面の拡大率に合わせて正しく位置・大きさが補正される。

FitClient#

void FitClient()
拡大率、画面表示位置を補正する。
自動的に呼び出されるため通常用いることは無い。

FlushEffect#

LRESULT FlushEffect(LPRECT lpRect=NULL)
画面を明暗反転する。
画面の拡大率に合わせて正しく位置・大きさが補正される。

GetSize#

void GetSize(int &x,int &y)
低解像度画面の大きさを得る。

GetZoom#

int GetZoom()
拡大率を得る。

MosaicEffect#

LRESULT MosaicEffect(int d, LPRECT lpRect=NULL)
モザイクを掛ける。
画面の拡大率に合わせて正しく位置・大きさが補正される。

OnDraw#

void OnDraw(RECT* lpRect=NULL,bool bLayerCallBack=true)
実際の画面表示を行う。
場合によってはlpRectが無視される。
lpRectは画面の拡大率に合わせて正しく位置・大きさが補正される。

Save#

LRESULT Save()
拡大された画面を保存する。
余白は切り取られる。
ファイル名は自動的に付けられ、指定することはできない。

ScreenToClient#

void ScreenToClient(int&x, int&y)
実際の画面の座標から低解像度画面の座標へ変換する。

ScreenToClientX#

int ScreenToClientX(int x)
実際の画面の座標から低解像度画面の座標へ変換する。

ScreenToClientY#

int ScreenToClientY(int y)
実際の画面の座標から低解像度画面の座標へ変換する。

SetDisplay(1)#

LRESULT SetDisplay(int nSizeX, int nSizeY)
低解像度の画面の大きさを変更し、ウィンドウサイズを低解像度画面の大きさに補正する。

SetDisplay(2)#

LRESULT SetDisplay(bool bFullScr=false,int nSizeX=0,int nSizeY=0,
int nColorDepth=0)
低解像度の画面の大きさを変更し、ウィンドウサイズを低解像度画面の大きさに補正する。
bFullScrとnColorDepthは無視される。