看C的图形编程时构思的动态相册,有很多部分不知道该怎么去完成,希望你们能给我点建议。
1、创意阶段
利用二维星空的部分代码制作动态相册,循环展示,当鼠标有动作时做出响应
2、规划阶段
利用graphics.h 包含的图形库实现创意,暂定为二维展示
3、周边准备
需要抒情的背景音乐以及简约的背景图,点击鼠标发出的声音
4、细部准备
初始化Init函数,移动相册Move函数,鼠标动作响应函数
*编程遇到的问题
1、动态初始化字符串
2、相册移动时是利用清屏还是重绘,如果是重绘的话,背景要求色调单一
为什么异或对载入图像没用
3、鼠标经过响应,鼠标移走也要响应,鼠标点击响应,再点击应回到原来的画面,或者是点击时打开新的窗口,这样的话简单点
4、需要不断检测鼠标的坐标,如果在img[i]范围内的话改变img[i]的尺寸
// 动态相册.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "graphics.h"
#include "time.h"
#include "conio.h"
#define MAXPHOTO 10//预设相册的照片数为10
struct PHOTO
{
int x;
int y;
float step;
}photo[MAXPHOTO];//定义照片的结构体
void InitPhoto(int i)
{
photo[i].x=0;
photo[i].y=250;
photo[i].step=2;
}
//初始化照片
void MovePhoto(int i,IMAGE img[])
{
putimage(photo[i].x,photo[i].y,&img[i]);
Sleep(10);
setfillstyle(BLACK);
bar(photo[i].x,photo[i].y,photo[i].x+135,photo[i].y+128);//利用覆盖的技术实现动画效果
photo[i].x+=(int)photo[i].step;
moveto(photo[i].x,photo[i].y);//使光标移至下一个位置
putimage(photo[i].x,photo[i].y,&img[i]);
}
//捕获鼠标点击对象的信息
void ClickLeft(int i,IMAGE img[])
{
Resize(&img[i],300,193);//当鼠标点击照片时,照片的尺寸放大(暂时没有考虑模糊)
}
void main ()
{
int i;
IMAGE img[MAXPHOTO];
MOUSEMSG m;
//图形模式
initgraph(500,500);
loadimage(&img[0],"D:\\Tile1.bmp");
loadimage(&img[1],"D:\\Tile2.bmp"); //初始化所有img[i]和photo[i]
for(i=0;i<MAXPHOTO;i++)
{
InitPhoto(i);
}
while(true)
{
m = GetMouseMsg();
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
if(m.x>photo[0].x &&m.x<photo[0].x+135 && m.y>photo[0].y && m.y<photo[0].y+128)
//照片的尺寸范围为
ClickLeft(0,&img[0]);//假设左键单击第一张照片才会响应
break;
}
for(i=0;i<MAXPHOTO;i++)
MovePhoto(i,&img[i]);//移动照片
if(photo[i].x>500)
InitPhoto(i);
}
closegraph();
}