画像が読み込まれない

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

画像が読み込まれない

#1

投稿記事 by s707 » 14年前

グローバル変数の配列であるGHandle[50]に画像を読み込ませて
draw_clock関数とtitle関数で画像を出力させてます。

デバックしてみると、
draw_clock関数の時はGHandleの値が変化していますが
title関数の時はGHandleの値が変化していません

ご助力の程、よろしくお願いいたします。

コード:

//draw_clock.h
void draw_clock();
void Load();
static int GHandle[50];

//draw_clock.cpp
#include <time.h>
#include "DxLib.h"
#include "draw_clock.h"
#pragma warning ( disable : 4996 )

#define radius 96 //文字盤の半径 
#define X 220
#define Y 160
#define FontSize 16
#define PI	3.1415926535897932384626433832795f

void draw_clock(){
	time_t timer;
	struct tm *local;
	timer = time(NULL);//現在時刻を取得
	local = localtime(&timer); //地方時に変換

	int needle_x = X + radius;
	int needle_y = Y + radius;
	int lock_plate_x = X + radius - 4;
	int lock_plate_y = Y + radius - 4;

	// 読みこんだグラフィックを回転描画
	DrawGraph( X , Y , GHandle[0] , TRUE ) ;//文字盤
	DrawRotaGraph2( needle_x, needle_y, 0, 0, 1.0,( (local->tm_hour%12)*30 + (local->tm_min/2) + 180)*PI/180, GHandle[1], TRUE ) ;//短針  時間*30度%12時間 + 分/2   1分毎に0.5度づつ進む為/2
	DrawRotaGraph2( needle_x, needle_y, 0, 0, 1.0,( (local->tm_min*6) + 180)*PI/180, GHandle[2], TRUE ) ;//長針
	DrawRotaGraph2( needle_x, needle_y, 0, 0, 1.0,( (local->tm_sec*6) + 180)*PI/180, GHandle[3], TRUE ) ;//秒針
}

void Load(){
	GHandle[0] = LoadGraph( "Resourse./PNG/文字盤.png" );
	GHandle[1] = LoadGraph( "Resourse./PNG/短針.png");
	GHandle[2] = LoadGraph( "Resourse./PNG/長針.png" );
	GHandle[3] = LoadGraph( "Resourse./PNG/秒針.png");
	LoadDivGraph( "Resourse./PNG/メニューとオプション.png" , 18 , 2 , 9 , 128 , 16 , GHandle + 4 ) ;
}

//title.cpp
#include "DxLib.h"
#include "draw_clock.h"
#define  FontSize 40
#define X 220
#define Y 160

int title(int menu_number){
	int status = 0;

	if(menu_number != 3){//オプション以外
		int menu_position_x = X + 192;
		
		for(int i=4; i < 10; i += 2){
			DrawGraph( menu_position_x , Y + (i-4)*16  , GHandle[i] , TRUE ) ;//メニューの表示
		}

		int Cr_0,Cr_1,Cr_2 ;
		int	MouseInput=0,MouseX=0,MouseY=0;

		// 描画する文字列のサイズを設定
		SetFontSize( FontSize ) ;

		// 白色の値を取得
		Cr_0 = GetColor( 0xff , 0xff , 0xff ) ;
		Cr_1 = GetColor( 0xff , 0xff , 0xff ) ;
		Cr_2 = GetColor( 0xff , 0xff , 0xff ) ;

		// 文字列の描画
		DrawString( 16 , 384 , "時刻" , Cr_0 );
		DrawString( 176 , 384 , "日付/曜日" , Cr_1 );
		DrawString( 416 , 384 , "オプション" , Cr_2 );

		// マウスの位置を取得
		GetMousePoint( &MouseX , &MouseY ) ;

		if(MouseX > 20 && MouseX < 176 && MouseY > 384 && MouseY < 384 + FontSize){//時刻の色変更
			Cr_0 = GetColor( 0xff , 0xff , 0 ) ;
			status = 1;
		}
		else if(MouseX >= 176 && MouseX < 416 && MouseY > 384  && MouseY < 384 + FontSize){//日付・曜日の色変更
			Cr_1 = GetColor( 0xff , 0xff , 0 ) ;
			status = 2;
		}
		else if(MouseX >= 416 && MouseY > 384  && MouseY < 384 + FontSize){//オプションの色変更
			Cr_2 = GetColor( 0xff , 0xff , 0 ) ;
			status = 3;
		}
		else
			status = 0;
		// 文字列の描画
		DrawString( 16 , 384 , "時刻" , Cr_0 );
		DrawString( 176 , 384 , "日付/曜日" , Cr_1 );
		DrawString( 416 , 384 , "オプション" , Cr_2 );		
	}
	return status;
}


