マウスをクリックする度に描画する文字を変更させたいです。
Posted: 2011年7月29日(金) 03:16
//メイン関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
while(1){
graphic();
}
return 0 ;
}
//描画関数
#include "DxLib.h"
#define FontSize 48
void graphic(){
int Cr_0,Cr_1,Cr_2,Cr_3;
int MouseInput=0,MouseX=0,MouseY=0;
int click_count=0;
int now = 0, last = 0;
// 描画する文字列のサイズを設定
SetFontSize( FontSize ) ;
// マウスを表示状態にする
SetMouseDispFlag( TRUE ) ;
MouseInput = GetMouseInput() ;
while( ( MouseInput & MOUSE_INPUT_LEFT ) == 0 ){
if( ProcessMessage() == -1 ){
break ; // エラーが起きたらループから抜ける
}
// 白色の値を取得
Cr_0 = GetColor( 255 , 255 , 255 ) ;
Cr_1 = GetColor( 255 , 255 , 255 ) ;
Cr_2 = GetColor( 255 , 255 , 255 ) ;
Cr_3 = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 64 , 64 , "燃えるゴミ" , Cr_0 );
DrawString( 64 , 128 , "燃えないゴミ" , Cr_1 );
DrawString( 64 , 192 , "資源ゴミ" , Cr_2 );
DrawString( 64 , 256 , "再生日切替" , Cr_3 );
DrawString( 448 , 64 , "日曜日" , Cr_0 );
DrawString( 448 , 128 , "月曜日" , Cr_1 );
DrawString( 448 , 192 , "火曜日" , Cr_2 );
DrawString( 448 , 256 , "当日" , Cr_3 );
// マウスの入力を得る
MouseInput = GetMouseInput() ;
}
//ClearDrawScreen() ;//グラフィック(文字)を消す
// マウスの位置を取得
GetMousePoint( &MouseX , &MouseY ) ;
// マウスの入力を得る
MouseInput = GetMouseInput() ;
while(( MouseInput & MOUSE_INPUT_LEFT ) != 0){
if( ProcessMessage() == -1 ){
break ; // エラーが起きたらループから抜ける
}
now = 1;//今のフレームのマウスの状態 押しているので1
if(!last && now ){
if(MouseY < 64 + FontSize){//燃えるゴミの色変更
Cr_0 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 64 , "燃えるゴミ" , Cr_0 );
switch(click_count % 7){
case 0:
DrawString( 448 , 64 , "日曜日" , Cr_0 );
break;
case 1:
DrawString( 448 , 64 , "月曜日" , Cr_0 );
break;
case 2:
DrawString( 448 , 64 , "火曜日" , Cr_0 );
break;
case 3:
DrawString( 448 , 64 , "水曜日" , Cr_0 );
break;
case 4:
DrawString( 448 , 64 , "木曜日" , Cr_0 );
break;
case 5:
DrawString( 448 , 64 , "金曜日" , Cr_0 );
break;
case 6:
DrawString( 448 , 64 , "土曜日" , Cr_0 );
break;
}
}
else if(MouseY < 128 + FontSize ){//燃えないゴミの色変更
Cr_1 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 128 , "燃えないゴミ" , Cr_1 );
switch(click_count % 7){
case 0:
DrawString( 448 , 128 , "日曜日" , Cr_1 );
break;
case 1:
DrawString( 448 , 128 , "月曜日" , Cr_1 );
break;
case 2:
DrawString( 448 , 128 , "火曜日" , Cr_1 );
break;
case 3:
DrawString( 448 , 128 , "水曜日" , Cr_1 );
break;
case 4:
DrawString( 448 , 128 , "木曜日" , Cr_1 );
break;
case 5:
DrawString( 448 , 128 , "金曜日" , Cr_1 );
break;
case 6:
DrawString( 448 , 128 , "土曜日" , Cr_1 );
break;
}
}
else if(MouseY < 192 + FontSize ){//資源ゴミの色変更
Cr_2 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 192 , "資源ゴミ" , Cr_2 );
switch(click_count % 7){
case 0:
DrawString( 448 , 192 , "日曜日" , Cr_2 );
break;
case 1:
DrawString( 448 , 192 , "月曜日" , Cr_2 );
break;
case 2:
DrawString( 448 , 192 , "火曜日" , Cr_2 );
break;
case 3:
DrawString( 448 , 192 , "水曜日" , Cr_2 );
break;
case 4:
DrawString( 448 , 192 , "木曜日" , Cr_2 );
break;
case 5:
DrawString( 448 , 192 , "金曜日" , Cr_2 );
break;
case 6:
DrawString( 448 , 192 , "土曜日" , Cr_2 );
break;
}
}
else if(MouseY < 256 + FontSize){
Cr_3 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 256 , "再生日切替" , Cr_3 );
switch(click_count % 7){
case 0:
DrawString( 448 , 256 , "当日" , Cr_3 );
break;
case 1:
DrawString( 448 , 256 , "翌日" , Cr_3 );
break;
}
}
}
last = now;//前のフレームのマウスの状態を更新
click_count++;//押された時のみカウント
// マウスの入力を得る
MouseInput = GetMouseInput() ;
}
now = 0;//押していないので0
last= 0;
ClearDrawScreen() ;//グラフィック(文字)を消す
}
下記の様にwhileを追加してみても駄目でした。
何卒よろしくお願いします。
MouseInput = GetMouseInput() ;
while( ( MouseInput & MOUSE_INPUT_RIGHT ) == 0 ){//ここを追加
while(( MouseInput & MOUSE_INPUT_LEFT ) != 0){
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
while(1){
graphic();
}
return 0 ;
}
//描画関数
#include "DxLib.h"
#define FontSize 48
void graphic(){
int Cr_0,Cr_1,Cr_2,Cr_3;
int MouseInput=0,MouseX=0,MouseY=0;
int click_count=0;
int now = 0, last = 0;
// 描画する文字列のサイズを設定
SetFontSize( FontSize ) ;
// マウスを表示状態にする
SetMouseDispFlag( TRUE ) ;
MouseInput = GetMouseInput() ;
while( ( MouseInput & MOUSE_INPUT_LEFT ) == 0 ){
if( ProcessMessage() == -1 ){
break ; // エラーが起きたらループから抜ける
}
// 白色の値を取得
Cr_0 = GetColor( 255 , 255 , 255 ) ;
Cr_1 = GetColor( 255 , 255 , 255 ) ;
Cr_2 = GetColor( 255 , 255 , 255 ) ;
Cr_3 = GetColor( 255 , 255 , 255 ) ;
// 文字列の描画
DrawString( 64 , 64 , "燃えるゴミ" , Cr_0 );
DrawString( 64 , 128 , "燃えないゴミ" , Cr_1 );
DrawString( 64 , 192 , "資源ゴミ" , Cr_2 );
DrawString( 64 , 256 , "再生日切替" , Cr_3 );
DrawString( 448 , 64 , "日曜日" , Cr_0 );
DrawString( 448 , 128 , "月曜日" , Cr_1 );
DrawString( 448 , 192 , "火曜日" , Cr_2 );
DrawString( 448 , 256 , "当日" , Cr_3 );
// マウスの入力を得る
MouseInput = GetMouseInput() ;
}
//ClearDrawScreen() ;//グラフィック(文字)を消す
// マウスの位置を取得
GetMousePoint( &MouseX , &MouseY ) ;
// マウスの入力を得る
MouseInput = GetMouseInput() ;
while(( MouseInput & MOUSE_INPUT_LEFT ) != 0){
if( ProcessMessage() == -1 ){
break ; // エラーが起きたらループから抜ける
}
now = 1;//今のフレームのマウスの状態 押しているので1
if(!last && now ){
if(MouseY < 64 + FontSize){//燃えるゴミの色変更
Cr_0 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 64 , "燃えるゴミ" , Cr_0 );
switch(click_count % 7){
case 0:
DrawString( 448 , 64 , "日曜日" , Cr_0 );
break;
case 1:
DrawString( 448 , 64 , "月曜日" , Cr_0 );
break;
case 2:
DrawString( 448 , 64 , "火曜日" , Cr_0 );
break;
case 3:
DrawString( 448 , 64 , "水曜日" , Cr_0 );
break;
case 4:
DrawString( 448 , 64 , "木曜日" , Cr_0 );
break;
case 5:
DrawString( 448 , 64 , "金曜日" , Cr_0 );
break;
case 6:
DrawString( 448 , 64 , "土曜日" , Cr_0 );
break;
}
}
else if(MouseY < 128 + FontSize ){//燃えないゴミの色変更
Cr_1 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 128 , "燃えないゴミ" , Cr_1 );
switch(click_count % 7){
case 0:
DrawString( 448 , 128 , "日曜日" , Cr_1 );
break;
case 1:
DrawString( 448 , 128 , "月曜日" , Cr_1 );
break;
case 2:
DrawString( 448 , 128 , "火曜日" , Cr_1 );
break;
case 3:
DrawString( 448 , 128 , "水曜日" , Cr_1 );
break;
case 4:
DrawString( 448 , 128 , "木曜日" , Cr_1 );
break;
case 5:
DrawString( 448 , 128 , "金曜日" , Cr_1 );
break;
case 6:
DrawString( 448 , 128 , "土曜日" , Cr_1 );
break;
}
}
else if(MouseY < 192 + FontSize ){//資源ゴミの色変更
Cr_2 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 192 , "資源ゴミ" , Cr_2 );
switch(click_count % 7){
case 0:
DrawString( 448 , 192 , "日曜日" , Cr_2 );
break;
case 1:
DrawString( 448 , 192 , "月曜日" , Cr_2 );
break;
case 2:
DrawString( 448 , 192 , "火曜日" , Cr_2 );
break;
case 3:
DrawString( 448 , 192 , "水曜日" , Cr_2 );
break;
case 4:
DrawString( 448 , 192 , "木曜日" , Cr_2 );
break;
case 5:
DrawString( 448 , 192 , "金曜日" , Cr_2 );
break;
case 6:
DrawString( 448 , 192 , "土曜日" , Cr_2 );
break;
}
}
else if(MouseY < 256 + FontSize){
Cr_3 = GetColor( 255 , 255 , 0 ) ;
DrawString( 64 , 256 , "再生日切替" , Cr_3 );
switch(click_count % 7){
case 0:
DrawString( 448 , 256 , "当日" , Cr_3 );
break;
case 1:
DrawString( 448 , 256 , "翌日" , Cr_3 );
break;
}
}
}
last = now;//前のフレームのマウスの状態を更新
click_count++;//押された時のみカウント
// マウスの入力を得る
MouseInput = GetMouseInput() ;
}
now = 0;//押していないので0
last= 0;
ClearDrawScreen() ;//グラフィック(文字)を消す
}
下記の様にwhileを追加してみても駄目でした。
何卒よろしくお願いします。
MouseInput = GetMouseInput() ;
while( ( MouseInput & MOUSE_INPUT_RIGHT ) == 0 ){//ここを追加
while(( MouseInput & MOUSE_INPUT_LEFT ) != 0){