资源简介
相信有好多朋友都知道这个程序 但是没给源码 呵呵 其实我们可以自己实现的 代码很简单(为了简单 其实玫瑰是无数朵的 不是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,以检索整个屏幕的设备上下文环境
不知道原程序是如何实现的
这样再画图就没问题了
关于
程序的介绍在:
http://blog./xuezhimeng/archive/2008/12/04/3445820.aspx
现简单介绍实现过程
首先打开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,以检索整个屏幕的设备上下文环境
不知道原程序是如何实现的
这样再画图就没问题了
关于
程序的介绍在:
http://blog./xuezhimeng/archive/2008/12/04/3445820.aspx
代码片段和文件信息
/*==============================
Roses.cpp -- 一千朵玫瑰
(c) Snow-dream 2008
QQ:529698939
E-mail:xzm2@qq.com
编写日期:2008-12-3
VC 6.0环境下编译通过
===============================*/
#include
#include
#include “resource.h“
#define WS_EX_layerED 0x00080000
#define LWA_ALPHA 0x00000002
#define LWA_COLORKEY 0x00000001
#define ID_TIMER 1
#define IMGCOUNT 6 //图片数
//因为没有导出SetlayeredWindowAttributes API 所以要我们自己到user32.dll里搜索
typedef BOOL (WINAPI *LPFNSETlayerEDWINDOWATTRIBUTES)
(HWND hwndCOLORREF crKeyBYTE bAlphaDWORD dwFlags) ;
LRESULT CALLBACK WndProc (HWND UINT WPARAM LPARAM) ;
//设置窗口的透明度 hwnd是被设置的窗口 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(“设置窗口扩展样式失败!“) 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_C
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5831 2008-12-04 14:14 Roses\Roses.cpp
文件 48640 2008-12-04 14:15 Roses\Roses.opt
文件 1077248 2008-12-03 15:40 Roses\Roses.exe
文件 518 2008-12-03 10:55 Roses\Roses.dsw
文件 160838 2008-12-03 11:33 Roses\rose.ico
文件 91812 2008-12-03 11:34 Roses\BM_I0.bmp
文件 90056 2008-12-03 11:34 Roses\BM_I1.bmp
文件 90054 2008-12-03 11:34 Roses\BM_I2.bmp
文件 30382 2008-12-03 11:34 Roses\BM_I3.bmp
文件 45708 2008-12-03 11:34 Roses\BM_I4.bmp
文件 90056 2008-12-03 11:34 Roses\BM_I5.bmp
文件 91812 2008-12-03 12:02 Roses\BM_M0.bmp
文件 90056 2008-12-03 12:02 Roses\BM_M1.bmp
文件 90054 2008-12-03 12:02 Roses\BM_M2.bmp
文件 30382 2008-12-03 12:02 Roses\BM_M3.bmp
文件 45708 2008-12-03 12:02 Roses\BM_M4.bmp
文件 90056 2008-12-03 12:02 Roses\BM_M5.bmp
文件 4835 2008-12-03 12:10 Roses\Roses.dsp
文件 409 2008-12-03 12:10 Roses\resource.h
文件 1070248 2008-12-03 12:10 Roses\Roses.aps
文件 2550 2008-12-03 12:10 Roses\Roses.rc
目录 0 2008-12-03 10:55 Roses
----------- --------- ---------- ----- ----
3247253 22
- 上一篇:数据结构考前习题 清华大学出版社
- 下一篇:C 实现的即时通讯工具源码
评论
共有 条评论