返回列表 发帖

[原创]发一个纯绿色的屏幕保护程序,有源码

[watermark]因为这个屏保的颜色是绿色的,所以,大家表误会了。 东西很简单,就一个架子。大家可以方便地在其中加入自己的东东。小照片呀。。。 这个东西虽简单,但是做起来还是有点麻烦。windows提供了一个ScrnSaver.lib。在其中已经封装好了主入口函数和消息响应函数。以及其他几个资源。 我们要做的就是实现几个函数,由windows调用。 好了,废话少说,代码如下:
#include #include #ifndef ULONG_PTR #define ULONG_PTR DWORD #endif #include using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") #include "resource.h" void DrawTime(HDC hdc) { WCHAR SlideText[64]; SYSTEMTIME st = {sizeof(st)}; GetLocalTime(&st); Graphics graphics(hdc); FontFamily fontFamily(L"Times New Roman"); Font font(&fontFamily, 24, FontStyleRegular, UnitPixel); SolidBrush brush(Color(255, 0, 255, 0)); wsprintfW(SlideText, L"%04d/%02d/%02d 星期 %d %02d:%02d:%02d BJT", st.wYear, st.wMonth, st.wDay, st.wDayOfWeek, st.wHour, st.wMinute, st.wSecond); graphics.DrawString(SlideText, wcslen(SlideText), &font, PointF(400.0, 300.0), &brush); } // 定义三个基本的函数 LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; RECT rc; static UINT timerID; GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; // Initialize GDI+. GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); // 定时器 switch(message) { case WM_CREATE: timerID = SetTimer(hWnd, 1, 1000, NULL); // 设置定时器 break; case WM_ERASEBKGND: //空操作,交由DefScreenSaverProc处理 break; case WM_TIMER: hDC = GetDC(hWnd); // 清屏 SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); FillRect(hDC,&rc,(HBRUSH)GetStockObject(BLACK_BRUSH)); DrawTime(hDC); ReleaseDC(hWnd, hDC); break; case WM_DESTROY: KillTimer(hWnd, timerID);// 删除定时器 PostQuitMessage(0); return 0; default: return DefScreenSaverProc(hWnd, message, wParam, lParam); } GdiplusShutdown(gdiplusToken); return FALSE; } BOOL WINAPI ScreenSaverConfigureDialog(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch ( message ) { case WM_INITDIALOG: SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)LoadIcon((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(ID_APP))); SendMessage(hWnd,WM_SETICON,ICON_SMALL,(LPARAM)LoadIcon((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),MAKEINTRESOURCE(ID_APP))); return TRUE; case WM_COMMAND: if(LOWORD(wParam) == IDOK) { EndDialog(hWnd, LOWORD(wParam)); return TRUE; } break; } return FALSE; } BOOL WINAPI RegisterDialogClasses(HANDLE hInstance) {//一般不需要,仅返回TRUE return TRUE; }
整个工程 第三次更新见后面的三楼回复。 前面一个版本存在内存泄露问题呀,恢复之后,半天才能正常。 更新版本已经解决这个问题拉。

[原创]发一个纯绿色的屏幕保护程序,有源码

现在还只能看懂一点...

TOP

[原创]发一个纯绿色的屏幕保护程序,有源码

新的文件,效果感觉还可以的,嘿嘿! :13:

TOP

[原创]发一个纯绿色的屏幕保护程序,有源码

解决了内存泄露以及占用内存过多的问题。

TOP

和我写的机顶盒程序差不多。
嘿嘿,大学的编程老友 734 # 301!

TOP

返回列表 回复 发帖