トップページ > 過去ログ > 記事閲覧
画面を白くしたいのですが…
名前:やまた 日時: 2010/05/22 21:10

14歳から始めるわくわくC++ゲームプログラミングを見てDxLibを使用しております。 最初に出る画面の背景を白くしたり、背景を変えたりしたいのですが可能でしょうか? 可能ならばどうすればよいのでしょうか?

Page: 1 |

Re: 画面を白くしたいのですが… ( No.1 )
名前:いっち 日時:2010/05/22 17:20

以下の関数でどうでしょうか?描画毎にDrawBoxをすることでも出来ると思います。 SetBackgroundColor( 255, 255, 255 );
Re: 画面を白くしたいのですが… ( No.2 )
名前:やまた 日時:2010/05/22 22:33

SetBackgroundColor( 255, 255, 255 ); は未定義関数としてエラーになってしまいました。 必要なインクルード文など教えてほしいです。 ちなみにDrawBox(255,255,255)はうまくいきました。 ところでウィンドウのサイズを可変にするには どうしたら良いのでしょうか?
Re: 画面を白くしたいのですが… ( No.3 )
名前:T 日時:2010/05/22 22:55

SetWindowSizeChangeEnableFlag( int Flag, int FitScreen = 1 ) という関数を使えば可変に出来ると思います
Re: 画面を白くしたいのですが… ( No.4 )
名前:いっち 日時:2010/05/22 23:16

> SetBackgroundColor( 255, 255, 255 ); > は未定義関数としてエラーになってしまいました。 > 必要なインクルード文など教えてほしいです。 インクルードは"DxLib.h"です。 DxLibのバージョンが古いと言うことは無いでしょうか? (書籍同梱のDxLibはバージョンが古いです) できれば最新のものをインストールしてください。
Re: 画面を白くしたいのですが… ( No.5 )
名前:やまた 日時:2010/05/23 22:09

このDXライブラリ置き場からの最新版BorlandC++用を ダウンロードして展開した後、プロジェクトのフォルダ にコピーしたところ SetBackgroundColor(255,255,255); で成功しました。 しかし、 SetWindowSizeChangeEnableFlag(int Flag, int FitScreen = 1); の関数を追加したところ、WinMainの構文エラー というエラーメッセージが出てしまいました。
Re: 画面を白くしたいのですが… ( No.6 )
名前:na 日時:2010/05/23 22:24

SetWindowSizeChangeEnableFlag(int Flag, int FitScreen = 1); と書いてエラー? SetWindowSizeChangeEnableFlag(TRUE); です
Re: 画面を白くしたいのですが… ( No.7 )
名前:T 日時:2010/05/23 22:58

書き方が紛らわしかったですね 申し訳ないです naさんのおっしゃったとおりに書いてください
Re: 画面を白くしたいのですが… ( No.8 )
名前:やまた 日時:2010/05/24 10:43

以下のようにして背景が白い可変長ウィンドウを表示する事ができました。 教えて頂いてありがとうございました。 ただ、このままでは、画面の拡大縮小にともなって 箱も拡大縮小してしまうという現象がおきます。 ウィンドゥは拡大縮小しても、箱などの図形の大きさ は変わらないようにする方法がわかりません。 何度も申し訳ないのですが、教えて頂きたいと思います。 #include "DxLib.h" //ヘッダファイルの取り込み int WINAPI WinMain(HINSTANCE hI,HINSTANCE hp,LPSTR lpC,int nC){ ChangeWindowMode(TRUE); //ウィンドゥモードに指定 if(DxLib_Init() == -1) return(-1); //DXライブラリ初期化 SetDrawScreen(DX_SCREEN_BACK); //描画対象画面の指定 SetBackgroundColor(255,255,255); //背景色の指定 SetWindowSizeChangeEnableFlag(TRUE); //ウィンドウを可変長にする。 //メインループ while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){ ClsDrawScreen(); //画面の消去 DrawBox(270,190,370,290, GetColor(255,0,0), TRUE); //箱の描画 ScreenFlip(); //画面の切り替え } DxLib_End(); //DXライブラリ終了処理 return(0); //終了 }
Re: 画面を白くしたいのですが… ( No.9 )
名前:na 日時:2010/05/24 13:25

SetWindowSizeChangeEnableFlag(TRUE, FALSE); でできます
Re: 画面を白くしたいのですが… ( No.10 )
名前:やまた 日時:2010/05/24 15:54

SetWindowSizeChangeEnableFlag(TRUE, FALSE); ではできませんでした。
Re: 画面を白くしたいのですが… ( No.11 )
名前:ミルク 日時:2010/05/24 16:27

横ヤリ失礼します。 >>やまたさん naさんが仰られているように、以下の SetWindowSizeChangeEnableFlag( TRUE, FALSE ); で出来ます。 No.8 にやまたさんが書かれたソースコードがありますよね。 SetWindowSizeChangeEnableFlag( TRUE ); となっていますが、そこを SetWindowSizeChangeEnableFlag( TRUE, FALSE ); として下さい。 ウインドウを拡大縮小しても中の図形が変形しなくなるはずです。 …ですが少々、挙動がおかしいような気がします。 元のサイズから縮小は出来ますが拡大が出来ません。 ウインドウ左端をクリックして左に引っ張るとウインドウごと左に移動してしまいます。 私の現在の環境は以下の通りです。 OS:Windows XP SP2 開発:VC++2008EE DXライブラリ:3.02d DirectX:DirectX 9.0c OSが古いために起きている現象なのでしょうか…。
Re: 画面を白くしたいのですが… ( No.12 )
名前:T 日時:2010/05/24 16:35

