zoukankan      html  css  js  c++  java
  • <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 == '
    ')
    		{
    			row++;
    			col = 0;
    			/*
    			如果遇到'
    ',说明需要换行,换行后,下一行首字
    			要和上一行首字对齐,因此要将列标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

  • 相关阅读:
    [CentOS7] 常用工具 之 差异备份工具 rdiff-backup
    [CentOS7] 常用工具 之 防暴力破解工具 Fail2ban
    [CentOS7] 增加yum源
    [CentOS7] firewalld重启失败 Failed to start firewalld
    常见性能优化
    Acunetix 11 配置详解
    linux 环境安装及学习
    linux 个人配置记录
    linux 配置阿里云yum库
    阿里云 oss实时日志查询
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3221801.html
Copyright © 2011-2022 走看看