VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 668|回复: 1

VS2013制作电子相册,按钮往左后退怎么处理

[复制链接]
88_avatar_middle
最佳答案
0 
在线会员 发表于 2020-9-18 02:19:55 | 显示全部楼层 |阅读模式
#define _CRT_SECURE_NO_WARNINGS //宏定义
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")//静态库资源

IMAGE backImg;         //存放背景
IMAGE girlBig[20];      //存放20张大图片
IMAGE girlSmall[20];    //存放20张小图片
int smallNum = 0;      //从第0张开始,记录翻看照片的页码

void loadResource()
{
        mciSendString("open Promise.mp3 alias music", 0, 0, 0);
        mciSendString("play music repeat", 0, 0, 0);
        loadimage(&backImg, "6.gif");
        for (int i = 0; i < 21; i++)
        {
                char fileName[21] = "";
                //0.jpg 1.jpg  2.jpg 3.jpg 4.jpg 5.jpg ....
                sprintf(fileName, "%d.jpg", i);
                loadimage(girlBig+i,fileName,420,350);
                loadimage(girlSmall+i,fileName,150,150);
        }
}

void drawButton(int x,int y,char postion) // L <---  ---> R
{
        setfillcolor(RED);//设置填充实心圆颜色
        solidcircle(x, y, 17);//以x,y为圆心坐标,半径为17mm的圆
        setlinecolor(WHITE);//设置线体颜色
        setlinestyle(PS_SOLID, 3, 0);//设置线的格式
        if (postion =='r')
        {
                circle(x, y, 12);
                line(x - 10, y, x + 10, y);
                line(x - 1, y - 7, x + 10, y);
                line(x - 1, y + 7, x + 10, y);
        }
        else if (postion =='l')
        {
                circle(x, y, 12);
                line(x - 10, y , x + 10, y);
                line(x - 10, y , x + 1, y-7);
                line(x - 10, y , x + 1, y+7);
        }
}

void drawMap()
{
        //画背景
        putimage(0, 0, &backImg);
        //画小图,第0张和第1张
        putimage(67,135,girlSmall+0);
        putimage(67,305,girlSmall+1);
        //画大图
        putimage(269,100,girlBig+0);
        //画按钮
        drawButton(180, 112, 'r');//右边按钮
        drawButton(110, 112, 'l');//左边按钮
        //写文字
        settextcolor(BLUE);//设置文字颜色为蓝色
        settextstyle(25, 0, "Inkfree");//设置字体大小与字体规格形式
        setbkmode(TRANSPARENT);//去除文字背景,设置背景为透明
        outtextxy(350, 50, "Hello Word,Grateful");//字体内容和位置
}

void clickButtuon(int x, int y, char postion)//鼠标点击位置及方向
{
        setfillcolor(RED);//设置填充实心圆颜色
        solidcircle(x, y, 17);//以x,y为圆心坐标,半径为17mm的圆
        setlinecolor(GREEN);//设置线体颜色
        setlinestyle(PS_SOLID, 3, 0);//设置线的格式
        if (postion == 'r')
        {
                circle(x, y, 12);
                line(x - 10, y, x + 10, y);
                line(x - 1, y - 7, x + 10, y);
                line(x - 1, y + 7, x + 10, y);
        }
        else if (postion == 'l')
        {
                circle(x, y, 12);
                line(x - 10, y, x + 10, y);
                line(x - 10, y, x + 1, y - 7);
                line(x - 10, y, x + 1, y + 7);
        }
}

void drawRect(int flag)
{
        if (flag == 1)
        {
                setlinecolor(BLUE);
                //画小图,第0张
                rectangle(67-3,135-3,67+150+3,135+150+3);//第0张图片矩形
                setlinecolor(WHITE);
                rectangle(67 - 3, 305 - 3, 67 + 150 + 3, 305 + 150 + 3);//第1张图片矩形
        }
        else if (flag == 2)
        {
                setlinecolor(BLUE);
                //画小图,第1张
                rectangle(67 - 3, 305 - 3, 67 + 150 + 3, 305 + 150 + 3);//第1张图片矩形
                setlinecolor(WHITE);
                rectangle(67 - 3, 135 - 3, 67 + 150 + 3, 135 + 150 + 3);
        }
}

