生活随笔
收集整理的這篇文章主要介紹了
超级哄女孩工具之一千枝会动的玫瑰实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相信有好多朋友都知道這個程序? 但是沒給源碼? 呵呵? 其實我們可以自己實現的? 代碼很簡單(另外這里 玫瑰并不止1000朵 而是無數朵 因為簡單起見 沒加玫瑰的統計代碼? 呵呵)
現簡單介紹實現過程
首先打開VC++ 6.0??新建個 “Win32 Application” 工程??工程名就叫“Roses”吧
然后要做的是 下載原來的那個“一千枝會動的玫瑰” 然后我們用“eXeScope”提取里面的6張位圖 和相應的6張掩碼位圖??加入到我們的工程
分別給6張位圖的ID 命名為:"BM_I0"、"BM_I1"、...、"BM_I5"
給6張位圖對應的掩碼位圖ID 命名為:"BM_M0"、"BM_M1"、...、"BM_M5"
OK
因為那個“一千枝會動的玫瑰”運行后按鼠標左鍵 或者 鍵盤退出
所以個人覺得 此程序運行后是最大化的 并且程序的窗口是透明的,
但是窗口透明的話,畫上去的位圖不就看不到了,這個問題也是想了比較久。
最后想了個投機取巧的辦法,給GetDC函數傳NULL,以檢索整個屏幕的設備上下文環境
不知道原程序是如何實現的
這樣再畫圖就沒問題了
好了下面代碼:
#include?<windows.h> #include?<stdlib.h> #include?"resource.h" #define?WS_EX_LAYERED?0x00080000 #define?LWA_ALPHA?????0x00000002 #define?LWA_COLORKEY??0x00000001 #define?ID_TIMER??????1 #define?IMGCOUNT??????6??//圖片數 typedef?BOOL?(WINAPI?*LPFNSETLAYEREDWINDOWATTRIBUTES)(HWND?hwnd,COLORREF?crKey,BYTE?bAlpha,DWORD?dwFlags)?;LRESULT?CALLBACK?WndProc?(HWND,?UINT,?WPARAM,?LPARAM)?;BOOL?TransparentWnd(HWND?hwnd,?BYTE?byAlpha){????????long?lStyle;????????HMODULE?hModule;????????BOOL?bRet;????????LPFNSETLAYEREDWINDOWATTRIBUTES?lpSetLayeredWindowAttributes;????????if(FALSE?==?IsWindow(hwnd))????????{????????????????MessageBox(NULL,?TEXT("窗口句柄無效!"),?NULL,?0)?;????????????????return?FALSE?;????????}????????hModule?=?(HMODULE)LoadLibrary(TEXT("user32.dll"))?;????????if(hModule)????????{????????????????lpSetLayeredWindowAttributes?=?(LPFNSETLAYEREDWINDOWATTRIBUTES)????????????????????????GetProcAddress(hModule,?TEXT("SetLayeredWindowAttributes"))?;????????????????if(!lpSetLayeredWindowAttributes)????????????????{????????????????????????MessageBox(hwnd,?TEXT("未找到API?SetLayeredWindowAttributes的地址!"),????????????????????????????????NULL,?MB_OK)?;????????????????????????return?FALSE?;????????????????}????????}????????lStyle?=?GetWindowLong(hwnd,?GWL_EXSTYLE)?;????????if(!lStyle)????????{????????????????MessageBox(hwnd,?TEXT("獲取窗口擴展樣式失敗!"),?NULL,?MB_OK)?;????????????????return?FALSE?;????????}????????lStyle?=?lStyle?|?WS_EX_LAYERED?;????????bRet?=?SetWindowLong(hwnd,?GWL_EXSTYLE,?lStyle)?;????????if(!bRet)????????{????????????????MessageBox(hwnd,?TEXT("設置窗口擴展樣式失敗!"),?NULL,?MB_OK)?;????????????????return?FALSE?;????????}????????bRet?=?lpSetLayeredWindowAttributes(hwnd,?0,?byAlpha,?LWA_ALPHA)?;????????if(!bRet)????????{????????????????MessageBox(hwnd,?TEXT("設置窗口透明度失敗!"),?NULL,?MB_OK)?;????????????????return?FALSE?;????????}????????RedrawWindow(hwnd,?NULL,?NULL,????????????????RDW_ERASE?|?RDW_INVALIDATE?|?RDW_FRAME?|?RDW_ALLCHILDREN)?;????????FreeLibrary(hModule)?;????????return?TRUE?;}int?WINAPI?WinMain?(HINSTANCE?hInstance,?HINSTANCE?hPrevInstance,????????????????????PSTR?szCmdLine,?int?iCmdShow){????????static?TCHAR?szAppName[]?=?TEXT?("Roses")?;????????HWND?????hwnd?;????????MSG??????msg?;????????WNDCLASS?wndclass?;????????BOOL?????bRet?;????????????????wndclass.style??????????=?CS_HREDRAW?|?CS_VREDRAW?;????????wndclass.lpfnWndProc????=?WndProc?;????????wndclass.cbClsExtra?????=?0?;????????wndclass.cbWndExtra?????=?0?;????????wndclass.hInstance??????=?hInstance?;????????wndclass.hIcon??????????=?LoadIcon?(hInstance,?szAppName)?;????????wndclass.hCursor????????=?LoadCursor?(NULL,?IDC_ARROW)?;????????wndclass.hbrBackground??=?(HBRUSH)?GetStockObject?(WHITE_BRUSH)?;????????wndclass.lpszMenuName???=?NULL?;????????wndclass.lpszClassName??=?szAppName?;????????????????if(!RegisterClass?(&wndclass))????????{????????????????MessageBox?(NULL,?TEXT?("This?program?requires?Windows?NT!"),?szAppName,?MB_ICONERROR)?;????????????????return?0;????????}????????????????srand?((int)GetTickCount())?;?????????????????hwnd?=?CreateWindow?(szAppName,?TEXT?("玫瑰花"),????????????????WS_DLGFRAME?|?WS_POPUP,????????????????0,?0,????????????????GetSystemMetrics(SM_CXSCREEN),????????????????GetSystemMetrics(SM_CYSCREEN),????????????????NULL,?NULL,?hInstance,?NULL)?;????????????TransparentWnd(hwnd,?1)?;?????????SetWindowPos(hwnd,?HWND_TOPMOST,?0,?0,?0,?0,?SWP_NOMOVE?|?SWP_NOSIZE?|?SWP_NOREDRAW)?;?????????ShowWindow?(hwnd,?iCmdShow)?;????????UpdateWindow?(hwnd)?;????????????????while?(?(bRet?=?GetMessage?(&msg,?NULL,?0,?0)?)?!=?0?)????????{????????????????if?(bRet?==?-1)????????????????{????????????????????????MessageBox?(hwnd,?TEXT?("Such?code?can?lead?to?fatal?application?errors"),????????????????????????????????szAppName,?MB_ICONERROR)?;????????????????????????return?-1?;????????????????}????????????????else????????????????{????????????????????????TranslateMessage?(&msg)?;????????????????????????DispatchMessage?(&msg)?;????????????????}????????}????????return?msg.wParam?;}LRESULT?CALLBACK?WndProc?(HWND?hwnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam){????????static??????HBITMAP?hBmpI[IMGCOUNT],?hBmpM[IMGCOUNT]?;????????HINSTANCE???hInstance?=?NULL?;????????HDC?????????hdc,?hdcMemImag,?hdcMemMask?;????????BITMAP??????bmp?;????????int?????????i,?x,?y?;????????????????switch?(message)????????{????????case?WM_CREATE:????????????????hInstance?=?((LPCREATESTRUCT)?lParam)->hInstance?;????????????????for(i=0;?i<IMGCOUNT;?i++)????????????????{????????????????????????TCHAR?szBmpName[16]?;????????????????????????wsprintf(szBmpName,?TEXT("BM_I%d"),?i)?;????????????????????????hBmpI[i]?=?LoadBitmap?(hInstance,?szBmpName)?;?????????????????????????wsprintf(szBmpName,?TEXT("BM_M%d"),?i)?;????????????????????????hBmpM[i]?=?LoadBitmap?(hInstance,?szBmpName)?;?????????????????}????????????????SetTimer(hwnd,?ID_TIMER,?100,?NULL)?;?????????????????return?0?;????????????????????????????????case?WM_LBUTTONDOWN:????????case?WM_KEYDOWN:????????????????SendMessage(hwnd,?WM_CLOSE,?0,?0)?;????????????????return?0;????????case?WM_TIMER:?????????????????hdc?=?GetDC(hwnd)?;????????????????i?=?rand()%IMGCOUNT?;????????????????????????????????hdcMemImag?=?CreateCompatibleDC?(hdc)?;????????????????DeleteObject(SelectObject?(hdcMemImag,?hBmpI[i]))?;????????????????GetObject?(hBmpI[i],?sizeof?(BITMAP),?&bmp)?;????????????????hdcMemMask?=?CreateCompatibleDC?(hdc)?;????????????????DeleteObject(SelectObject?(hdcMemMask,?hBmpM[i]))?;????????????????ReleaseDC(hwnd,?hdc)?;?????????????????????????????????x?=?rand()%GetSystemMetrics(SM_CXSCREEN)?-?bmp.bmWidth/2?;????????????????y?=?rand()%GetSystemMetrics(SM_CYSCREEN)?-?bmp.bmHeight/2?;????????????????hdc=?GetDC(NULL)?;????????????????????????????????BitBlt?(hdc,?x,?y,?bmp.bmWidth,?bmp.bmHeight,?hdcMemMask,?0,?0,?SRCAND)?;????????????????BitBlt?(hdc,?x,?y,?bmp.bmWidth,?bmp.bmHeight,?hdcMemImag,?0,?0,?SRCPAINT)?;????????????????????????????????DeleteDC?(hdcMemMask)?;????????????????DeleteDC?(hdcMemImag)?;????????????????ReleaseDC(NULL,?hdc)?;????????????????return?0?;????????????????????????case?WM_DESTROY:????????????????????????????????KillTimer(hwnd,?ID_TIMER)?;????????????????????????????????for(i=0;?i<IMGCOUNT;?i++)????????????????{????????????????????????DeleteObject?(hBmpI[i])?;????????????????????????DeleteObject?(hBmpM[i])?;????????????????}????????????????InvalidateRect(NULL,?NULL,?TRUE)?;?????????????????PostQuitMessage?(0)?;????????????????return?0?;????????}????????return?DefWindowProc?(hwnd,?message,?wParam,?lParam)?;}
?
?
//資源文件 Roses.rc
#include?"resource.h" #define?APSTUDIO_READONLY_SYMBOLS #include?"afxres.h" #undef?APSTUDIO_READONLY_SYMBOLS #if?!defined(AFX_RESOURCE_DLL)?||?defined(AFX_TARG_CHS) #ifdef?_WIN32 LANGUAGE?LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED#pragma?code_page(936) #endif?//_WIN32 ROSES???????????????????ICON????DISCARDABLE?????"rose.ico"#ifdef?APSTUDIO_INVOKED 1?TEXTINCLUDE?DISCARDABLE?BEGIN????"resource.h/0"END2?TEXTINCLUDE?DISCARDABLE?BEGIN????"#include?""afxres.h""/r/n"????"/0"END3?TEXTINCLUDE?DISCARDABLE?BEGIN????"/r/n"????"/0"END#endif????//?APSTUDIO_INVOKED BM_I0???????????????????BITMAP??DISCARDABLE?????"BM_I0.bmp"BM_I1???????????????????BITMAP??DISCARDABLE?????"BM_I1.bmp"BM_I2???????????????????BITMAP??DISCARDABLE?????"BM_I2.bmp"BM_I3???????????????????BITMAP??DISCARDABLE?????"BM_I3.bmp"BM_I4???????????????????BITMAP??DISCARDABLE?????"BM_I4.bmp"BM_I5???????????????????BITMAP??DISCARDABLE?????"BM_I5.bmp"BM_M0???????????????????BITMAP??DISCARDABLE?????"BM_M0.bmp"BM_M1???????????????????BITMAP??DISCARDABLE?????"BM_M1.bmp"BM_M2???????????????????BITMAP??DISCARDABLE?????"BM_M2.bmp"BM_M3???????????????????BITMAP??DISCARDABLE?????"BM_M3.bmp"BM_M4???????????????????BITMAP??DISCARDABLE?????"BM_M4.bmp"BM_M5???????????????????BITMAP??DISCARDABLE?????"BM_M5.bmp"#endif????//?Chinese?(中國)?resources #ifndef?APSTUDIO_INVOKED #endif????//?not?APSTUDIO_INVOKED
?
//頭文件 resource.h
#ifdef?APSTUDIO_INVOKED #ifndef?APSTUDIO_READONLY_SYMBOLS #define?_APS_NEXT_RESOURCE_VALUE????????114 #define?_APS_NEXT_COMMAND_VALUE?????????40001 #define?_APS_NEXT_CONTROL_VALUE?????????1000 #define?_APS_NEXT_SYMED_VALUE???????????101 #endif #endif ?
//程序運行效果圖
?
?
?
//程序完整源碼下載地址(附加可執行文件)
http://download.csdn.net/source/837221
總結
以上是生活随笔為你收集整理的超级哄女孩工具之一千枝会动的玫瑰实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。