点、線、円、四角形を選択するときに、
1度選択して1回描画してしまったら再度選択しなければ
描画されません。
1度選択したらほかのものを選択するまでは描画可能にするには
どのようにすればいいのでしょうか。
ヒントのみでもかまいません。
よろしくお願いします。
環境
Windows XP SP3
Visual Studio 2005
プログラム
#include "dxLib.h"
#include <math.h>
#define N 20 /*メニュー縦*/
#define M 55 /*メニュー横*/
#define COLOR_TYPE 4 /*色の種類*/
#define MENU_TYPE 6 /*メニューの種類*/
#define COLOR_PLACE 121 /*カラー変更Y座標上*/
int string_color;/*文字列色*/
int menu_color;/*メニュー背景色*/
int menu_out_color;/*メニュー枠色*/
char *string[/url]={"点","線","円","四角形","クリア","終了"};/*メニュー文字列*/
int color_type[COLOR_TYPE]; /*色*/
int loop_flag=0; /*終了フラグ*/
int color=0; /*色番号*/
int menu; /*現在のメニュー番号*/
void menu_display();
void Color(int m_x,int m_y);
void Menu(int menu);
void square();
void circle();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nShowCmd){
int i;/*ループ変数*/
int m_x,m_y; /*終了時マウス座標*/
/*初期化*/
SetMainWindowText("簡易ペイント");
ChangeWindowMode(TRUE);
SetBackgroundColor(255,255,255);
if(DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
/*色取得*/
string_color=GetColor(0,0,0);
menu_color =GetColor(127,127,127);
menu_out_color=GetColor(255,255,255);
color_type[0]=GetColor(0,0,0);
color_type[1]=GetColor(255,0,0);
color_type[2]=GetColor(0,255,0);
color_type[3]=GetColor(0,0,255);
while(ProcessMessage()==0){
while(1){
/*エラー*/
if(ProcessMessage()==-1){
DxLib_End();
exit(1);
}
menu_display();
if((GetMouseInput()&MOUSE_INPUT_LEFT)!=0){
/*マウス座標取得*/
GetMousePoint(&m_x,&m_y);
if(1<=m_x&&54>=m_x){
/*点*/
if(1<=m_y&&19>=m_y){
menu=0;
}
/*線*/
if(21<=m_y&&39>=m_y){
menu=1;
}
/*円*/
if(41<=m_y&&59>=m_y){
menu=2;
}
/*四角形*/
if(61<=m_y&&79>=m_y){
menu=3;
}
/*画面クリア*/
if(81<=m_y&&99>=m_y){
menu=4;
}
/*終了*/
if(101<=m_y&&119>=m_y){
menu=5;
}
if(120<=m_y&&199>=m_y){
menu=6;
Color(m_x,m_y);
}
if(menu!=6){
Menu(menu);
}
}
}
}
}
DxLib_End();
return 0;
}
/*メニュー表示関数*/
void menu_display(){
int i;
/*メニュー表示*/
for(i=0;i<MENU_TYPE;i++){
DrawBox(0,N*i,M,N*(i+1),menu_color,TRUE);
DrawBox(0,N*i,M,N*(i+1),menu_out_color,FALSE);
DrawString(2,N*i+2,string,string_color);
}
/*色表示*/
for(i=0;i<COLOR_TYPE;i++){
DrawBox(1,COLOR_PLACE+N*i,M-1,COLOR_PLACE+N*(i+1),color_type,TRUE);
}
ScreenFlip();
}
/*色変更関数*/
void Color(int m_x,int m_y){
/*黒*/
if(1<=m_x&&54>=m_x&&121<=m_y&&140>=m_y){
color=0;
}
/*赤*/
if(1<=m_x&&54>=m_x&&141<=m_y&&160>=m_y){
color=1;
}
/*緑*/
if(1<=m_x&&54>=m_x&&161<=m_y&&180>=m_y){
color=2;
}
/*青*/
if(1<=m_x&&54>=m_x&&181<=m_y&&2000>=m_y){
color=3;
}
}