画像のような設定(?)コンポーネント(?)を取り付けて
音をならす時刻・アラーム音・表示されるメッセージの変更、フォントの変更を可能にしたいと思いますが
DXライブラリで作る事は可能でしょうか?
開発の手掛かりになるような事でもありましたら教えて下さい
今考えているのはWinwosフォームアプリケーションで作成したタイマーを設定するプログラムをテキストファイルに出力して
タイマーのプログラムでテキストファイルの設定を読み込んで表示するのかなぁと考えているのですが、どうでしょうか
#pragma warning(disable : 4819)
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
//int SetAlwaysRunFlag(TRUE);//ウインドウが非アクティブの状態でも処理し続ける
//int StartTime; //起動時の時間を格納する変数
//int hour, minute, second; //表示する時間
//int set_hour = 0, set_minute = 0, set_second = 0; //セットする時間
int minute;
SetOutApplicationLogValidFlag(FALSE); //ログ出力をするか否か
ChangeWindowMode(TRUE); // ウインドウモードかフルスクリーンか
SetGraphMode(640, 480, 16); //画面サイズを設定します
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
SetBackgroundColor(0xFF, 0xFF, 0xFF); //背景の色を設定します
int moziNoIro = GetColor(0, 0, 0);
int keikaZikanNoIro = GetColor(217, 150, 148);
int nokoriZikanNoIro = GetColor(0, 176, 80);
int geeziNoKyoukaiSenNoIro = GetColor(56, 93, 138);
int migiNoSenNoIro = GetColor(106 ,106, 106);
int hidariNoSenNoIro = GetColor(63, 93, 141);
DATEDATA Date;
int A = 640; //最大の値
int B = 0; //最小の値
int C = 0;//???
int D = 0; //カウントダウン
int E = 0; //表示用
int X1 = 0;
int X2 = 640;
int Y1 = 50;
//int Y2 = 50;
int g_Lagefont = CreateFontToHandle("メイリオ", 50, -1, DX_FONTTYPE_ANTIALIASING);
int jikann;
int gogo;
//int Handle;//背景画像描画用
//int Handle_wav;
//bool SiteiSitaZikanNiNariKoukaonWoNarasita = false;
int maeNiOtoWoNarasitaZikantai = -1;
bool saisyoNoFureemuDeAru = true;
//Handle_wav = LoadSoundMem("test.wav"); // サウンド/up.wavをロードし、識別番号をHandleに格納
//StartTime = GetNowCount(); //起動時の時間を取得
while (1){
if (ProcessMessage() == -1)break; //ウインドウのメッセージを処理する
GetDateTime(&Date);
/*
second = (GetNowCount() - StartTime) / 1000; //秒に変換
minute = second / 60; //分に変換
second %= 60;
hour = minute / 6; //時間に変換
minute %= 6;
*/
/*
// テスト用
// 時刻を60倍の速さで進ませる
Date.Hour = Date.Min % 24;
Date.Min = Date.Sec;
Date.Sec= 0;
//*/
SetDrawScreen(DX_SCREEN_BACK); //描画する画面を設定します
ClearDrawScreen(); //画面に描画されている内容を消します
//時間に合わせてメッセージが変わる
const char* messages[18] = {
"",
" ",
" ",
" ",
" ",
" ", // 5
" ",
" ",
"おはようございます",
"おはようございます",
"今日も一日頑張りましょう!", // 10
"もうすぐお昼休みだ!",
"休憩時間です!",
"午後も頑張りましょう",
"こんにちは",
"こんにちは", // 15
"もうすぐで終わりです",
"お疲れ様でした"
};
// 基準時刻
int kizyunZikoku[12][2] = {
{ 9, 0}, { 9, 55},
{10, 0}, {10, 55},
{11, 0}, {12, 0},
{12, 40}, {13, 40},
{13, 45}, {14, 50},
{14, 55}, {16, 0}
};
// その基準時刻と次の基準時刻の間でゲージを動かすか
bool zikanWoHyouziSuru[12] = {
true, true,
true, true,
true, false,
false, true,
true, true,
true, false
};
// 今の時刻がどこに該当するかを計算する
int imaNoZikoku = 60 * (60 * Date.Hour + Date.Min) + Date.Sec;
int maeNoKizyunZikoku = 0;
int tugiNoKizyunZikoku = 0;
int imaNoZikantai = -1;
for (int i = 0; i < 12; i++) {
int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
if (imaNoZikoku < miteiruKizyunZikoku) {
if (i > 0) {
imaNoZikantai = i - 1;
maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]);
tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
}
break;
}
}
if (saisyoNoFureemuDeAru) {
maeNiOtoWoNarasitaZikantai = imaNoZikantai;
saisyoNoFureemuDeAru = false;
}
// 経過時間と残り時間を計算し、ゲージのパラメータを設定する
if(imaNoZikantai >= 0 && zikanWoHyouziSuru[imaNoZikantai]) {
// 表示する時間
minute = (imaNoZikoku - maeNoKizyunZikoku) / 60;
E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60;
D = (tugiNoKizyunZikoku - imaNoZikoku) / 60;
// ゲージのパラメータ
A = tugiNoKizyunZikoku;
B = maeNoKizyunZikoku;
C = imaNoZikoku;
} else {
// 表示する時間
minute = 99;
E = 99;
D = 99;
// ゲージのパラメータ
A = 640;
B = 0;
C = 0;
}
// 午前と午後を分ける
if (Date.Hour >= 13){
jikann = Date.Hour - 12;
gogo = 1;
}
else{
jikann = Date.Hour;
gogo = 0;
}
//壁紙
//Handle = LoadGraph("sora.jpg"); // 画像をロード
//DrawGraph(0, 0, Handle, TRUE); // データハンドルを使って画像を描画
DrawFormatStringToHandle(40, 180, keikaZikanNoIro, g_Lagefont, "経過時間"); //説明
DrawFormatStringToHandle(350, 180, nokoriZikanNoIro, g_Lagefont, "残り時間"); //説明
DrawFormatStringToHandle(70, 250, keikaZikanNoIro, g_Lagefont, "%d分", minute); //経過時間を描画します
DrawFormatStringToHandle(230, 250, moziNoIro, g_Lagefont, "/%d分/", E); //全体の時間を描画します
DrawFormatStringToHandle(450, 250, nokoriZikanNoIro, g_Lagefont, "%d分", D); //残り時間
/*
bool OtoWoNarasuBeki = false;
if (Date.Hour == 9 && Date.Min == 0){
//9時の時に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 9 && Date.Min == 55){
//9時55分に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 10 && Date.Min == 55){
//10時55に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 11 && Date.Min == 0){
//11時に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 12 && Date.Min == 0){
//12時に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 12 && Date.Min == 40){
//12時40に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 13 && Date.Min == 40){
//13時40に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 13 && Date.Min == 45){
//13時45分に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 14 && Date.Min == 50){
//14時50に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 14 && Date.Min == 55){
//14時55分に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 14 && Date.Min == 55){
//14時55に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
if (Date.Hour == 16 && Date.Min == 0){
//16時に音を鳴らす
//PlaySoundMem(Handle, DX_PLAYTYPE_BACK);
OtoWoNarasuBeki = true;
}
*/
if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
maeNiOtoWoNarasitaZikantai = imaNoZikantai;
//if (imaNoZikoku == maeNoKizyunZikoku) {
//if (!SiteiSitaZikanNiNariKoukaonWoNarasita) {
//SiteiSitaZikanNiNariKoukaonWoNarasita = true;
PlaySoundFile("test.wav", DX_PLAYTYPE_BACK);
//}
}
//else {
// SiteiSitaZikanNiNariKoukaonWoNarasita = false;
//}
DrawFormatStringToHandle(150, 400, moziNoIro, g_Lagefont, "%s%d時%d分", gogo ? "午後" : "午前", jikann, Date.Min);
/*
if (gogo = 0){
DrawFormatStringToHandle(150, 400, GetColor(255, 255, 255), g_Lagefont, "午前%d時%d分", jikann, Date.Min);
}
else{
DrawFormatStringToHandle(150, 400, GetColor(255, 255, 255), g_Lagefont, "午後%d時%d分", jikann, Date.Min);
}
*/
if (1 <= Date.Hour && Date.Hour <= 17) {
DrawFormatStringToHandle(0, 0, moziNoIro, g_Lagefont, messages[Date.Hour], D); //メッセージを表示
}
//ゲージの描画
DrawBox(0, 50, 640, 150, nokoriZikanNoIro, TRUE);
int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B);
//C = A - (hour * 360 + minute * 60 + second);
//if (C < B) C = B;
// 0 50 0 640 0 0 640 0
DrawBox(X1, Y1, geeziNoKawarime, 150, keikaZikanNoIro, TRUE);
DrawLine(0, Y1 , X2, Y1 , geeziNoKyoukaiSenNoIro);
DrawLine(0, Y1 - 1, X2, Y1 - 1, geeziNoKyoukaiSenNoIro);
DrawLine(0, Y1 + 1, X2, Y1 + 1, geeziNoKyoukaiSenNoIro);
DrawLine(0, 150 , X2, 150 , geeziNoKyoukaiSenNoIro);
DrawLine(0, 150 - 1, X2, 150 - 1, geeziNoKyoukaiSenNoIro);
DrawLine(0, 150 + 1, X2, 150 + 1, geeziNoKyoukaiSenNoIro);
DrawLine(geeziNoKawarime , Y1, geeziNoKawarime , 150, geeziNoKyoukaiSenNoIro);
DrawLine(geeziNoKawarime - 1, Y1, geeziNoKawarime - 1, 150, geeziNoKyoukaiSenNoIro);
DrawLine(geeziNoKawarime + 1, Y1, geeziNoKawarime + 1, 150, geeziNoKyoukaiSenNoIro);
DrawLine(0 , Y1, 0 , 150, hidariNoSenNoIro);
DrawLine(0 + 1, Y1, 0 + 1, 150, hidariNoSenNoIro);
DrawLine(0 + 2, Y1, 0 + 2, 150, hidariNoSenNoIro);
// 画面右の線の描画
DrawLine(640 - 3, 0, 640 - 3, 480, migiNoSenNoIro);
DrawLine(640 - 2, 0, 640 - 2, 480, migiNoSenNoIro);
DrawLine(640 - 1, 0, 640 - 1, 480, migiNoSenNoIro);
//Dに残り時間[分]を設定
//D = C / 60;
ScreenFlip(); //DX_SCREEN_BACKに描画した画像を表示します
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
可能だと思います。ノダッシー さんが書きました:前回作ったタイマーに
画像のような設定(?)コンポーネント(?)を取り付けて
音をならす時刻・アラーム音・表示されるメッセージの変更、フォントの変更を可能にしたいと思いますが
DXライブラリで作る事は可能でしょうか?
欲しい見た目のUIを自分で描画します。ノダッシー さんが書きました:開発の手掛かりになるような事でもありましたら教えて下さい
Winwosフォームアプリケーションではなく、Windowsフォームアプリケーションなら妥当だと思います。ノダッシー さんが書きました:今考えているのはWinwosフォームアプリケーションで作成したタイマーを設定するプログラムをテキストファイルに出力して
タイマーのプログラムでテキストファイルの設定を読み込んで表示するのかなぁと考えているのですが、どうでしょうか