ミルクさんのおっしゃられた動作は仕様です ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1035 ここに書いてありますが、おそらくイメージ通りには作るのは難しいと思います もういっそ、GUIのプログラミングを勉強された方が早いかと
Re: 画面を白くしたいのですが… ( No.13 )
名前:na 日時:2010/05/24 16:35

拡大できないのは仕様みたいですね ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1035
Re: 画面を白くしたいのですが… ( No.14 )
名前:ミルク 日時:2010/05/24 17:24

なるほど、拡大できないのは仕様でしたか。 確認不足申し訳ないです。 ウインドウが左に引っ張られてしまう件については 管理人様の対応待ちになりますかね。
Re: 画面を白くしたいのですが… ( No.15 )
名前:いっち 日時:2010/05/24 19:48

比率を求めて描画する方法をやってみましたが、 リサイズ中の描画はDxLib任せのため、うまくいきませんでした。 ですが、現状ではこれが一番期待通りの動作になると思います。 int WINAPI WinMain(HINSTANCE hI,HINSTANCE hp,LPSTR lpC,int nC){ ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return (-1); SetBackgroundColor( 255, 255, 255 ); SetWindowSizeChangeEnableFlag( TRUE ); int x, y, d, x2, y2; GetScreenState( &x, &y, &d ); int gh = MakeScreen( x, y ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { SetDrawScreen( gh ); ClsDrawScreen( ); DrawBox( 270, 190, 370, 290, GetColor( 255, 0, 0), TRUE ); SetDrawScreen( DX_SCREEN_BACK ); ClsDrawScreen( ); GetWindowSize( &x2, &y2 ); DrawExtendGraph( 0, 0, (int)(x * x / (float)x2), (int)(y * y / (float)y2), gh, FALSE ); ScreenFlip( ); } DxLib_End( ); return ( 0 ); }
Re: 画面を白くしたいのですが… ( No.16 )
名前:やまた 日時:2010/05/28 08:02

NO.15でいっちさんに書いて頂いたようにして実行 したところ、最初出る画面がインターネットのウェブ 画面を押しつぶしたような画面になり、その画面の 表面に箱が表示されるという現象になりました。 出力されるウェブ画面は最も最後に閉じたウェブ画面 でした。 画面を拡大したところ、余白ができて、その余白部分 は白くなりました。 箱の大きさはドラッグ処理をした直後は拡大され 最終的に元の大きさになりました。
Re: 画面を白くしたいのですが… ( No.17 )
名前:管理人 日時:2010/05/30 14:37

Tさんも仰られていますがDXライブラリはウインドウの大きさを自由に変更できるタイプの ソフトには向いていません、拡大を伴わないウインドウサイズの変更では SetGraphMode で指定している 画面サイズ以上にすることはできませんので、もし自由なサイズに変更できるようにしたい場合は 初期解像度をデスクトップ画面と同じにする必要があります サンプルを用意しましたのでよろしければお試し下さい #include "DxLib.h" //ヘッダファイルの取り込み #define START_SCREEN_W ( 640 ) #define START_SCREEN_H ( 480 ) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int DesktopWidth, DesktopHeight, DesktopColorBitDepth ; // ウインドウモードで起動する指定 ChangeWindowMode( TRUE ) ; // デスクトップの解像度を取得 GetDefaultState( &DesktopWidth, &DesktopHeight, &DesktopColorBitDepth ) ; // 画面解像度をデスクトップの解像度と同じにする SetGraphMode( DesktopWidth, DesktopHeight, DesktopColorBitDepth ) ; // ウインドウサイズ可変、且つウインドウのサイズ変更で表示内容を拡大しないようにする SetWindowSizeChangeEnableFlag( TRUE, FALSE ) ; // ウインドウの初期解像度は 640x480 SetWindowSize( START_SCREEN_W, START_SCREEN_H ) ; // ウインドウの初期位置はデスクトップの中心 SetWindowPosition( ( DesktopWidth - START_SCREEN_W ) / 2, ( DesktopHeight - START_SCREEN_H ) / 2 ) ; if(DxLib_Init() == -1) return(-1); //DXライブラリ初期化 SetDrawScreen(DX_SCREEN_BACK); //描画対象画面の指定 SetBackgroundColor(255,255,255); //背景色の指定 //メインループ while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){ ClsDrawScreen(); //画面の消去 DrawBox(270,190,370,290, GetColor(255,0,0), TRUE); //箱の描画 ScreenFlip(); //画面の切り替え } DxLib_End(); //DXライブラリ終了処理 return(0); //終了 } 私の手元では上記プログラムで正常に動作していますので、もし上手く動かなかった場合は こちらの最新バージョンをお使いになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |