编程贺卡c语言,C++实现新年贺卡程序

用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 );

}

源码下载:贺卡程序

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go AppsFlyer 针对中国移动互联…

如何基于OSS和MTS,快速搭建音视频文件上传服务?

摘要&#xff1a; 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK&#xff0c;快速搭建一个音视频文件上传服务。 优势 使用MTS的上传SDK上传音视频文件&#xff0c;具有以下优势&#xff1a; 增加文件列表管理功能。 增加STS Token 超时更新功能。 背景 本文主要介绍如何基…

IntelliJ IDEA 2019.1 windows找不到文件‘chrome’

文章目录一、问题现象1. 用IntelliJ IDEA 2019.1 打开index.html,抛出以下错误2. 异常效果图二、解决方案&#xff1a;2.1.【打开设置】2.2. 搜索【web brow】2.3. 在桌面上找到google-【右击】-【属性】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】2.4. 在红框中&…

新功能:阿里云负载均衡支持HTTP/2、WSS协议

摘要&#xff1a; 很高兴的告诉大家&#xff0c;阿里云负载均衡在欧洲中部&#xff08;法兰克福&#xff09;与亚太东南3&#xff08;吉隆坡&#xff09;地域支持HTTP/2、WSS&#xff08;Web Socket Secure&#xff09;协议。 1、HTTP/2协议支持 什么是HTTP/2 HTTP2是超文本传输…

wds linux,linux 无线组网方式 WDS功能

扩展你的无线网络&#xff1a;使用WDS扩展WDS设置无线分布式系统WDS(Wireless Distribution System)&#xff0c;在无线网络扩展中扮演着最重要的角色&#xff0c;它可以帮你轻松的实现无线到无线的扩展&#xff0c;而中间不必使用任何有线的连接&#xff0c;这在看中美观的家庭…

三十四载Windows崛起之路: 苹果、可视做过微软“铺路石”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;姜洪军1982年11月的一天&#xff0c;赌城拉斯维加斯客流如织&#xff0c;有常见的闲散赌客&#xff0c;但更多的是来自计算机产业的专业人士&#xff0c;因为计算机领域的重要博览会Comdex在这里举行。27岁的比尔盖…

maven jar下载仓库

下载jar仓库 https://www.kumapai.com/

阿里云CDN直播架构与双11晚会直播实战

摘要&#xff1a; 分享人&#xff1a;阿里云CDN直播 高级技术专家 阙寒分享内容&#xff1a;双11直播活动是众多直播活动中非常典型的场景&#xff0c;离不开直播本身这个话题。所以今天的分享会从直播概述、直播架构、业务功能、直播监控、双11这几个方面来进行。 分享人&…

双11黑科技,阿里百万级服务器自动化运维系统StarAgent揭秘

摘要&#xff1a; 还记得那些年我们半夜爬起来重启服务器的黑暗历史吗&#xff1f;双11期间&#xff0c;阿里巴巴百万量级主机管理能安全、稳定、高效&#xff0c;如丝般顺滑是如何做到的&#xff1f;阿里巴巴运维中台技术专家宋意&#xff0c;首次直播揭秘阿里IT运维的基础设施…

查看大日志文件的专门工具logviewer

查看大日志文件的专门工具logviewer版本为官网2.3.1版本 文章目录一、百度网盘下载链接&#xff1a;二、操作手册2.1. 【file】-【Open】-【选择文件】-【打开】2.2. 文本可视化展示2.3. 编码选择2.4. 效果图2.5. 搜索功能一、百度网盘下载链接&#xff1a; 链接https://pan.b…

android9.0原生字体,iOS 9原生字体看腻了?不如学着去替换吧

对于已经越狱的 iPhone 用户来说&#xff0c;除了精简系统、美化界面之外&#xff0c;更改字体也是他们非常愿意去尝试的一个方面。对于已经越狱的 iPhone 用户来说&#xff0c;除了精简系统、美化界面之外&#xff0c;更改字体也是他们非常愿意去尝试的一个方面&#xff0c;因…

Android热修复升级探索——SO库修复方案

摘要&#xff1a; 通常情况下&#xff0c;大多数人希望android下热补丁方案能够做到补丁的全方位修复&#xff0c;包括类修复/资源修复/so库的修复。 这里主要介绍热补丁之so库修复思路。 一、前言 通常情况下&#xff0c;大多数人希望android下热补丁方案能够做到补丁的全方位…

中小企业搭建混合云,服务器如何选?

戳蓝字“CSDN云计算”关注我们哦&#xff01;经过一年多的发展Henry所在的NewStar公司的业务开始蒸蒸日上各种业务系统也越来越多、运营管理也开始越来越复杂公司所购买的“第一台服务器”逐渐力不从心业务中断时有发生Henry又回到了公司初期一筹莫展的状况中Henry脸上也是愁云…

org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 110; schema_reference.4: 无法读取方案文档

异常信息&#xff1a; org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 110; schema_reference.4: 无法读取方案文档 ‘http://www.springframework.org/schema/beans/spring-beans-4.0.xsd’, 原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 x…

基于TableStore构建简易海量Topic消息队列

摘要&#xff1a; 前言 消息队列&#xff0c;通常有两种场景&#xff0c;一种是发布者订阅模式&#xff0c;一种是生产者消费者模式。发布者订阅模式&#xff0c;即发布者生产消息放入队列&#xff0c;多个监听的消费者都会收到同一份消息&#xff0c;也就是每个消费者收到的消…

com.android.tools.build:gradle:2.3.3,关于com.android.tools.build:gradle:3.4.2的构建问题

Android Studio Version&#xff1a;3.4.2Android Gradle Plugin Version&#xff1a;3.4.2Gradle Version&#xff1a;5.1.1根据以上IDE工具以及对应的插件版本&#xff0c;搭建了一个Android 项目&#xff0c;app的build.gradle如下&#xff1a;// Top-level build file wher…

苹果ID登陆第三方有漏洞?硬核!Gartner报告腾讯云数据库增速国内第一;“小米快递”商标注册,这是要入局物流领域?...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 蔚来汽车&#xff08;图片来…

【阿里云MVP月度分享】SaaS服务商如何通过数加平台统计业务流量

摘要&#xff1a; 一、概述 因为自家公司是做B2B类Saas服务的&#xff0c;难免会产生精准计费的问题&#xff0c;所以在通过多套方案的选型及对比以后&#xff0c;我们最终确定了以下的方式进行自有业务平台的流量计算方案。因为涉及到具体的操作&#xff0c;所以阅读本文的前提…

android 机顶盒 view 焦点,AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案...

AndroidTV/机顶盒 ListView获取焦点与点击事件问题处理方案本人大二&#xff0c;最近在写一个Android机顶盒的小项目&#xff0c;遇到了这样一个问题。由于App的布局复杂&#xff0c;导致ListView用遥控器获取其Item焦点时变得很卡很慢。需要不断点击上下键才能移动焦点。看了下…