用c++应用程序编写的雪花贺卡,逢年过节送给你自己身边的亲友吧

snow.cpp

///

// Snow.cpp

// Date: 2009-2-5 21:16

// A moving ball.

//

///

#include

#include "Snow.h"

TCHAR strForWin1[] = "时间过得好快啊!";

TCHAR strForWin2[] = "开学已经十周了..." ;

TCHAR strForWin3[] = "你学的怎么样了?";

TCHAR strForWin4[] = "有问题一定要及时让我知道";

TCHAR strForWin5[] = "祝大家“小光棍节”快乐";

TCHAR strForWin6[] = " CJ Wang 2011.11.1";

const int nMaxHeight = 450;

#define ID_TIMER 1

///

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, char* cmdParam, int cmdShow )

{

char className[] = "Snow";

MovingBall MovingBallClass( WindowsProcedure, className, hInst );

MovingBallClass.Register();

WinMaker win( "-- Have a joy here!", className, hInst );

win.Show( cmdShow );

MSG msg;

int status;

while( ( status = ::GetMessage( & msg, NULL, 0, 0 ) ) != 0 )

{

if ( status == -1 )

return -1;

::TranslateMessage( & msg );

::DispatchMessage( & msg );

}

return msg.wParam;

}

///

MovingBall::MovingBall( WNDPROC wndProc, const char* className, HINSTANCE hInstance )

{

_class.style = 0;

_class.lpfnWndProc = wndProc; // Windows procedure: mandatory

_class.cbClsExtra = 0;

_class.cbWndExtra = 0;

_class.hInstance = hInstance;

_class.hIcon = 0; // Owner of class: mandatory

_class.hCursor = ::LoadCursor( 0, IDC_ARROW );

_class.hbrBackground = (HBRUSH) ( COLOR_WINDOW + 1 ); // Optional

_class.lpszMenuName = 0;

_class.lpszClassName = className; // Mandatory

}

WinMaker::WinMaker( const char* szCaption, const char* className, HINSTANCE hInstance )

{

DWORD dwStyle = WS_OVERLAPPEDWINDOW;

dwStyle &= ~WS_SIZEBOX;

dwStyle &= ~WS_MAXIMIZEBOX;

dwStyle &= ~WS_MINIMIZEBOX;

_hWnd = ::CreateWindow(

className, // Name of a registered window class

szCaption, // Window caption

dwStyle, // Window style

CW_USEDEFAULT, // x position

CW_USEDEFAULT, // y position

787, // width

590, // height

0, // Handle to parent window

0, // Handle to menu

hInstance, // Application instance

0 ); // Window creation data

}

/*:: -- 作用域标识符!如果是在MFC下编程的话,因为MFC封装了API函数,但是参数有的和API函数不一样,

比如MFC封装的函数一般都没有句柄这个参数,但是API函数都有,

所以在MFC编程中,如果你调用的是全局的API函数的话就要加::符号,

来通知编译器你调用的是全局的API函数,而不是MFC封装的API函数!

当然有的函数比如参数是个布尔型的,MFC封装的函数和全局的API函数的参数相同,

编译器默认的是调用MFC封装的函数,所以你加不加::作用域标识符都是一样的!!

控制台下编写的程序用的就是API函数所以没必要加::作用域标识符的。

*/

///

LRESULT CALLBACK WindowsProcedure( HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam )

{

static HBITMAP hbmpBkground = NULL,

hbmpSnow = NULL,

hbmpMask = NULL;

static Snow snowFlakes[ 80 ];

static int countSnow = 0;

static int cxClient, cyClient;

static int nHeightY = nMaxHeight;

COLORREF clrBk;

PAINTSTRUCT ps;

HDC hdc = NULL,

hdcMem = NULL;

HINSTANCE hInst = NULL;

switch( uMessage )

{

case WM_CREATE:

hInst = ( (LPCREATESTRUCT) lParam )->hInstance;

assert( hInst );

hbmpBkground = ::LoadBitmap( hInst, TEXT( "bground" ) );

assert( hbmpBkground );

hbmpSnow = ::LoadBitmap( hInst, TEXT( "snow" ) );

assert( hbmpSnow );

hbmpMask = ::LoadBitmap( hInst, TEXT( "mask" ) );

assert( hbmpMask );

::SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );

//设置定时器

::SetTimer( hWnd, ID_TIMER, 160, NULL );

return 0;

case WM_SIZE:

cxClient = LOWORD( lParam );

cyClient = HIWORD( lParam );

return 0;

case WM_PAINT:

hdc = ::BeginPaint( hWnd, & ps );

assert( hdc );

hdcMem = ::CreateCompatibleDC( hdc );

assert( hdcMem );

::SelectObject( hdcMem, hbmpBkground );

::BitBlt(

hdc,

0, 0,

cxClient, cyClient,

hdcMem,

0, 0,

SRCCOPY );

::DeleteDC( hdcMem );

::EndPaint( hWnd, & ps );

return 0;

case WM_TIMER:

::FlashWindow( hWnd, TRUE );

if ( countSnow < 80 )

{

snowFlakes[ countSnow ].xPos = rand() % cxClient;

snowFlakes[ countSnow ].yPos = 0;

snowFlakes[ countSnow ].bIsExist = TRUE;

countSnow++;

}

if ( countSnow == 80 )

countSnow = 0;

hdc = ::GetDC( hWnd );

assert( hdc );

hdcMem = ::CreateCompatibleDC( hdc );

assert( hdcMem );

::SelectObject( hdcMem, hbmpBkground );

::BitBlt(

hdc,

0, 0,

cxClient, cyClient,

hdcMem,

0, 0,

SRCCOPY );

clrBk = ::GetBkColor( hdc );

::SetTextColor( hdc, RGB( 0, 11, 255 ) );

::SetBkColor( hdc, clrBk );

::TextOut( hdc, 100, nHeightY, strForWin1, lstrlen( strForWin1 ) );

::TextOut( hdc, 100, nHeightY + 18, strForWin2, lstrlen( strForWin2 ) );

::TextOut( hdc, 100, nHeightY + 36, strForWin3, lstrlen( strForWin3 ) );

::TextOut( hdc, 100, nHeightY + 54, strForWin4, lstrlen( strForWin4 ) );

::TextOut( hdc, 100, nHeightY + 70, strForWin5, lstrlen( strForWin5 ) );

::TextOut( hdc, 100, nHeightY + 88, strForWin6, lstrlen( strForWin6 ) );

//

// The redraw area for the text

//

nHeightY -= 10;

if ( nHeightY <= -88 )

{

nHeightY = nMaxHeight;

}

int i;

for ( i = 0; i < 80; i++ )

{

if ( snowFlakes[ i ].bIsExist )

{

::SelectObject( hdcMem, hbmpMask );

::BitBlt(

hdc,

snowFlakes[ i ].xPos, snowFlakes[ i ].yPos,

20, 20,

hdcMem,

0, 0,

SRCAND );

::SelectObject( hdcMem, hbmpSnow );

::BitBlt(

hdc,

snowFlakes[ i ].xPos, snowFlakes[ i ].yPos,

20, 20,

hdcMem,

0, 0,

SRCPAINT );

if ( rand() % 2 == 0 )

snowFlakes[ i ].xPos += 3;

else

snowFlakes[ i ].xPos -= 3;

snowFlakes[ i ].yPos += 10;

if ( snowFlakes[ i ].yPos > cyClient )

{

snowFlakes[ i ].xPos = rand() % cxClient;

snowFlakes[ i ].yPos = 0;

}

}

}

::ReleaseDC( hWnd, hdc );

::DeleteDC( hdcMem );

return 0;

case WM_DESTROY:

::DeleteObject( hbmpBkground );

::DeleteObject( hbmpSnow );

::DeleteObject( hbmpMask );

::KillTimer( hWnd, ID_TIMER );

::PostQuitMessage( 0 );

return 0;

}

return ::DefWindowProc( hWnd, uMessage, wParam, lParam );

}

源码下载:贺卡程序

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

