右クリックで一気に閉じてしまう
Posted: 2011年8月11日(木) 22:04
オプションに入り右クリックでタイトルへ
タイトルで右クリックで閉じる
という風にしたいのですが
オプションで右クリックで
一気に閉じてしまいます。
ご助力の程よろしくお願い致します。
タイトルで右クリックで閉じる
という風にしたいのですが
オプションで右クリックで
一気に閉じてしまいます。
ご助力の程よろしくお願い致します。
//main.cpp
#include "DxLib.h"
void graphic();
void day();
void jihou();
void title();
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
int screensofthandle, capsofthandle, softhandle, grhandle ;
int opacity, opacityadd ;
SetMainWindowText("clock");
ChangeWindowMode( TRUE );
SetWindowSizeExtendRate(0.5);
SetDrawScreen(DX_SCREEN_BACK);
SetWindowStyleMode(2);
if ( DxLib_Init( ) == -1 ) return -1;
if( ProcessMessage() == -1 ){
return 0; // エラーが起きたらループを抜ける
}
title();
DxLib_End( );
return 0;
}
//title.cpp
#include "DxLib.h"
#include <time.h>
#define FontSize 40
void day();
void jihou();
void graphic();
void title(){
int Cr_0,Cr_1,Cr_2 ;
int MouseInput=0,MouseX=0,MouseY=0;
int status=0;
// マウス状態管理用変数
int nClickNow = 0;
int nClickPrev = 0;
int nClickNow_R = 0;
int nClickPrev_R = 0;
// 描画する文字列のサイズを設定
SetFontSize( FontSize ) ;
MouseInput = GetMouseInput() ;
while (ProcessMessage() != -1 && ClearDrawScreen() != -1){
nClickNow = GetMouseInput();
nClickNow_R = GetMouseInput();
// マウス状態の更新
nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
nClickNow_R = (GetMouseInput() & MOUSE_INPUT_RIGHT);
if ( nClickNow_R != 0 && nClickNow_R != nClickPrev_R && (nClickNow_R & MOUSE_INPUT_RIGHT) != 0){ // 右クリックされたら終了させる
break;
}
// 白色の値を取得
Cr_0 = GetColor( 255 , 255 , 255 ) ;
Cr_1 = GetColor( 255 , 255 , 255 ) ;
Cr_2 = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 16 , 384 , "時刻" , Cr_0 );
DrawString( 176 , 384 , "日付/曜日" , Cr_1 );
DrawString( 416 , 384 , "オプション" , Cr_2 );
// マウスの入力を得る
//MouseInput = GetMouseInput() ;
// マウスの位置を取得
GetMousePoint( &MouseX , &MouseY ) ;
if (nClickNow != 0 && nClickNow != nClickPrev){
if(MouseX < 176 && MouseY > 384 && MouseY < 384 + FontSize){//時刻の色変更
Cr_0 = GetColor( 255 , 255 , 0 ) ;
day();
}
else if(MouseX >= 176 && MouseX < 416 && MouseY > 384 && MouseY < 384 + FontSize){//日付・曜日の色変更
Cr_1 = GetColor( 255 , 255 , 0 ) ;
jihou();
}
else if(MouseX >= 416 && MouseY > 384 && MouseY < 384 + FontSize){//オプションの色変更
Cr_2 = GetColor( 255 , 255 , 0 ) ;
graphic();
}
else
status = 0;
// 文字列の描画
DrawString( 16 , 384 , "時刻" , Cr_0 );
DrawString( 176 , 384 , "日付/曜日" , Cr_1 );
DrawString( 416 , 384 , "オプション" , Cr_2 );
// マウスの入力を得る
MouseInput = GetMouseInput() ;
}
else{
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] )day();
}
// 今回のクリック状態を保持する
nClickPrev = nClickNow;
nClickPrev_R = nClickNow_R;
}
}
//graphic.cpp
#include "DxLib.h"
#define FontSize 48
void graphic()
{
// 描画する文字列のサイズを設定
SetFontSize(FontSize);
// マウスを表示状態にする
SetMouseDispFlag(TRUE);
// 文字列表示色を白で初期化しておく
int nColor[4] = {GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF), GetColor(0xFF, 0xFF, 0xFF)};
// 曜日情報保持用配列
int nDayState[4] = {0, 0, 0, 0};
// マウス状態管理用変数
int nClickNow = 0;
int nClickPrev = 0;
int nClickNow_R = 0;
int nClickPrev_R = 0;
// メッセージ処理と、画面の消去処理を行いつつ処理ループ
while (ProcessMessage() != -1 && ClearDrawScreen() != -1)
{
nClickNow = GetMouseInput();
nClickNow_R = GetMouseInput();
// マウス状態の更新
nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
nClickNow_R = (GetMouseInput() & MOUSE_INPUT_RIGHT);
if ( nClickNow_R != 0 && nClickNow_R != nClickPrev_R && (nClickNow_R & MOUSE_INPUT_RIGHT) != 0){ // 右クリックされたら終了させる
break;
}
if (nClickNow != 0 && nClickNow != nClickPrev)
{
// マウスの位置を取得
int nMouseX = 0;
int nMouseY = 0;
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);
}
}
}
// 今回のクリック状態を保持する
nClickPrev = nClickNow;
nClickPrev_R = nClickNow_R;
// 文字列の描画
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();
}
}