//main.cpp
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"

void jihou(struct dayData* day);
void plan(struct dayData* day);
void option(struct dayData* day);
void option_draw();
void Time(struct dayData* day);
void date(struct dayData* day);
void load_day(int,struct dayData* day);
void save_day(int,struct dayData* day);
void draw_clock();
int title(int);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
	struct dayData day[100];
	// マウス状態管理用変数
	int nClickNow = 0 , nClickPrev = 0;
	int nClickNow_R = 0 , nClickPrev_R = 0;
	int nClickR_Count = 0;

	int status = 0,temp = 0;
	bool title_flg = false;

	SetMainWindowText("clock");
	ChangeWindowMode( TRUE );

	// ウインドウの透過色モードON
	SetUseBackBufferTransColorFlag( TRUE ) ;

	SetDrawScreen(DX_SCREEN_BACK);
	SetWindowStyleMode(2);
	//	SetWindowPosition(1200, 720 ) ;

	if ( DxLib_Init( ) == -1 ) return -1;

	Load();
	load_day(status,day);//日にちを読み込む
	plan(day);//予定を音声再生する

	while (ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){
		if(GetMouseInput() & MOUSE_INPUT_LEFT) {			
			SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);//ウインドウを移動させる為、ウインドウ枠をクリックしたと思わせる
		}
		
		jihou(day);
		
		draw_clock();
		// マウス状態の更新
		nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
		nClickNow_R = (GetMouseInput() & MOUSE_INPUT_RIGHT);

		if(	nClickNow_R )nClickR_Count++;//右クリックを押しているときはカウントアップ
		else{nClickR_Count = 0;}//それ以外ではカウントを0にする

		if (!status && nClickR_Count == 1){
			break;
		}

		if ( nClickNow_R && !nClickPrev_R){
			status = 0;
			title_flg = false;
			temp = 0;
		}

		if(title_flg)temp = title(status);

		if( nClickNow && !nClickPrev){
			if(temp)status = temp;
			
			if(status == 0){
				title_flg = true;
				status = 4;
			}
			else if(temp == 1){
				Time(day);
			}
			else if(temp == 2 ){
				date(day);
			}
			else if(status == 3){
				option(day);
				save_day(status,day);//日にちを書き込む
				load_day(status,day);//変更された日にちを読み込む
			}
		}

		if(status == 3){
			option_draw();
		}

		// 今回のクリック状態を保持する
		nClickPrev = nClickNow;
		nClickPrev_R = nClickNow_R;
	}

	DxLib_End(); 
	return 0;
}




アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 画像が読み込まれない

#2

投稿記事 by softya(ソフト屋) » 14年前

static int GHandle[50];だとdraw_clock.cppとtitle.cppにGHandleと言う名前の別変数が有ることになります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

s707

Re: 画像が読み込まれない

#3

投稿記事 by s707 » 14年前

softya(ソフト屋)様、ご返信ありがとうございます。

参考書を確認し
draw_clock.cppにて int GHandle[50];という変数を宣言
draw_clock.hでextern int GHandle[50]; とした所、解決しました。

今回もありがとうございます。

閉鎖

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