#include "CDeskTimeWnd.h"
struct WNDMSG
{
UINT uMsg;
long (CDeskTimeWnd::*pFn)(WPARAM wParam, LPARAM lParam);
};
WNDMSG CDeskTimeWnd::m_wndMsg[]={
//Add Message map
{WM_CREATE,&CDeskTimeWnd::OnCreate},
{WM_DESTROY,&CDeskTimeWnd::OnDestory},
{WM_TIMER,&CDeskTimeWnd::OnTimer},
{WM_NCDESTROY,&CDeskTimeWnd::OnNcDestroy},
{WM_POWERBROADCAST,&CDeskTimeWnd::OnPowerBroadcast},
};
CDeskTimeWnd* CDeskTimeWnd::m_pThis = NULL;
CDeskTimeWnd::CDeskTimeWnd()
{
this->m_hInstance = NULL;
this->m_hWnd = NULL;
this->m_pThis = this;
m_szClassName = TEXT("DeskTimeWnd");
hPowerSource = NULL;
hPercentageRemain = NULL;
m_bThreadRun = FALSE;
//获取屏幕尺寸
m_nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
m_nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
//Clock
m_nClockRadius = m_nScreenHeight / 3; //表盘半径
OriginPoint.X = m_nClockRadius + 20;
OriginPoint.Y = m_nClockRadius + 20;
//charge
m_nSmallCircleRadius = m_nScreenHeight / 8;
OriginChargePoint.X = m_nSmallCircleRadius;
OriginChargePoint.Y = m_nSmallCircleRadius;
m_ChargeSize.cx = 190;
m_ChargeSize.cy = 80;
m_szSignature = TEXT("竹林听雨");
m_birthday = CTime(2016, 1, 16, 12, 57, 00);
m_Blend.BlendOp = 0; //theonlyBlendOpdefinedinWindows2000--blend opration
m_Blend.BlendFlags = 0; //nothingelseisspecial...must be zero
m_Blend.AlphaFormat = 1; //...
m_Blend.SourceConstantAlpha = 180;//AC_SRC_ALPHA
}
CDeskTimeWnd::~CDeskTimeWnd()
{
}
/*
* 格式化GetLastError()
*/
CString CDeskTimeWnd::szFormatMessage(DWORD dwErrorCode)
{
CString szvar;
LPVOID lpv;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, \
NULL, \
dwErrorCode, \
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
(LPTSTR)&lpv, \
0, \
NULL);
if (lpv)
{
szvar = (LPCTSTR)lpv;
HeapFree((HANDLE)GetProcessHeap(), HEAP_NO_SERIALIZE, lpv);
}
return szvar;
}
/*
* 查找桌面的句柄
*/
HWND CDeskTimeWnd::FindDesktopHandle()
{
HWND hWorkerW = NULL, hDefView = NULL;
HWND hDesktop = NULL;
// hDesktop = GetDesktopWindow();
// hWorkerWChild = GetAncestor(hDesktop,GA_PARENT);
// hWorkerW = GetParent(hWorkerWChild);
hWorkerW = ::FindWindow(TEXT("Progman"), NULL);
hDefView = ::FindWindowEx(hWorkerW, NULL, L"SHELLDLL_DefView", NULL);
if (hDefView != NULL)
return hWorkerW;
do
{
hWorkerW = ::FindWindowEx(NULL, hWorkerW, L"WorkerW", NULL);
hDefView = ::FindWindowEx(hWorkerW, NULL, L"SHELLDLL_DefView", NULL);
} while ((hWorkerW == NULL) ||(hDefView == NULL));
hWorkerW = ::FindWindowEx(NULL, hWorkerW, L"WorkerW", NULL);
hDesktop = ::FindWindowEx(hDefView, NULL, L"SysListView32", L"FolderView");
return hWorkerW;
// int Nm = ListView_GetItemCount(hDesktop);
// for (int i = 0; i < Nm; i++)
// {
// int x = 400 + 150 * cos(i * 36 * 3.1415926 / 180);
// int y = 400 + 150 * sin(i * 36 * 3.1415926 / 180);
//
// ::SendMessage(hDesktop, LVM_SETITEMPOSITION, i, MAKELPARAM(x, y));
// }
// ListView_RedrawItems(hDesktop, 0, ListView_GetItemCount(hDesktop) - 1);
// ::UpdateWindow(hDesktop);
}
/*
* 初始化窗口
*/
UINT CDeskTimeWnd::InitApp(HINSTANCE hInst, int nShowCmd /* = SW_SHOWNORMAL */)
{
this->m_hInstance = hInst;
Gdiplus::GdiplusStartupInput m_Gdiplusstartup;
ULONG_PTR m_Gdiplustoken;
//启动GDI+
GdiplusStartup(&m_Gdiplustoken, &m_Gdiplusstartup, NULL);
CreateWnd(hInst, nShowCmd);
MSG msg;
while (::GetMessage(&msg, NULL, 0, 0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
//关闭gdiplus的环境
GdiplusShutdown(m_Gdiplustoken);
return (UINT)msg.wParam;
}
/*
* 创建窗口
*/
void CDeskTimeWnd::CreateWnd(HINSTANCE hInst, int nShowCmd)
{
m_hWndParent = FindDesktopHandle();
HWND hwnd;
WNDCLASSEX wndClass = { 0 }; //注册窗口类
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = CS_NOCLOSE;
wndClass.lpfnWndProc = (WNDPROC)WinProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInst;
wndClass.hIcon = NULL;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetSysColor(TRANSPARENT)/*(HBRUSH)(COLOR_WINDOW + 1)*/;
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = m_szClassName;
wndClass.hIconSm = NULL;
if (!::RegisterClassEx(&wndClass))
{
#ifdef DEBUG
OutputDebugString(szFormatMessage(GetLastError()));
#endif // DEBUG
return;
}
hwnd = CreateWindowEx(WS_EX_TRANSPARENT | WS_EX_LAYERED /*| WS_EX_TOOLWINDOW | WS_EX_NOPARENTNOTIFY*/ | WS_EX_NOACTIVATE,
m_szClassName, NULL,
~(WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_OVERLAPPEDWINDOW | WS_CAPTION) | WS_CHILD| WS_DISABLED,
0, 0, m_nScreenWidth, m_nScreenHeight, NULL, NULL, hInst, NULL);
if (!hwnd)
{
#ifdef DEBUG
OutputDebugString(szFormatMessage(GetLastError()));
#endif // DEBUG
return;
}
::ShowWindow(hwnd,nShowCmd);
::UpdateWindow(hwnd);
}
/*
* Window process function
*/
LRESULT CALLBACK CDeskTimeWnd::WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
m_pThis->m_hWnd = hWnd;
for (int i = 0; i < sizeof(m_wndMsg) / sizeof(m_wndMsg[0]); i++)
{
if (uMsg == m_wndMsg[i].uMsg)
{
return (m_pThis->*(m_wndMsg[i].pFn))(wParam, lParam);
}
}
#ifdef DEBUG
CString szInfo;
szInfo.Format(TEXT("\r\nMSG:%x--WPARAM:%x--LPARAM:%x"), uMsg, wParam, lParam);
OutputDebugString(szInfo);
#endif // DEBUG
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
/************************************************************************/
/* MESSAGE */
/************************************************************************/
long CDeskTimeWnd::OnCreate(WPARAM wParam, LPARAM lParam)
{
HINSTANCE m_hUser32Instance = LoadLibrary(L"User32.dll");
if (!m_hUser32Instance)
exit(0);
SetParent(m_hWnd, m_hWndParent);
InitGlobalParam();
return 0;
}
long CDeskTimeWnd::OnDestory(WPARAM wParam, LPARAM lParam)
{
DeleteDC(m_hdcMemoryClockLayer);
m_hdcMemoryClockLayer = NULL;
if(hPowerSource !=NULL)
{
UnregisterPowerSettingNotification(hPowerSource);
hPowerSource = NULL;
}
if (hPercentageRemain != NULL)
{
UnregisterPowerSettingNotification(hPercentageRemain);
hPercentageRemain = NULL;
}
KillTimer(m_hWnd, _Timer_Num);
PostQuitMessage(0);
return 0;
}
long CDeskTimeWnd::OnNcDestroy(WPARAM wParam, LPARAM lParam)
{
return OnDestory(wParam, lParam);
}
long CDeskTimeWnd::OnPowerBroadcast(WPARAM wParam, LPARAM lParam)
{
POWERBROADCAST_SETTING* ppbs = (POWERBROADCAST_SETTING*)lParam;
if (wParam == PBT_POWERSETTINGCHANGE)
{
if (memcmp(&ppbs->PowerSetting, &GUID_ACDC_POWER_SOURCE, sizeof(GUID)) == 0)
{
m_nPowerSource = *ppbs->Data;
}
if (memcmp(&ppbs->PowerSetting, &GUID_BATTERY_PERCENTAGE_REMAINING, sizeof(GUID)) == 0)
{
m_nPowerPercentage = *ppbs->Data;
}
UpdateBatteryLayer();
}
return 0;
}
long CDeskTimeWnd::OnTimer(WPARAM wParam, LPARAM lParam)
{
DWORD dwCount = 0;
CTime time = CTime::GetCurrentTime();
CString szInfo;
if(wParam==_Timer_Num)
{
if(m_bThreadRun)
{
dwCount = SuspendThread(m_hUpdateDisplayThread);
m_bThreadRun = FALSE;
}
if ((m_nDisplayDay != time.GetDay()))
UpdateCalendarLayer(time);
UpdateClockLayer(time.GetHour(),time.GetMinute(),time.GetSecond());
UpdateCPULayer();
UpdateMemoryLayer();
if (!m_bThreadRun)
{
dwCount = ResumeThread(m_hUpdateDisplayThread);
m_bThre
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
DeskTime2.zip (62个子文件)
DeskTime2
DeskTime.VC.db 68.89MB
Debug
DeskTime.exe 208KB
DeskTime.pdb 3.96MB
DeskTime.ilk 1.77MB
.vs
DeskTime
v14
.suo 71KB
DeskTime
CPUUseRate.h 765B
Debug
DeskTime.log 200B
vc140.pdb 916KB
vc140.idb 1.06MB
Lunar.obj 369KB
DeskTime.tlog
CL.read.1.tlog 126KB
link.read.1.tlog 4KB
link.write.1.tlog 922B
CL.write.1.tlog 3KB
DeskTime.lastbuildstate 210B
link.command.1.tlog 2KB
CL.command.1.tlog 3KB
CDeskTimeWnd.obj 563KB
CPUUseRate.obj 351KB
main.obj 290KB
Lunar.h 2KB
CDeskTimeWnd.cpp 50KB
DeskTime.vcxproj.filters 2KB
DeskTime.vcxproj 8KB
x64
Release
DeskTime.log 4KB
vc140.pdb 540KB
Lunar.obj 1.37MB
DeskTime.tlog
unsuccessfulbuild 0B
CL.read.1.tlog 104KB
link.read.1.tlog 2B
link.write.1.tlog 2B
CL.write.1.tlog 2KB
DeskTime.lastbuildstate 206B
link.command.1.tlog 2B
CL.command.1.tlog 2KB
CDeskTimeWnd.obj 1.41MB
main.obj 1.34MB
main.cpp 310B
Release
DeskTime.log 394B
vc140.pdb 572KB
Lunar.obj 1.48MB
DeskTime.tlog
CL.read.1.tlog 125KB
link.read.1.tlog 5KB
link.write.1.tlog 1KB
CL.write.1.tlog 2KB
DeskTime.lastbuildstate 212B
link.command.1.tlog 2KB
CL.command.1.tlog 3KB
CDeskTimeWnd.obj 1.56MB
CPUUseRate.obj 1.47MB
main.obj 1.45MB
Lunar.cpp 23KB
DeskTime.vcxproj.user 165B
CDeskTimeWnd.h 4KB
StdAfx.h 250B
CPUUseRate.cpp 8KB
x64
Release
Release
DeskTime.exe 52KB
DeskTime.iobj 666KB
DeskTime.pdb 2.63MB
DeskTime.zip 21KB
DeskTime.ipdb 195KB
DeskTime.sln 1KB
共 62 条
- 1
资源评论
gui195615796
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功