c语言贺卡代码大全,C++实现新年贺卡程序相关推荐

  1. c 语言整人代码大全,C 语言整人代码大全.doc

    C 语言整人代码大全 C 语言整人代码大全 WScript.Echo("嘿,谢谢你打开我哦,我等你很久 拉!"&TSName) WScript.Echo("你是可 ...

  2. c语言分手代码大全,C语言代码大全

    从今天开始,我将C语言的代码实例从发表在博客上.供技术交流.比较基础,遵循循序渐进的原则,由简单到复杂,为以后的程序员生涯打好基础. 1.编写一个C程序输出以下信息. **************** ...

  3. c语言编程代码大全(c语言简单代码大全)

    html代码和c语言等编程语言有什么联系吗? HTML叫做超文本标记语言(标准通用标记语言下的一个应用)或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言. 怎么修改C语 ...

  4. 《代码大全2》高质量子程序的5个关键点

    洪流学堂,让你快人几步. 本篇内容来自洪流读书会精选内容. 本篇解读自计算机领域经典名著<代码大全2>. 高质量子程序的5个关键点 1.创建子程序最主要的目的是提高程序的可管理性,当然也有 ...

  5. c语言求婚代码大全,程序员表白教程,这些代码用过的都成功了!

    作为一名程序员,如何用自己的技术向喜欢的人表白? 这篇程序员表白教程,可以让你创造出不一样的浪漫! 你值得拥有! 1. I Love You Batch le 不如送她一个惊喜? 让她的电脑自动关机, ...

  6. c语言keil代码大全,Keil中C语言汇编代码比较

    完成相同的工作,汇编代码也不一样,当然效率也不一样,下面是几段完成相同功能,但C语言表达方式不一样,使得汇编的代码也不一样,从中可以总结用Keil C51编写高效C代码的经验. 1. 代码段比较1 代 ...

  7. 经典c语言基础代码大全,10个经典的C语言面试基础算法及代码

    <10个经典的C语言面试基础算法及代码>由会员分享,可在线阅读,更多相关<10个经典的C语言面试基础算法及代码(24页珍藏版)>请在人人文库网上搜索. 1.10个经典的C语言面 ...

  8. c语言求婚代码大全,这是我见过最浪漫的程序员求婚方式

    [导读]在七夕这个节日里,源代码教育不仅会举办各种活动,我们还会给大家及时送上各种福(gou)利 (liang) (下面这个福利是外国味儿的). 为了向心中的女神求婚,每个男生都会挖空心思地想出一些非 ...

  9. c语言求婚代码大全,程序员七夕用40行代码向女友求婚成功,网友:求源码

    今天刚来上班道学数里屏.中近,期据面蔽最,近,期据面逛下论坛,看到了一位浪漫程序员用代码向女朋友求婚,小编我也运行了下他分享的代码,挺有意思的今天就分享给大伙了,源码文末有领取地址.谁说程序员只是个敲 ...

  10. c语言求婚代码大全,继“代码求救”后,程序员用40行代码求婚成功!

    原标题:继"代码求救"后,程序员用40行代码求婚成功! 前段时间,程序员又火了一把. 一名程序员掉入传销组织用代码向同事求救,同事秒懂,程序员被成功救出.大家都为程序员的机智点赞, ...

最新文章

  1. nginx rewrite中last和break的区别
  2. SQLSERVER2014中的新功能
  3. 交互式线上科学期刊Distill上线,Ian Goodfellow表示“学ML就找它”
  4. Linux信号 二 信号处理函数注册
  5. Vsftp与PAM虚拟用户
  6. Excel 2016新增函数之TEXTJOIN
  7. HDU 1754线段树
  8. 十大原因宣判Windows死亡 Linux终将胜利
  9. 深度学习(7) - 长短时记忆网络(LSTM)
  10. 计算机网络结构与数据交换技术
  11. ubuntu nvidia驱动更新
  12. asd f sdfsd f afsda fsdasC ASDF
  13. Android SQlite基本用法
  14. 聊天类APP功能测试总结
  15. 确定十二星座的日期范围
  16. 开发实战:基于深度学习+maven+SSM+EasyUI的高校共享汽车管理系统(一)
  17. 使用 html2canvas 生成图片
  18. 电影票房预测-kaggle项目Python项目
  19. ARGOX CP-2140MPPLB18X60药柜
  20. 产品经理Axture高保真原型设计

热门文章

  1. Oliver的救援--SSL 2278
  2. SpringBoot Web开发
  3. SQL Server 遇到报错解决办法--更新中
  4. 体育科技文献通报杂志体育科技文献通报杂志社体育科技文献通报编辑部2022年第6期目录
  5. java 实现图片水印 文字水印
  6. html登陆没反应,ipad屏幕输入密码没反应
  7. matlab快速解方程,matlab如何解方程 matlab解方程 matlab如何解方程
  8. 颈部肌肉的锻炼方法?
  9. Bokeh—通过plotting绘制图形
  10. windows命令 format的用法