该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二楼代码,用鼠标左键选色,填色。用鼠标右键退出。下面是代码及注释
#include
void gezi();//函数声明
int fill();//函数声明
int main(void)
{
initgraph(640, 480);
gezi();//调用画格子和调色板函数
fill();//调用鼠标控制填色函数
closegraph();
}
void gezi()//画格子及调色板函数
{
int color[9] = { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, YELLOW, WHITE };//调色板拥有的颜色,可以自己增加
setlinecolor(LIGHTGRAY);//设置格子边框颜色
for (int i = 0; i <= 16; i++)//画格子
{
line(i * 30 + 80, 40, i * 30 + 80, 280);//画17条竖线
if (i <= 8)
line(80, i * 30 + 40, 560, i * 30 + 40);//画9条横线
}
for (int i = 0; i <= 9; i++)//画调色板的格子
{
line(i * 50 + 95, 350, i * 50 + 95, 400);//画10条竖线
if (i < 2)
{
line(95, i * 50 + 350, 545, i * 50 + 350);//画2条横线
}
}
for (int i = 0; i < 9; i++)//填充调色板格子
{
setfillcolor(color[i]);//设置填充颜色
floodfill(i * 50 + 100, 375, LIGHTGRAY);//填充颜色
}
}
int fill()
{
MOUSEMSG m;
int whichcolor=BLACK;//颜色值,默认黑色
while (true)
{
m = GetMouseMsg();
if (m.uMsg == WM_LBUTTONDOWN)//判断左键是否按下
{
if (m.y >= 350 && m.y <= 400)//判断鼠标是否位于调色板区域
{
whichcolor= getpixel(m.x,m.y);//返回该点的颜色
}
if (m.y >= 40 && m.y <=280)//判断鼠标是否位于待填色格子区域
{
setfillcolor(whichcolor);//设置填充颜色
floodfill(m.x, m.y, LIGHTGRAY);//填充颜色
}
}
if (m.uMsg == WM_RBUTTONDOWN)//判断是否按下右键
return(0);//结束函数
}
}