kanamaruさんの仰られる通り win api による描画は遅いのであまりお勧めできませんが
一応 MakeScreen などで作成したグラフィックハンドルにビットマップデータを転送する
非公開関数の BltBmpToGraph という関数があります
// ビットマップの内容をグラフィックハンドルに転送
// BmpColorData : 転送するビットマップの色情報
// RgbBmp : 転送するビットマップ
// AlphaBmp : 転送するビットマップのアルファチャンネル( 使用しない場合は NULL )
// CopyPointX, CopyPointY : 転送先のグラフィック内の座標
// GrHandle : ビットマップを転送されるグラフィックハンドル
int BltBmpToGraph( COLORDATA *BmpColorData, HBITMAP RgbBmp, HBITMAP AlphaBmp, int CopyPointX, int CopyPointY, int GrHandle ) ;
因みにどんなビットマップでも良いというわけではなく、渡せるビットマップは CreateDIBSection で
作成できる DIB( Device-Independent Bitmap デバイス非依存ビットマップ )のみです
これを使うと DIB に win api で図形を描画した後、DXライブラリのグラフィックハンドルに描画結果を
転送して、描画結果が転送されたグラフィックハンドルを DrawGraph で画面に描画することで
まりもりさんの望む処理が実現します
とりあえず画面左上に緑色の斜め線を win api で描画するサンプルを組んでみましたので
よろしければご覧ください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int GrHandle ;
BITMAPINFO BitmapInfo ;
HBITMAP DIB ;
HDC DC ;
HPEN Pen, OldPen ;
void *ImageBuffer = NULL ;
COLORDATA ColorData ;
// ウインドウモードに変更
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// デバイスコンテキストの作成
DC = CreateCompatibleDC( NULL ) ;
// 縦横100ピクセルの 24ビットカラーのDIBを作成
memset( &BitmapInfo, 0, sizeof( BitmapInfo ) ) ;
BitmapInfo.bmiHeader.biSize = sizeof( BITMAPINFOHEADER ) ;
BitmapInfo.bmiHeader.biWidth = 100 ;
BitmapInfo.bmiHeader.biHeight = -100 ; // 高さはマイナスの値にする
BitmapInfo.bmiHeader.biPlanes = 1 ;
BitmapInfo.bmiHeader.biBitCount = 24 ;
BitmapInfo.bmiHeader.biCompression = BI_RGB ;
DIB = CreateDIBSection( DC, &BitmapInfo, DIB_PAL_COLORS, ( void ** )&ImageBuffer, NULL, 0 ) ;
// 色情報を 24ビットカラーに初期化
CreateFullColorData( &ColorData ) ;
// デバイスコンテキストに DIB をセット
SelectObject( DC, DIB ) ;
// 線を描画する
{
Pen = CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ) ) ; // ペンの作成
OldPen = ( HPEN )SelectObject( DC, Pen ) ; // デバイスコンテキストにペンをセット
MoveToEx( DC, 0, 0, NULL ) ; // 描画座標の移動
LineTo( DC, 100, 100 ) ; // 線の描画
SelectObject( DC, OldPen ) ; // デバイスコンテキストに元のペンをセット
DeleteObject( Pen ) ; // ペンを削除
}
// DIB と同じ大きさのグラフィックハンドルを作成
GrHandle = MakeScreen( 100, 100, TRUE ) ;
// DIB を転送する前に透過色を黒にしておく
SetTransColor( 0, 0, 0 ) ;
// グラフィックハンドルに DIB の内容を転送
BltBmpToGraph( &ColorData, DIB, NULL, 0, 0, GrHandle ) ;
// グラフィックハンドルの内容を描画
DrawGraph( 0, 0, GrHandle, TRUE ) ;
// グラフィックハンドルを削除
DeleteGraph( GrHandle ) ;
// デバイスコンテキストの削除
DeleteDC( DC ) ;
// DIB の削除
DeleteObject( DIB ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
因みにサンプル中では DIB も GrHandle も用が済んだ時点で削除していますが、
もし毎フレーム同じ大きさの図形を描画する場合は、プログラムの最初に DIB と GrHandle を作成して、
プログラムを終了する前に DIB と GrHandle を削除するようにした方が良いです
( 作成・削除も時間のかかる処理なので… )