ページ 1 / 1
最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 16:33
by tyu
DXライブラリで最大化ボタンって有効なんですか?
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1096
ここ見て一応やってみましたが、ウインドウから最大化すると
真っ暗になります。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 16:38
by Mist
> 因みに、ウインドウモードが切り替わった際にグラフィック
> ハンドルは全て解放されてしまいますので、
と書いてます。
画像の再ロードを忘れていませんか?
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 16:46
by tyu
画像の再ロードの仕方教えてくれませんか?
よろしくお願いします。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 17:00
by Mist
LoadGraph関数などでロードするだけですよ。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 17:08
by tyu
それはもう一度コンパイルしろってことでしょか?
実行した後、ウインドウの最大化で画面を表示させると暗くなるって意味
で私は語っているんですが・・・。すいません。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 17:15
by Mist
画像ロード
↓
最大化
↓
もう一度ロード(←ここが重要)
というふうにプログラムが組まれていれば問題ないはずですが。
現状のソースを提示してもらえると具体的な回答が得られるかと思います。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 17:19
by Libra
DXライブラリリファレンス、SetRestoreGraphCallback関数の
説明を読んでみるとよいかもしれません。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 18:02
by tyu
初心者なんでポインタは基礎しかわからないですが、
int SetUseASyncChangeWindowModeFunction( int Flag, void (*CallBackFunction)(void*), void *Data );
特に↑が良く分からないです。
仮に最大化された時に前の画面データを呼び出す簡単な例があったら教えてくれませんか?
考えてみます。よろしくお願いします。
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 18:16
by Mist
リンク先の本家管理人さんサンプルの改変です。
画像はサンプルプログラム実行用フォルダに入っていたのを使っています。
VC++2008EEで動作確認済み。
#include "DxLib.h"
int iGraph;
// 画面モード変更時に呼ばれるコールバック関数
void ChangeCallback( void *Data )
{
// 画像の再ロード
iGraph = LoadGraph("TestTex1.jpg");
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// 最大化ボタンを有効にする
SetUseASyncChangeWindowModeFunction( TRUE, ChangeCallback, NULL );
// ウインドウモードで起動する
ChangeWindowMode( TRUE );
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;
// 描画先画面を表にする
SetDrawScreen( DX_SCREEN_FRONT ) ;
// 画像のロード
iGraph = LoadGraph("TestTex1.jpg");
// ESC キーが押されたら終了する
while( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// メッセージ処理(エラーが発生したらループを抜ける)
if( ProcessMessage() == -1 ) break;
DrawGraph(0, 0, iGraph, FALSE);
// 裏画面の内容を表画面に反映します
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
Re:最大化ボタンで真っ暗に
Posted: 2009年12月03日(木) 18:18
by Mist
タブの所がずれるのでもう一度。
(何でタブ幅8なんだorz)
#描画先が表になってたのを裏に修正(影響ないけど念のため)
#include "DxLib.h"
int iGraph;
// 画面モード変更時に呼ばれるコールバック関数
void ChangeCallback( void *Data )
{
// 画像の再ロード
iGraph = LoadGraph("TestTex1.jpg");
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// 最大化ボタンを有効にする
SetUseASyncChangeWindowModeFunction( TRUE, ChangeCallback, NULL );
// ウインドウモードで起動する
ChangeWindowMode( TRUE );
// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;
// 描画先画面を裏にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画像のロード
iGraph = LoadGraph("TestTex1.jpg");
// ESC キーが押されたら終了する
while( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// メッセージ処理(エラーが発生したらループを抜ける)
if( ProcessMessage() == -1 ) break;
DrawGraph(0, 0, iGraph, FALSE);
// 裏画面の内容を表画面に反映します
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}