当前位置: 首页 > news >正文

Win32_5程序员求爱的创意程序^_^

作为程序员,我们时常被外界误认为很闷、不浪漫、没创意……等等这一类人,这让我们实在有些感伤啊,我得为程序员呐喊一声:

我们也能可以欢快、浪漫、有创意……

朋友,你向女生表白过吗?

……

这个问题有点儿羞涩,但是我今儿叫你一招 —— 用我们程序员的方式表白^_^

呵呵,说到这里,你可能已经猜到:该不是编程序吧?

我告诉你:Of Course!!!

好吧,我今儿就来先秀一下我的创意(我可是求爱表白成功了哟……这一招还蛮实用,对于我们程序员来说,哈哈)

先来浅谈一下我的idea(其实比较简单),我的程序分为三部分:

(1)来一张赏心悦目的背景

(2)逐个字显示一首情诗^_^

(3)来一首催人泪下的、优美的歌曲

先来看看效果:

好吧,我们来具体谈谈如何实现

(1)背景 就是贴一张bmp位图

这个和之前说的贴法一样,还是来看看代码:

现在WM_CREATE消息中加载位图信息:

/*************************加载位图***********************/
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;				//获取窗口的实例句柄

hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));	//将位图加载到内存中

GetObject(hBitmap, sizeof(BITMAP), &bitmap);

cxBitmap = bitmap.bmWidth;//获取位图的长
cyBitmap = bitmap.bmHeight;//获取位图的宽


然后在WM_PAINT消息中绘制背景

//绘制背景
hdc = BeginPaint(hwnd, &ps);

hdcMem = CreateCompatibleDC(hdc);//创建一个兼容于hdc设备环境描述表的hdcMem  主要是用于在内存中截图
SelectObject(hdcMem, hBitmap);   //将位图选到hdcMem中

BitBlt(hdc, -1, -1, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//绘制bmp位图

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


(2)绘制文本

先将诗歌保存到一个txt文档中,然后读取这个文件(这个是c基础,应该不用多说吧)

具体代码如下:

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

//显示一个字
int ShowWord(HDC hdc)
{
	TCHAR c;

	if(fp == NULL)//第一次调用时,初始化文件指针
	{
		if((fp = fopen("Poem.txt", "r")) == NULL)
		{
			exit(1);
		}
	}

	if(fscanf(fp, "%c", &c) != EOF)
	{
		if(c == '\n')
		{
			row++;
			col = 0;
			/*
			如果遇到'\n',说明需要换行,换行后,下一行首字
			要和上一行首字对齐,因此要将列标col置零*/
		}

		else
		{
			word[0] = c;
			fscanf(fp, "%c", &c);
			word[1] = c;
			col++;

			/*
			因为在ASC码中,一个字符一个字节,一个汉字两个字节,
			因此汉字的宽度应该是英文字符的2倍,加上汉字之间要
			有一定的空隙(+3),且尽量居中显示(+230),故x坐标应该
			是: col * (2 * cxChar + 3) + 230
			汉字的高度和字符的高度默认相同 , 因此只需要简单的乘上row就行了
			*/
			TextOut(hdc, col * (2 * cxChar + 3) + 225, row * cyChar + 5, word, 2);
		}

		return 0;
	}

	return EOF;
}

(3)播放音乐

这个就是用大家很熟悉的PlaySound()函数

由于需要留给大家发挥的空间,我使用的诗歌和歌曲不是原创,哥们你可以自己来一首诗、自己录一段音……总之你可以尽情发挥你的想象,把你未来的女朋友拿下O(∩_∩)O哈哈~

最后预祝程序员们表白成功

资源下载:

程序员表白程序.zip

相关文章:

  • cisco单臂路由
  • VC2010中 调用DLL的方法
  • Win32_6Win32的验证码程序
  • iOS Xcode, 解决“Could not insert new outlet connection”的问题。
  • Win32_7由浅入深——滚动条
  • 简单实现web服务器负载均衡
  • Android编程之ActivityManager: Segmentation fault
  • C# 网络编程之网页简单下载实现
  • mac 下对 iterm 终端 设置代理
  • 如何理解c和c++的复杂类型声明
  • silverlight中datagrid数据到处excel
  • Android编程之如何取得View的当前位置
  • Android4.0内存Dex数据动态加载技术
  • C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
  • 文章收录1
  • “大数据应用场景”之隔壁老王(连载四)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Golang-长连接-状态推送
  • Gradle 5.0 正式版发布
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 编写高质量JavaScript代码之并发
  • 不上全站https的网站你们就等着被恶心死吧
  • 从零开始的无人驾驶 1
  • 精彩代码 vue.js
  • 来,膜拜下android roadmap,强大的执行力
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 无服务器化是企业 IT 架构的未来吗?
  • - 转 Ext2.0 form使用实例
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $.each()与$(selector).each()
  • (1)Nginx简介和安装教程
  • (1)STL算法之遍历容器
  • (2)STM32单片机上位机
  • (30)数组元素和与数字和的绝对差
  • (Oracle)SQL优化技巧(一):分页查询
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (算法)前K大的和
  • (推荐)叮当——中文语音对话机器人
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Linux整合apache和tomcat构建Web服务器
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net Stream篇(六)
  • .NET 表达式计算:Expression Evaluator
  • .NET和.COM和.CN域名区别
  • .NET项目中存在多个web.config文件时的加载顺序