最大化ボタンで真っ暗に

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tyu

最大化ボタンで真っ暗に

#1

投稿記事 by tyu » 15年前

DXライブラリで最大化ボタンって有効なんですか?
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1096
ここ見て一応やってみましたが、ウインドウから最大化すると
真っ暗になります。

Mist

Re:最大化ボタンで真っ暗に

#2

投稿記事 by Mist » 15年前

>  因みに、ウインドウモードが切り替わった際にグラフィック
> ハンドルは全て解放されてしまいますので、

と書いてます。
画像の再ロードを忘れていませんか?

tyu

Re:最大化ボタンで真っ暗に

#3

投稿記事 by tyu » 15年前

画像の再ロードの仕方教えてくれませんか?
よろしくお願いします。

Mist

Re:最大化ボタンで真っ暗に

#4

投稿記事 by Mist » 15年前

LoadGraph関数などでロードするだけですよ。

tyu

Re:最大化ボタンで真っ暗に

#5

投稿記事 by tyu » 15年前

それはもう一度コンパイルしろってことでしょか?
実行した後、ウインドウの最大化で画面を表示させると暗くなるって意味
で私は語っているんですが・・・。すいません。

Mist

Re:最大化ボタンで真っ暗に

#6

投稿記事 by Mist » 15年前

画像ロード

最大化

もう一度ロード(←ここが重要)

というふうにプログラムが組まれていれば問題ないはずですが。
現状のソースを提示してもらえると具体的な回答が得られるかと思います。

Libra

Re:最大化ボタンで真っ暗に

#7

投稿記事 by Libra » 15年前

DXライブラリリファレンス、SetRestoreGraphCallback関数の
説明を読んでみるとよいかもしれません。

tyu

Re:最大化ボタンで真っ暗に

#8

投稿記事 by tyu » 15年前

初心者なんでポインタは基礎しかわからないですが、
int SetUseASyncChangeWindowModeFunction( int Flag, void (*CallBackFunction)(void*), void *Data );
特に↑が良く分からないです。

仮に最大化された時に前の画面データを呼び出す簡単な例があったら教えてくれませんか?
考えてみます。よろしくお願いします。

Mist

Re:最大化ボタンで真っ暗に

#9

投稿記事 by Mist » 15年前

リンク先の本家管理人さんサンプルの改変です。
画像はサンプルプログラム実行用フォルダに入っていたのを使っています。
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 ;
}

Mist

Re:最大化ボタンで真っ暗に

#10

投稿記事 by Mist » 15年前

タブの所がずれるのでもう一度。
(何でタブ幅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 ;
}

閉鎖

“C言語何でも質問掲示板” へ戻る