<Win32_11>程序员求爱的创意程序——升级版^_^

前段时间,我编写了一个创意程序,并用于向自己目前的女朋友表白,结果效果还不错,得到了她的芳心。

于是我将自己的创意程序共享到csdn资源上,大多数网友认为创意不错,就是简单了些——呵呵,其实我个人也这么觉得,只不过当时时间和能力的限制,也就那样将就了

……

点击下载第一次的程序

……

而今呢,我在七夕节时再次为我的女朋友写了一个程序,这次算是上次的升级版吧,功能多了一些、界面效果也好多了

下面,我们就来欣赏一下它的效果吧

(这次的目的和上次一样,只是做一个模本,所以我仅仅是使用了上次的诗歌和一首最近比较火的歌曲<<谁>>(吴佳唱的,电视剧<<生死相依>>的主题曲),留给大家创作的空间^_^)

*************************************************程序及源代码欣赏******************************************************

(1)开始弹出一个消息框,点击"是"继续,点击"否"直接退出

这个就是一个消息框,代码很简单:

在主窗口回调函数的WM_CREATE消息中响应:

case WM_CREATE:
	if(IDYES == MessageBox(hwnd, TEXT("准备好倾听我的心声了吗?"), TEXT("LoveWindow"), MB_YESNO))
	{
		Sleep(2000);
	}
	else//选择否  直接发送窗口销毁消息,退出窗口
	{
		SendMessage(hwnd, WM_DESTROY, wParam, lParam);
	}


(2)选择"是"之后2秒钟,显示主窗口的界面

(3)这里在主窗口中建立了三个子窗口,这个一眼就能看见,就不言而喻了——我还是将三个子窗口的窗口回调函数代码贴出来,内涵注释

a)诗歌子窗口(左边长方形的那个)功能及其代码介绍,均在子窗口PoemChild回调函数中响应

1. 使用MCI控件来播放音乐(基本上可以播放所有的音频文件,这里默认选择了了一首"谁.mp3"这首歌,还比较好听)

case WM_CREATE://在创建消息中响应
	//开始加载并播放音乐(使用MCI控件)
	hwndMci = MCIWndCreate(hwnd, ((LPCREATESTRUCT)lParam)->hInstance,
						MCIWNDF_SHOWNAME,TEXT("谁.mp3"));
	
	ShowWindow(hwndMci, SW_HIDE);
	MCIWndPlay(hwndMci);


同时通过响应鼠标左键消息来控制它的显示或隐藏

//通过响应鼠标消息来控制MCI播放器的显示和隐藏
case WM_LBUTTONDOWN:
	if(IsWindowVisible(hwndMci))//如果可视就隐藏,否则显示
	{
		ShowWindow(hwndMci, SW_HIDE);
	}

	else
	{
		ShowWindow(hwndMci, SW_NORMAL);
	}
	return 0;

2. 修改了字体

//在WM_CREATE消息中创建字体
ZeroMemory(&lf, sizeof(LOGFONT));

lf.lfHeight		= -15;
lf.lfUnderline	= 1;

hFont = CreateFontIndirect(&lf);

3. 在WM_PAINT消息中绘制位图,在定时器消息WM_TIMER中显示诗歌(这个基本上次相同)

//通过定时器来驱动诗歌的显示
case WM_TIMER:
	hdc = GetDC(hwnd);

	//设定文本颜色
	SetTextColor(hdc, RGB(rand() % 255,
		rand() % 205, rand() % 255));
	SetBkMode(hdc,TRANSPARENT);//设定文本的背景透明

	SelectObject(hdc, hFont);//选择创建好的字体

	//如果文件读取完了 , 计时器也应该关闭 , 免得浪费资源
	if(ShowWord(hdc) == EOF)
	{
		KillTimer(hwnd, ID_TIMER_POEM);
	}
	
	ReleaseDC(hwnd, hdc);
	return 0;


b)右上角子窗口,均在LoveChild窗口回调函数中响应

主要就是通过上下移动三种位图,分别标记"我"、"爱"、"你",感觉比较温馨

这里着重看一下WM_PAINT消息中的代码,其余的没什么特别的,大家可以下载资源以查看完整代码

case WM_PAINT:
	hdc = BeginPaint(hwnd, &ps);

	hdcMem = CreateCompatibleDC(hdc);

	for(i=0; i<NUM; i++)
	{
		//判断位图的位置  并作相应的运动方向的改变
		if(bmpPos[i].y < 0)//上边界
		{
			moveIndex[i] = rand() % 10 + 5;//通过随机数来控制移动速度,所以你会发现它们有时快、有时慢
		}

		if(bmpPos[i].y >= (cyClient - cyBitmap))//下边界
		{
			moveIndex[i] = - (rand() % 10 + 5);
		}

		bmpPos[i].y += moveIndex[i];//修改位图纵向的位移

		SelectObject(hdcMem, hBmp[i]);

		BitBlt(hdc, bmpPos[i].x, bmpPos[i].y, 
			cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//贴位图
	}

	DeleteDC(hdcMem);
	EndPaint(hwnd, &ps);



c)右下角子窗口,这个子窗口主要就是按时变换位图

在WM_TIMER消息中,使窗口无效而重绘

case WM_TIMER:
	InvalidateRect(hwnd, NULL, TRUE);
	return 0;

在WM_PAINT消息中变换背景

case WM_PAINT:
	hdc = BeginPaint(hwnd, &ps);

	hdcMem = CreateCompatibleDC(hdc);

	SelectObject(hdcMem, hBmp[curBmpIndex]);

	BitBlt(hdc, 3, 8, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);

	curBmpIndex = (curBmpIndex + 1) % 10;//通过修改位图索引,来控制下一张背景的显示,总共10张

	DeleteDC(hdcMem);
	EndPaint(hwnd, &ps);
	return 0;


(4)另外,本次使用了Win32的MCI控件,基本上可以播放任意格式的音频文件

(点击左边长方形子窗口,可以控制这个控件的显示和隐藏)

至于这个控件的使用方法,相信大家能很快了解到,不需要我赘述了

从这个方面来讲,本次的程序还是一个简易的背景音乐播放器

ok,因为大部分技术都是之前讲过的,例如:贴位图、计时器、子窗口==,因此就这样初略地讲一下吧……

希望我的程序能给程序员们带来灵感,愿天下有情人终成眷属^_^

点击下载程序和源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值