📄 todaywindow.cpp
字号:
// TodayWindow.cpp: implementation of the CTodayWindow class.
//
//////////////////////////////////////////////////////////////////////
#include "TodayWindow.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTodayWindow::CTodayWindow()
{
m_hWnd = NULL;
}
CTodayWindow::CTodayWindow(HINSTANCE hInstance, LPCTSTR lpszClassName, LPCTSTR lpszWindowName)
{
m_lpszClassName = lpszClassName;
m_lpszWindowName = lpszWindowName;
m_hInstance = hInstance;
CTodayWindow();
}
CTodayWindow::~CTodayWindow()
{
if (m_hIcon)
DestroyIcon(m_hIcon);
if (m_hNormalTodayFont)
DeleteObject(m_hNormalTodayFont);
if (m_hBoldTodayFont)
DeleteObject(m_hBoldTodayFont);
}
//////////////////////////////////////////////////////////////////////
// Create TodayWindow with given parent and style
//////////////////////////////////////////////////////////////////////
BOOL CTodayWindow::Create(HWND hWndParent, DWORD dwStyle)
{
m_bInitialRefresh = TRUE;
m_hParentHwnd = hWndParent;
m_hWnd = CreateWindow(m_lpszClassName, m_lpszWindowName, dwStyle, 0, 0, GetSystemMetrics(SM_CXSCREEN), 0, m_hParentHwnd, NULL, m_hInstance, NULL);
// Get default today attributes
GetTodayDefaults();
return (m_hWnd != NULL);
}
//////////////////////////////////////////////////////////////////////
// Register/Unregister TodayWindowClass
//////////////////////////////////////////////////////////////////////
void CTodayWindow::RegisterTodayClass(WNDPROC wndProc)
{
WNDCLASS wndClass;
memset(&wndClass, 0, sizeof(wndClass));
wndClass.hCursor = 0;
wndClass.hIcon = 0;
wndClass.hInstance = m_hInstance;
wndClass.lpszClassName = m_lpszClassName;
wndClass.lpszMenuName = NULL;
wndClass.style = CS_VREDRAW | CS_HREDRAW;
wndClass.hbrBackground = (HBRUSH)GetStockObject(HOLLOW_BRUSH);
wndClass.lpfnWndProc = wndProc;
RegisterClass(&wndClass);
}
void CTodayWindow::UnregisterTodayClass()
{
if (m_hInstance)
UnregisterClass(m_lpszClassName, m_hInstance);
}
//////////////////////////////////////////////////////////////////////
// Set Methods
//////////////////////////////////////////////////////////////////////
BOOL CTodayWindow::SetIcon(UINT uID, int xDrawAt, int yDrawAt)
{
if (m_hIcon)
{
DestroyIcon(m_hIcon);
m_hIcon = NULL;
}
if (m_hInstance)
{
m_hIcon = (HICON)LoadImage(m_hInstance, MAKEINTRESOURCE(uID), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
m_pointIconPos.x = xDrawAt;
m_pointIconPos.y = yDrawAt;
}
return (m_hIcon != NULL);
}
void CTodayWindow::SetItemHeight(int nHeight)
{
m_nHeight = nHeight;
}
void CTodayWindow::SetClassInfo(LPCTSTR lpszClassName, LPCTSTR lpszWindowName)
{
m_lpszClassName = lpszClassName;
m_lpszWindowName = lpszWindowName;
}
void CTodayWindow::SetInstance(HINSTANCE hInstance)
{
m_hInstance = hInstance;
}
void CTodayWindow::RefreshWindow(BOOL bShow)
{
if (m_hWnd)
{
if (bShow)
ShowWindow(m_hWnd, SW_SHOWNORMAL);
RECT rect;
GetClientRect(m_hWnd, &rect);
InvalidateRect(m_hWnd, &rect, TRUE);
UpdateWindow(m_hWnd);
}
}
//////////////////////////////////////////////////////////////////////
// Main WndProc
//////////////////////////////////////////////////////////////////////
LRESULT CTodayWindow::TodayWndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE :
{
LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
if (OnCreate(lpcs) == -1)
return -1;
}
break;
case WM_DESTROY :
{
OnDestroy();
return 0;
}
case WM_PAINT :
{
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(m_hWnd, &ps);
DrawTodayIcon(hDC);
OnPaint(hDC);
EndPaint(m_hWnd, &ps);
}
break;
case WM_ERASEBKGND :
{
HDC hDC = (HDC)wParam;
OnEraseBkgnd(hDC);
return TRUE;
}
case WM_TODAYCUSTOM_CLEARCACHE :
{
TODAYLISTITEM *ptli = (TODAYLISTITEM *)wParam;
return (LRESULT)OnTodayCustomClearCache(ptli);
}
case WM_TODAYCUSTOM_QUERYREFRESHCACHE :
{
BOOL bResult = FALSE;
TODAYLISTITEM *ptli = (TODAYLISTITEM *)wParam;
if (m_bInitialRefresh)
{
ptli->cyp = m_nHeight;
m_bInitialRefresh = FALSE;
bResult = TRUE;
}
OnTodayCustomQueryRefreshCache(ptli, &bResult);
return (LRESULT)bResult;
}
case WM_LBUTTONDOWN :
{
POINT point;
point.x = LOWORD(lParam);
point.y = HIWORD(lParam);
OnLButtonDown(wParam, point);
return 0;
}
case WM_LBUTTONUP :
{
POINT point;
point.x = LOWORD(lParam);
point.y = HIWORD(lParam);
OnLButtonUp(wParam, point);
return 0;
}
case WM_SETTINGCHANGE :
{
OnSettingChange(wParam, (LPCTSTR)lParam);
return 0;
}
case WM_NOTIFY :
{
NMHDR* pNMHDR = (NMHDR*)lParam;
return OnNotify(wParam, pNMHDR);
}
default :
return OnMessage(uMsg, wParam, lParam);
}
return DefWindowProc(m_hWnd, uMsg, wParam, lParam);
}
//////////////////////////////////////////////////////////////////////
// Virtual message handlers - these are predefined and overridable
//////////////////////////////////////////////////////////////////////
int CTodayWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
return 0;
}
void CTodayWindow::OnDestroy()
{
DefWindowProc(m_hWnd, WM_DESTROY, 0, 0);
}
void CTodayWindow::OnPaint(HDC hDC)
{
}
void CTodayWindow::OnEraseBkgnd(HDC hDC)
{
TODAYDRAWWATERMARKINFO dwi;
dwi.hdc = hDC;
GetClientRect(m_hWnd, &dwi.rc);
dwi.hwnd = m_hWnd;
SendMessage(m_hParentHwnd, TODAYM_DRAWWATERMARK, 0,(LPARAM)&dwi);
}
void CTodayWindow::OnLButtonUp(UINT nFlags, POINT point)
{
DefWindowProc(m_hWnd, WM_LBUTTONUP, nFlags, MAKELONG(point.x, point.y));
}
void CTodayWindow::OnLButtonDown(UINT nFlags, POINT point)
{
DefWindowProc(m_hWnd, WM_LBUTTONDOWN, nFlags, MAKELONG(point.x, point.y));
}
void CTodayWindow::OnTodayCustomQueryRefreshCache(TODAYLISTITEM *pTodayListItem, BOOL *bResult)
{
}
BOOL CTodayWindow::OnTodayCustomClearCache(TODAYLISTITEM *pTodayListItem)
{
return FALSE;
}
void CTodayWindow::OnSettingChange(UINT nFlags, LPCTSTR lpszSection)
{
}
LRESULT CTodayWindow::OnNotify(UINT nID, NMHDR* pNMHDR)
{
return 0;
}
LRESULT CTodayWindow::OnMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(m_hWnd, uMsg, wParam, lParam);
}
// Other protected virtual methods
void CTodayWindow::DrawTodayIcon(HDC hDC)
{
if (m_hIcon)
{
SetBkMode(hDC, TRANSPARENT);
::DrawIcon(hDC, m_pointIconPos.x, m_pointIconPos.y, m_hIcon);
}
}
void CTodayWindow::GetTodayDefaults()
{
LOGFONT lf;
HFONT hSysFont;
// Default today item font color
m_crTodayText = SendMessage(m_hParentHwnd, TODAYM_GETCOLOR, (WPARAM)TODAYCOLOR_TEXT, NULL);
// Default today fonts
hSysFont = (HFONT)GetStockObject(SYSTEM_FONT);
GetObject(hSysFont, sizeof(LOGFONT), &lf);
HDC hdc = GetDC(m_hWnd);
lstrcpy(lf.lfFaceName, _T("Tahoma"));
lf.lfHeight = -1 * (17 * GetDeviceCaps(hdc, LOGPIXELSY) / 72) / 2;
ReleaseDC(m_hWnd, hdc);
// Normal text
lf.lfWeight = FW_NORMAL;
m_hNormalTodayFont = CreateFontIndirect(&lf);
// Bold text
lf.lfWeight = FW_BOLD;
m_hBoldTodayFont = CreateFontIndirect(&lf);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -