⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 todaywindow.cpp

📁 windows ce today plugin with options dialog
💻 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 + -