日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超级哄女孩工具之一千枝会动的玫瑰实现

發(fā)布時間:2024/1/8 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超级哄女孩工具之一千枝会动的玫瑰实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

相信有好多朋友都知道這個程序? 但是沒給源碼? 呵呵? 其實我們可以自己實現(xiàn)的? 代碼很簡單(另外這里 玫瑰并不止1000朵 而是無數(shù)朵 因為簡單起見 沒加玫瑰的統(tǒng)計代碼? 呵呵)

現(xiàn)簡單介紹實現(xiàn)過程
首先打開VC++ 6.0??新建個 “Win32 Application” 工程??工程名就叫“Roses”吧
然后要做的是 下載原來的那個“一千枝會動的玫瑰” 然后我們用“eXeScope”提取里面的6張位圖 和相應(yīng)的6張掩碼位圖??加入到我們的工程
分別給6張位圖的ID 命名為:"BM_I0"、"BM_I1"、...、"BM_I5"
給6張位圖對應(yīng)的掩碼位圖ID 命名為:"BM_M0"、"BM_M1"、...、"BM_M5"
OK

因為那個“一千枝會動的玫瑰”運行后按鼠標左鍵 或者 鍵盤退出
所以個人覺得 此程序運行后是最大化的 并且程序的窗口是透明的,
但是窗口透明的話,畫上去的位圖不就看不到了,這個問題也是想了比較久。
最后想了個投機取巧的辦法,給GetDC函數(shù)傳NULL,以檢索整個屏幕的設(shè)備上下文環(huán)境
不知道原程序是如何實現(xiàn)的
這樣再畫圖就沒問題了

好了下面代碼:

  • /*==============================
  • Roses.cpp?--?一千朵玫瑰
  • ??(c)?Snow-dream,?2008
  • ??QQ:529698939
  • ??E-mail:xzm2@qq.com
  • ??編寫日期:2008-12-3
  • ??VC?6.0環(huán)境下編譯通過
  • ===============================*/
  • #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??//圖片數(shù)
  • //因為沒有導出SetLayeredWindowAttributes?API?所以要我們自己到user32.dll里搜索
  • typedef?BOOL?(WINAPI?*LPFNSETLAYEREDWINDOWATTRIBUTES)
  • (HWND?hwnd,COLORREF?crKey,BYTE?bAlpha,DWORD?dwFlags)?;
  • LRESULT?CALLBACK?WndProc?(HWND,?UINT,?WPARAM,?LPARAM)?;
  • //設(shè)置窗口的透明度?hwnd是被設(shè)置的窗口?byAlpha是指示了透明度(0完全透明?255完全不透明)
  • 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("設(shè)置窗口擴展樣式失敗!"),?NULL,?MB_OK)?;
  • ????????????????return?FALSE?;
  • ????????}
  • ????????bRet?=?lpSetLayeredWindowAttributes(hwnd,?0,?byAlpha,?LWA_ALPHA)?;
  • ????????if(!bRet)
  • ????????{
  • ????????????????MessageBox(hwnd,?TEXT("設(shè)置窗口透明度失敗!"),?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())?;?//初始化隨機數(shù)發(fā)生器
  • ????????//?創(chuàng)建主窗口?讓窗口最大化
  • ????????hwnd?=?CreateWindow?(szAppName,?TEXT?("玫瑰花"),
  • ????????????????WS_DLGFRAME?|?WS_POPUP,
  • ????????????????0,?0,
  • ????????????????GetSystemMetrics(SM_CXSCREEN),
  • ????????????????GetSystemMetrics(SM_CYSCREEN),
  • ????????????????NULL,?NULL,?hInstance,?NULL)?;
  • ????
  • ????????TransparentWnd(hwnd,?1)?;?//設(shè)置窗口透明度
  • ????????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)?;?//載入相應(yīng)的屏蔽位圖
  • ????????????????}
  • ????????????????SetTimer(hwnd,?ID_TIMER,?100,?NULL)?;?//設(shè)置定時器100毫秒
  • ????????????????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?;
  • ????????????????//?創(chuàng)建一個與指定設(shè)備兼容的內(nèi)存設(shè)備上下文環(huán)境(DC)
  • ????????????????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)?;?//釋放設(shè)備上下文環(huán)境(DC)
  • ????????????????//x、y為位圖顯示的坐標
  • ????????????????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)?;
  • ????????????????//刪除指定的設(shè)備上下文環(huán)境(DC)
  • ????????????????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

  • //Microsoft?Developer?Studio?generated?resource?script.
  • //
  • #include?"resource.h"
  • #define?APSTUDIO_READONLY_SYMBOLS
  • /
  • //
  • //?Generated?from?the?TEXTINCLUDE?2?resource.
  • //
  • #include?"afxres.h"
  • /
  • #undef?APSTUDIO_READONLY_SYMBOLS
  • /
  • //?Chinese?(中國)?resources
  • #if?!defined(AFX_RESOURCE_DLL)?||?defined(AFX_TARG_CHS)
  • #ifdef?_WIN32
  • LANGUAGE?LANG_CHINESE,?SUBLANG_CHINESE_SIMPLIFIED
  • #pragma?code_page(936)
  • #endif?//_WIN32
  • /
  • //
  • //?Icon
  • //
  • //?Icon?with?lowest?ID?value?placed?first?to?ensure?application?icon
  • //?remains?consistent?on?all?systems.
  • ROSES???????????????????ICON????DISCARDABLE?????"rose.ico"
  • #ifdef?APSTUDIO_INVOKED
  • /
  • //
  • //?TEXTINCLUDE
  • //
  • 1?TEXTINCLUDE?DISCARDABLE?
  • BEGIN
  • ????"resource.h/0"
  • END
  • 2?TEXTINCLUDE?DISCARDABLE?
  • BEGIN
  • ????"#include?""afxres.h""/r/n"
  • ????"/0"
  • END
  • 3?TEXTINCLUDE?DISCARDABLE?
  • BEGIN
  • ????"/r/n"
  • ????"/0"
  • END
  • #endif????//?APSTUDIO_INVOKED
  • /
  • //
  • //?Bitmap
  • //
  • 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
  • /
  • //
  • //?Generated?from?the?TEXTINCLUDE?3?resource.
  • //
  • /
  • #endif????//?not?APSTUDIO_INVOKED
  • ?

    //頭文件 resource.h

  • //{{NO_DEPENDENCIES}}
  • //?Microsoft?Developer?Studio?generated?include?file.
  • //?Used?by?Roses.rc
  • //
  • //?Next?default?values?for?new?objects
  • //?
  • #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
  • ?

    //程序運行效果圖

    ?

    ?

    ?

    //程序完整源碼下載地址(附加可執(zhí)行文件)

    http://download.csdn.net/source/837221

    總結(jié)

    以上是生活随笔為你收集整理的超级哄女孩工具之一千枝会动的玫瑰实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。