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

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

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

……

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

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

我告诉你: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

随机推荐

  1. Qt - 与众不同的电子时钟

     Qt的电子时钟是个老掉牙的demo了,但是利用lcdNumber显示的样子非常老土(下图第一个显示效果),一看就知道是从qt帮助文档里摘出来的example,毫无新意. 美化一下系统时钟,抛开固有控 ...

  2. ini文件解析c库(iniparser)

    一.交叉编译ini解析库 1.官方网站http://ndevilla.free.fr/iniparser 下载iniparser-3.1.tar.gz 2.解压 tar -zxvf iniparser ...

  3. Java基础知识强化50:运行javac 报告javac不是内部或外部命令(已解决)

    1. 问题:运行javac 报告javac不是内部或外部命令,但是运行java.java-version正常 ? 看看下面三个环境变量是否设置正确: (1)环境变量  JAVA_HOME 设置JAVA ...

  4. 部署hibernate框架项目时出现问题:The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files.

    基本情况: (这些其实关系不大)我是直接impor导入HibernateDemo项目到eclipse中的,该项目的hibernate版本是3.6.7.Final版,使用了Hibernate Tools ...

  5. Python学习--07迭代器、生成器

    迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...

  6. css伪类选择器详细解析及案例使用-----伪类选择器(1)

    动态伪类选择器:E:link :选择匹配的E元素,并且匹配元素被定义了超链接并未被访问过.E:visited :选择匹配的E元素,而且匹配的元素被定义了连接并已被访问过.E:active :选择匹配的 ...

  7. 关于链接target的问题

    <a href="http://www.baidu.com" target="_blank">点击链接</a> target: _bla ...

  8. 对于数据操作的SQL语句精粹(长期更新)

    --删除空格 Update [Table] Set [Column]=Replace([Column],' ','') --查出左右和右边带空格的数据 select RTRIM( LTRIM([Col ...

  9. Visual Studio 2015开发Android App问题集锦

    Visual Studio 2015开发Android App 启动调试始终无法完成应用部署的解决方案 创建一个Android App项目后,直接启动调试发现Visual Studio Emulato ...

  10. BubbleSort - 实用委托

    概述: 排序类,可以对任意类型的对象进行排序,包括基本数据类型; 对象类,不仅定义本身数据,同时包含了排序的细节. 排序类(BubbleSorter): using System; using Sys ...