C++實(shí)現(xiàn)新年賀卡程序
用c++應(yīng)用程序編寫的雪花賀卡,逢年過節(jié)送給你自己身邊的親友吧
snow.cpp
/////////////////////////////////////////////////////////////////////////////// // Snow.cpp // Date: 2009-2-5 21:16 // A moving ball. // /////////////////////////////////////////////////////////////////////////////// #include <assert.h> #include "Snow.h" TCHAR strForWin1[] = "時(shí)間過得好快啊!"; TCHAR strForWin2[] = "開學(xué)已經(jīng)十周了..." ; TCHAR strForWin3[] = "你學(xué)的怎么樣了?"; TCHAR strForWin4[] = "有問題一定要及時(shí)讓我知道"; TCHAR strForWin5[] = "祝大家“小光棍節(jié)”快樂"; 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 } /*:: -- 作用域標(biāo)識(shí)符!如果是在MFC下編程的話,因?yàn)镸FC封裝了API函數(shù),但是參數(shù)有的和API函數(shù)不一樣, 比如MFC封裝的函數(shù)一般都沒有句柄這個(gè)參數(shù),但是API函數(shù)都有, 所以在MFC編程中,如果你調(diào)用的是全局的API函數(shù)的話就要加::符號(hào), 來通知編譯器你調(diào)用的是全局的API函數(shù),而不是MFC封裝的API函數(shù)! 當(dāng)然有的函數(shù)比如參數(shù)是個(gè)布爾型的,MFC封裝的函數(shù)和全局的API函數(shù)的參數(shù)相同, 編譯器默認(rèn)的是調(diào)用MFC封裝的函數(shù),所以你加不加::作用域標(biāo)識(shí)符都是一樣的!! 控制臺(tái)下編寫的程序用的就是API函數(shù)所以沒必要加::作用域標(biāo)識(shí)符的。 */ /////////////////////////////////////////////////////////////////////////////// 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 ); //設(shè)置定時(shí)器 ::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 ); }
源碼下載:賀卡程序
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:vc++ 監(jiān)控指定路徑下文件變化實(shí)現(xiàn)代碼
欄 目:C語言
下一篇:詳解C++中虛析構(gòu)函數(shù)的作用及其原理分析
本文標(biāo)題:C++實(shí)現(xiàn)新年賀卡程序
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/367.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10使用OpenGL實(shí)現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項(xiàng)的七種實(shí)現(xiàn)方法
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改