<Win32_6>程序员求爱的创意程序^_^
作为程序员,我们时常被外界误认为很闷、不浪漫、没创意……等等这一类人,这让我们实在有些感伤啊,我得为程序员呐喊一声:
我们也能可以欢快、浪漫、有创意……
朋友,你向女生表白过吗?
……
这个问题有点儿羞涩,但是我今儿叫你一招 —— 用我们程序员的方式表白^_^
呵呵,说到这里,你可能已经猜到:该不是编程序吧?
我告诉你: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哈哈~
最后预祝程序员们表白成功
资源下载:
随机推荐
- VC用OLE方式读写Excel
前几天要做一个项目,需要读取Excel中的数据.从网上查资料发现,主要是有两种方式.一是把Excel表当成数据库使用ODBC读写,这样操作起来就跟操作Access数据库似的.但这种方式效率比较低.另一 ...
- java开发webservice的几种方式
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...
- Struts的核心配置
一.配置struts.xml文件 1.struts.xml文件 2.常量配置 <constant> struts.properities web.xml中的<init-param&g ...
- Head First HTML与CSS — 布局与定位
1.流(flow)是浏览器在页面上摆放HTML元素所用的方法. 对于块元素,浏览器从上到下沿着元素流逐个显示所遇到的各个元素,会在每个块元素之间加一个换行: 对于内联元素,在水平方向会相互挨着,总体上 ...
- DropDownList获取的SelectIndex一直为0
1.想要DropDownList自动提交必须设置AutoPostBack="true"属性,下面是代码: <asp:DropDownList ID=" AutoPo ...
- 导出Exexcl类
前台: <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation=" ...
- SwfUpload及imgareaselect使用方法
1.导入文件 Swfupload相关文件 imgareaselect截取插件相关文件 2.前端html代码 添加一个截取图片的按钮,其他为swf所需的html. <body> <di ...
- 高级 JsRender 模板功能
转自:http://msdn.microsoft.com/zh-cn/magazine/hh975379.aspx 尽管模板很强大,但有时模板引擎提供的现成标准功能无法满足您的需求. 您可能要转换数据 ...
- 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
Problem Description 求Sn=2+22+222+…+22…222(有n个2)的值. 例如:2+22+222+2222+22222(n=5),n由键盘输入. Input n Outpu ...
- jdbc 获取connection 对象的三种方式
获取数据库连接方法一:驱动实现类 //创建mysql的Driver对象 Driver driver=new com.mysql.jdbc.Driver(); //jdbc url 定位一个数据库: S ...