程序员表白程序

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

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

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

……

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

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

我告诉你:Of Course!!!

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

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

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

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

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

先来看看效果:

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

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

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

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

  1. /*************************加载位图***********************/ 
  2. hInstance = ((LPCREATESTRUCT)lParam)->hInstance;             //获取窗口的实例句柄 
  3.  
  4. hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));  //将位图加载到内存中 
  5.  
  6. GetObject(hBitmap, sizeof(BITMAP), &bitmap); 
  7.  
  8. cxBitmap = bitmap.bmWidth;//获取位图的长 
  9. cyBitmap = bitmap.bmHeight;//获取位图的宽 
/*************************加载位图***********************/
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;				//获取窗口的实例句柄

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

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

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


然后在WM_PAINT消息中绘制背景

  1. //绘制背景 
  2. hdc = BeginPaint(hwnd, &ps); 
  3.  
  4. hdcMem = CreateCompatibleDC(hdc);//创建一个兼容于hdc设备环境描述表的hdcMem  主要是用于在内存中截图 
  5. SelectObject(hdcMem, hBitmap);   //将位图选到hdcMem中 
  6.  
  7. BitBlt(hdc, -1, -1, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//绘制bmp位图 
  8.  
  9. DeleteDC(hdcMem); 
  10. EndPaint(hwnd, &ps); 
//绘制背景
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基础,应该不用多说吧)

具体代码如下:

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

  1. //显示一个字 
  2. int ShowWord(HDC hdc) 
  3.     TCHAR c; 
  4.  
  5.     if(fp == NULL)//第一次调用时,初始化文件指针 
  6.     { 
  7.         if((fp = fopen("Poem.txt", "r")) == NULL) 
  8.         { 
  9.             exit(1); 
  10.         } 
  11.     } 
  12.  
  13.     if(fscanf(fp, "%c", &c) != EOF) 
  14.     { 
  15.         if(c == '\n'
  16.         { 
  17.             row++; 
  18.             col = 0; 
  19.             /*
  20.             如果遇到'\n',说明需要换行,换行后,下一行首字
  21.             要和上一行首字对齐,因此要将列标col置零*/ 
  22.         } 
  23.  
  24.         else 
  25.         { 
  26.             word[0] = c; 
  27.             fscanf(fp, "%c", &c); 
  28.             word[1] = c; 
  29.             col++; 
  30.  
  31.  
  32.             /*
  33.             因为在ASC码中,一个字符一个字节,一个汉字两个字节,
  34.             因此汉字的宽度应该是英文字符的2倍,加上汉字之间要
  35.             有一定的空隙(+3),且尽量居中显示(+230),故x坐标应该
  36.             是: col * (2 * cxChar + 3) + 230
  37.             汉字的高度和字符的高度默认相同 , 因此只需要简单的乘上row就行了
  38.             */ 
  39.             TextOut(hdc, col * (2 * cxChar + 3) + 225, row * cyChar + 5, word, 2); 
  40.         } 
  41.  
  42.         return 0; 
  43.     } 
  44.  
  45.     return EOF; 
//显示一个字
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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值