用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语言浮游塔 第②期] 程序框架的搭建及14种基本运算符

    前言 都不知道有没有人在看.(悲) 经过之前的学习,我们知道了C语言的起源,C语言的基本结构以及一些基础知识. 本期我们会在此基础上向大家讲解14种运算符(主流使用).格式以及字符的输入输出.数据类型 ...

  2. 计算机老师新年贺卡祝福语,老师的新年贺卡祝福语

    30.我想用阳光温暖您,用星光装点您,用美酒陶醉您,用美食满足您,用幸福淹没您,可我不做上帝已经很多年,只能用短信祝福您--新年快乐! 31.忙碌了一年,亲爱的老师,您的新年又到了,感谢您对我的帮助与 ...

  3. 程序员用c语言写的新年祝福,程序员的新年祝福:Happy New Year

    原标题:程序员的新年祝福:Happy New Year 51CTO大本营祝您元旦快乐! 本文转载自程序员的那点事(ID:Coder1024Coder1024) C:printf("Happy ...

  4. 程序员用c语言写的新年祝福,程序员的新年祝福 Happy New Year

    愿你新年快乐,许下新年的新愿望,努力实现! C:printf("Happy New Year"); C++ : cout< Objectivec: NSLog(@" ...

  5. python节日贺卡图片大全_简单漂亮三年级新年贺卡图片大全

    春节是中国最隆重的传统节日,它象征着团结.兴旺,是对未来寄托新的希望的佳节.下面小编给大家分享一些简单漂亮三年级新年贺卡图片,大家快来跟小编一起欣赏吧. 简单漂亮三年级新年贺卡图片展示 简单漂亮三年级 ...

  6. 计算机老师新年贺卡祝福语,新年贺卡祝老师祝福语精选

    1.新年来了,小黄子在此给你拜年啦,新的一年诸事顺利,吉祥如意,大吉大利啊.2.送走旧年的时候,也送走一年的阴郁,迎来新春的时候,也迎来新的希望.给您拜年啦!3 [查看详细] 2018 老师新年贺卡祝 ...

  7. C语言/C++基础之元旦新年倒计时程序包含天、时、分、秒(附源码)

    C语言/C++基础之元旦新年倒计时程序 程序之美 前言 主体 运行效果 代码实例 结束语 程序之美 前言 元旦将至,新年将至.转眼间2022年即将过去,崭新的一年正向我们缓缓走来.对那些帮助过你的,激 ...

  8. 【iVX 初级工程师培训教程 10篇文拿证】01 了解 iVX 完成新年贺卡

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  9. python新年贺卡_python验指导书.docx

    python验指导书 PAGE \* MERGEFORMAT 4 实验1 开始python编程 目的和要求 了解什么是python? 了解python的特性 学习下载和安装python 学习执行pyt ...

最新文章

  1. 优惠劵系统库存设计浅谈
  2. VTK:vtkNew<vtkDenseArray<double>>用法实战
  3. Java 线程的生命周期
  4. Spring AOP 源码分析-寻找入口
  5. 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件
  6. linux怎么删除sd卡内容,SD卡写保护怎么去掉?不是开关那么简单
  7. php的gd库处理大的图片,PHP的gd库处理图片
  8. Kafka 监控 Kafka Eagle 图形化版本
  9. linux swap 分区调控(swap分区 lvm管理)
  10. App后台开发运维和架构实践学习总结(2)——RESTful API设计技巧
  11. alter procedure是什么意思_板上钉钉的意思
  12. Windows 下 Composer 与 Laravel 4 的安装
  13. BZOJ1259:[CQOI2007]矩形rect(DFS)
  14. 不高兴INTEL挤牙膏,技术天才Jim Keller愤而辞职
  15. 计算机中硬盘和移动硬盘的区别,固态硬盘与移动硬盘有哪些区别?
  16. linux cat命令追加,linux cat命令
  17. Postman高级用法
  18. mac SCp上传文件到阿里云服务器centos
  19. APISpace 笑话大全API
  20. 美团和大众点评合并:抱团取暖 1+1能否大于2?---OFweek

热门文章

  1. 阿里云贾扬清:数据湖正成为企业数据应用创新标配
  2. 宜搭小技巧|找不到应用怎么办?群应用一键直达
  3. 闲鱼直播三周内实现点击率翻倍,我们是这么做到的...
  4. 景区门票系统上云 低成本、安全性高
  5. KDD 2019论文解读:异构信息网络上的对抗生成学习
  6. AI 安全在阿里业务中的实践,你了解吗?
  7. 如何衡量研发效能?阿里资深技术专家提出了5组指标
  8. 阿里云商品评价解析功能示例解析
  9. 确认! Python再次夺冠,老码农:崩溃!
  10. java实验册_Java实验报告册Java实验报告册.doc