void userMoveMouse()
{
        MOUSEMSG m;
        int flag = 1;
        while (1)
        {
                m = GetMouseMsg();
                switch (m.uMsg)
                {
                case WM_MOUSEMOVE://鼠标移动时
                        //鼠标是否在按钮上:判断鼠标是否在圆内,用圆的标准方程计算
                        if (sqrt((double)(m.x - 180)*(m.x - 180) + (m.y - 112)*(m.y - 112))<17)//右边
                        {
                                clickButtuon(180, 112, 'r');
                        }
                        else if (sqrt((double)(m.x - 110)*(m.x - 110) + (m.y - 112)*(m.y - 112))<17)//左边
                        {
                                clickButtuon(110, 112, 'l');
                        }
                        else
                        {
                                drawButton(180, 112, 'r');//右边按钮
                                drawButton(110, 112, 'l');//左边按钮
                        }
                       
                        break;
                case WM_LBUTTONDOWN://鼠标左键按动时
                        if (sqrt((double)(m.x - 180)*(m.x - 180) + (m.y - 112)*(m.y - 112)) < 17)//右边
                        {
                                drawRect(flag);
                                //putimage(269,100,girlBig+0);大照片坐标位置
                                if (smallNum==20)//当图片全部放完,循环一次
                                {
                                        putimage(67, 135, girlSmall + 0);//显示小照片第0张
                                        putimage(67, 305, girlSmall + 1);//显示小照片第1张
                                        smallNum = 0;
                                }
                                else if (smallNum == 2)
                                {
                                        putimage(67, 135, girlSmall + 2);//显示小照片第2张
                                        putimage(67, 305, girlSmall + 3);//显示小照片第3张                       
                                }
                                else if (smallNum == 4)
                                {
                                        putimage(67, 135, girlSmall + 4);//显示小照片第4张
                                        putimage(67, 305, girlSmall + 5);//显示小照片第5张
                                }
                                else if (smallNum == 6)
                                {
                                        putimage(67, 135, girlSmall + 6);//显示小照片第6张
                                        putimage(67, 305, girlSmall + 7);//显示小照片第7张
                                }
                                else if (smallNum == 8)
                                {
                                        putimage(67, 135, girlSmall + 8);//显示小照片第8张
                                        putimage(67, 305, girlSmall + 9);//显示小照片第9张
                                }
                                else if (smallNum == 10)
                                {
                                        putimage(67, 135, girlSmall + 10);//显示小照片第10张
                                        putimage(67, 305, girlSmall + 11);//显示小照片第11张
                                }
                                else if (smallNum == 12)
                                {
                                        putimage(67, 135, girlSmall + 12);//显示小照片第12张
                                        putimage(67, 305, girlSmall + 13);//显示小照片第13张
                                }
                                else if (smallNum == 14)
                                {
                                        putimage(67, 135, girlSmall + 14);//显示小照片第14张
                                        putimage(67, 305, girlSmall + 15);//显示小照片第15张
                                }
                                else if (smallNum == 16)
                                {
                                        putimage(67, 135, girlSmall + 16);//显示小照片第16张
                                        putimage(67, 305, girlSmall + 17);//显示小照片第17张
                                }
                                else if (smallNum == 18)
                                {
                                        putimage(67, 135, girlSmall + 18);//显示小照片第18张
                                        putimage(67, 305, girlSmall + 19);//显示小照片第19张
                                }
               
                                putimage(269, 100, girlBig + smallNum);
                                smallNum++;
                        }
                        else if (sqrt((double)(m.x - 110)*(m.x - 110) + (m.y - 112)*(m.y - 112)) < 17)//左边
                        {
                                drawRect(flag);
                        //按钮往左后退,按第一次小图片篮筐选中第0张,小图片栏显示第0张和第1张小图片,大图片对应选中的篮筐小图片第0张
                           再往后退一次,按第2次 小图片篮筐选中第19张,小图片栏显示第19张/第0张,大图片对应选中的篮筐小图片第19张
                                                   按第3次小图片篮筐选中第18张,小图片栏显示第18张/第19张,大图片对应选中的篮筐小图片第18张
                                                    ...
                                                    ...
                                                    ...
                                                   按第21次小图片篮筐选中第0张,小图片栏显示第0张/第1张,大图片对应选中的篮筐小图片第0张    (循环)

                        }
                        flag++;
                        if (flag == 3)
                                flag = 1;

                        break;
                }
        }
}

int main()
{
        initgraph(932, 538);
        loadResource();
        drawMap();
        userMoveMouse();
        getchar();
        closegraph();
        return 0;
}




上一篇:WSAAsyncSelect模型接收数组包的问题
下一篇:如何用CString写到文件呢
88_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-9-18 02:23:45 | 显示全部楼层
新人求助,另外往右边切后面的照片时是不是可以简化代码.怎么简化.谢谢
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-28 02:04

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表