データのロード、セーブが出来ない (.iniのファイル)
Posted: 2011年8月25日(木) 13:08
オプション関数で曜日を変更するプログラムです。
曜日情報をロード、セーブしたいのですが
.iniファイルの更新日時や内容から見ても
.iniにアクセスしている様子がありません。
ご助力の程、よろしくお願いします。
曜日情報をロード、セーブしたいのですが
.iniファイルの更新日時や内容から見ても
.iniにアクセスしている様子がありません。
ご助力の程、よろしくお願いします。
//main.cpp
#include "DxLib.h"
extern struct dayData{
char name[9];
char number[6];
} ;
void option(struct dayData* day);
void time();
void date();
void load_day(struct dayData* day);
void save_day(struct dayData* day);
int title(int);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
struct dayData day[7];
// マウス状態管理用変数
int nClickNow = 0 , nClickPrev = 0;
int nClickNow_R = 0 , nClickPrev_R = 0;
int nClickR_Count = 0;
int status = 0;
SetMainWindowText("clock");
ChangeWindowMode( TRUE );
SetWindowSizeExtendRate(0.5);
SetDrawScreen(DX_SCREEN_BACK);
SetWindowStyleMode(2);
if ( DxLib_Init( ) == -1 ) return -1;
while (1){
load_day(day);//日にちを読み込む
// マウス状態の更新
nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
nClickNow_R = (GetMouseInput() & MOUSE_INPUT_RIGHT);
if( nClickNow_R )nClickR_Count++;//右クリックを押しているときはカウントアップ
else{nClickR_Count = 0;}//それ以外ではカウントを0にする
if ( ProcessMessage() == -1 || !status && nClickR_Count == 1){ // プロセスメッセージは1ループ毎に1回必要
break;
}
if ( nClickNow_R && !nClickPrev_R){
status = 0;
ClearDrawScreen();
}
int temp = title(status);
if( nClickNow && !nClickPrev){
if(temp)
status = temp;
if(status == 1){
time();
status = 0;
}
else if(status == 2 ){
date();
status = 0;
}
else if(status){
option(day);
save_day(day);//日にちを書き込む
}
}
// 今回のクリック状態を保持する
nClickPrev = nClickNow;
nClickPrev_R = nClickNow_R;
}
DxLib_End();
return 0;
}
//title.cpp
#include "DxLib.h"
#include <time.h>
#define FontSize 40
int title(int hyouji_hantei){
int status=0;
if(hyouji_hantei != 3){
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 );
}
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
int min[2],sec[2];
min[0] = (local->tm_min / 10)%10;
min[1] = local->tm_min % 10;
sec[0] = (local->tm_sec / 10)%10;
sec[1] = local->tm_sec % 10;
if( !min[0] && !min[1] && !sec[0] && !sec[1] && !status )status = 1;//一時間毎に時刻を読む
return status;
}
//option.cpp
#include "DxLib.h"
#define FontSize 48
struct dayData{
char name[9];
char number[6];
} ;
void option(struct dayData* day)
{
// 描画する文字列のサイズを設定
SetFontSize(FontSize);
// マウスを表示状態にする
SetMouseDispFlag(TRUE);
// 文字列表示色を白で初期化しておく
int nColor[4] = {GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF)};
int nMouseX = 0;
int nMouseY = 0;
// 曜日情報保持用配列
static int nDayState[4] = {0, 0, 0, 0};
ClearDrawScreen();
// マウスの位置を取得
GetMousePoint(&nMouseX, &nMouseY);
// 文字の色と曜日の更新
for (int i = 0; i < 4; ++i)
{
// クリックされた箇所の判定
if (nMouseY > (64 * i) + FontSize && nMouseY < (64 * (i + 1) + FontSize))
{
// 色を変更して、曜日を1つ進める
nColor[i] = GetColor(0xFF, 0xFF, 0x00);
// 再生日切替の場合は0~1でループさせ、それ以外は0~6でループさせる
nDayState[i] = (nDayState[i] + 1) % ((i == 3) ? 2 : 7);
}
else
{
// 今回変更した箇所以外の色を戻す
nColor[i] = GetColor(0xFF, 0xFF, 0xFF);
}
}
// 文字列の描画
const char* pszDay1[] = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"};
const char* pszDay2[] = {"当日", "翌日"};
DrawString( 64, 64, "燃えるゴミ", nColor[0]);
DrawString( 64, 128, "燃えないゴミ", nColor[1]);
DrawString( 64, 192, "資源ゴミ", nColor[2]);
DrawString( 64, 256, "再生日切替", nColor[3]);
DrawString(448, 64, pszDay1[nDayState[0]], nColor[0]);
DrawString(448, 128, pszDay1[nDayState[1]], nColor[1]);
DrawString(448, 192, pszDay1[nDayState[2]], nColor[2]);
DrawString(448, 256, pszDay2[nDayState[3]], nColor[3]);
ScreenFlip();
for (int i = 0; i < 4; i++){//燃える 燃えない 資源 再生日切り替えの4つのナンバーを更新
( day + i ) -> number[0] = nDayState[i];
}
}
//-----------------------------------------------------------------------------
// Name: load_day()
// Desc: 日にち読み込み関数
//-----------------------------------------------------------------------------
void load_day(struct dayData* day){
char key1[7]="name_0";
char key2[8]="day_0";
//INIファイル読み込み
for(int i=0;i<4;i++){//燃える 燃えない 資源 再生日切り替えの4つ
GetPrivateProfileString("Day",key1,"--------", (day+i) -> name,9,"Day.INI");
GetPrivateProfileString("Day",key2,"00000" , (day+i) -> number,6,"Day.INI");
key1[5]++;//アンダーラインの後ろの数字をインクリメント
key2[4]++;
}
}
//-----------------------------------------------------------------------------
// Name: save_day()
// Desc: 日にち書き込み関数
//-----------------------------------------------------------------------------
void save_day(struct dayData* day){
char key1[7]="name_0";
char key2[8]="day_0";
//INIファイル書き込み
for(int i=0;i<4;i++){//燃える 燃えない 資源 再生日切り替えの4つ
WritePrivateProfileString("Day",key1, (day+i) -> name,"Day.INI");
WritePrivateProfileString("Day",key2, (day+i) -> number,"Day.INI");
key1[5]++;
key2[4]++;
}
}