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

📄 todayoptionsdialog.cpp

📁 windows ce today plugin with options dialog
💻 CPP
字号:
// TodayOptionsDialog.cpp: implementation of the CTodayOptionsDialog class.
//
//////////////////////////////////////////////////////////////////////

#include "TodayOptionsDialog.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTodayOptionsDialog::CTodayOptionsDialog()
{
}

CTodayOptionsDialog::CTodayOptionsDialog(HINSTANCE hInstance, CTodayWindow *pToday, BOOL bFullScreen)
{
	CTodayOptionsDialog();

	m_hInstance = hInstance;
	m_bFullScreen = bFullScreen;
	m_hWnd = NULL;
	m_lpszTitle = _T("");
	m_nTitleHeight = 23;
	m_pWndTW = pToday;

	memset(&m_sai, 0, sizeof(SHACTIVATEINFO));
	m_sai.cbSize = sizeof(SHACTIVATEINFO);
}

CTodayOptionsDialog::~CTodayOptionsDialog()
{
	if (m_hTitleFont)
		DeleteObject(m_hTitleFont);
}

//////////////////////////////////////////////////////////////////////
// Main WndProc
//////////////////////////////////////////////////////////////////////
LRESULT CTodayOptionsDialog::TodayOptionsWndProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	m_hWnd = hDlg;

	switch (uMsg)
	{
	case WM_INITDIALOG :
		{
			TODAYLISTITEM *ptli = (TODAYLISTITEM*)lParam;

			return (LRESULT)OnInitDialog(ptli);
		}
	case WM_DESTROY :
		{
			OnDestroy();

			return 0;
		}
	case WM_COMMAND :
		{
			UINT nID = LOWORD(wParam);

			if (nID == IDOK)
			{
				OnOK();
				return 0;
			}
			else if (nID == IDCANCEL)
			{
				OnCancel();
				return 0;
			}

			OnCommand(nID, HIWORD(wParam), (HWND)lParam);
			return 0;
		}
	case WM_SETTINGCHANGE :
		{
			OnSettingChange(wParam, (LPCTSTR)lParam);

			return 0;
		}
	case WM_NOTIFY :
		{
			NMHDR* pNMHDR = (NMHDR*)lParam;

			return OnNotify(wParam, pNMHDR);
		}
	case WM_PAINT :
		{
            PAINTSTRUCT ps;
            HDC hDC;

            hDC = BeginPaint(m_hWnd, &ps);

			DrawDialogTitle(hDC);

			OnPaint(hDC);

			EndPaint(m_hWnd, &ps);
		}

		break;
	case WM_ACTIVATE :
		{
			SHHandleWMActivate(m_hWnd, wParam, lParam, &m_sai, FALSE);

			OnActivate(LOWORD(wParam), (HWND)lParam, (BOOL)HIWORD(wParam));

			return 0;
		}
	default :
		return OnMessage(uMsg, wParam, lParam);
	}

	return DefWindowProc(m_hWnd, uMsg, wParam, lParam);
}

//////////////////////////////////////////////////////////////////////
// Association with option dialog created by system
//////////////////////////////////////////////////////////////////////
void CTodayOptionsDialog::AssociateWithOptionsDlg(HWND hWnd)
{
	if (m_hWnd = NULL)
	{
		m_hWnd = hWnd;
	}
}

void CTodayOptionsDialog::SetTitle(LPCTSTR lpszTitle, BOOL bRefresh)
{
	m_lpszTitle = lpszTitle;

	if (bRefresh)
		RefreshWindow();
}

void CTodayOptionsDialog::SetTitle(UINT nID, BOOL bRefresh)
{
	if (m_hInstance)
	{
		TCHAR szTitle[MAX_PATH + 1];
		LoadString(m_hInstance, nID, szTitle, MAX_PATH);
		m_lpszTitle = szTitle;

		if (bRefresh)
			RefreshWindow();
	}
}

void CTodayOptionsDialog::RefreshWindow()
{
	if (m_hWnd)
	{
		RECT rect;
		GetClientRect(m_hWnd, &rect);
		InvalidateRect(m_hWnd, &rect, TRUE);
		UpdateWindow(m_hWnd);
	}
}

//////////////////////////////////////////////////////////////////////
// Get Methods
//////////////////////////////////////////////////////////////////////
DWORD CTodayOptionsDialog::GetStyle()
{
	return GetWindowLong(m_hWnd, GWL_STYLE);
}

//////////////////////////////////////////////////////////////////////
// Message handlers
//////////////////////////////////////////////////////////////////////
BOOL CTodayOptionsDialog::OnInitDialog(TODAYLISTITEM *ptli)
{
	SHINITDLGINFO shidi;

	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN;

	if (m_bFullScreen)
		shidi.dwFlags |= SHIDIF_SIZEDLGFULLSCREEN;

	shidi.hDlg = m_hWnd;
	SHInitDialog(&shidi);

	GetDefaultTitleFont();

	return TRUE;
}

void CTodayOptionsDialog::OnOK()
{
	EndDialog(m_hWnd, IDOK);
}

void CTodayOptionsDialog::OnCancel()
{
	EndDialog(m_hWnd, IDCANCEL);
}

void CTodayOptionsDialog::OnCommand(UINT nID, UINT nNotifyCode, HWND hWndCtrl)
{
	DefWindowProc(m_hWnd, WM_COMMAND, MAKELONG(nID, nNotifyCode), (LPARAM)hWndCtrl);
}

void CTodayOptionsDialog::OnSettingChange(UINT nFlags, LPCTSTR lpszSection)
{
	if (!(GetStyle() & WS_CHILD))
	{
		SHHandleWMSettingChange(m_hWnd, (WPARAM)nFlags, (LPARAM)lpszSection, &m_sai);
	}
}

LRESULT CTodayOptionsDialog::OnNotify(UINT nID, NMHDR* pNMHDR)
{
	return 0;
}

LRESULT CTodayOptionsDialog::OnMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	return DefWindowProc(m_hWnd, uMsg, wParam, lParam);
}

void CTodayOptionsDialog::OnPaint(HDC hDC)
{
}

void CTodayOptionsDialog::OnDestroy()
{
	DefWindowProc(m_hWnd, WM_DESTROY, 0, 0);
}

void CTodayOptionsDialog::OnActivate(UINT nState, HWND hWndPrevious, BOOL bMinimized)
{
	if (!(GetStyle() & WS_CHILD))
	{
		SHHandleWMSettingChange(m_hWnd, MAKELONG((WORD)nState, (WORD)bMinimized), (LPARAM)hWndPrevious, &m_sai);
	}

	DefWindowProc(m_hWnd, WM_ACTIVATE, MAKELONG(nState, (WORD)bMinimized), (LPARAM)hWndPrevious);
}

//////////////////////////////////////////////////////////////////////
// Protected methods
//////////////////////////////////////////////////////////////////////
HWND CTodayOptionsDialog::ItemHandleFromID(UINT nID)
{
	HWND hWnd = NULL;

	if (m_hWnd)
		hWnd = GetDlgItem(m_hWnd, nID);

	return hWnd;
}

BOOL CTodayOptionsDialog::IsButtonChecked(UINT nID)
{
	LRESULT result;

	result = SendMessage(ItemHandleFromID(nID), BM_GETCHECK, 0, 0);

	return (result == BST_CHECKED);
}

void CTodayOptionsDialog::CheckButton(UINT nID, BOOL bCheck)
{
	SendMessage(ItemHandleFromID(nID), BM_SETCHECK, bCheck ? BST_CHECKED : BST_UNCHECKED, 0);
}

void CTodayOptionsDialog::CheckRadionButton(UINT nIDFirst, UINT nIDLast, UINT nIDToCheck)
{
	::CheckRadioButton(m_hWnd, nIDFirst, nIDLast, nIDToCheck);
}

void CTodayOptionsDialog::DrawDialogTitle(HDC hDC)
{
	// Draw title only if it was defined
	if (lstrlen(m_lpszTitle) > 0)
	{
		RECT rect, rectText;
		GetClientRect(m_hWnd, &rect);

		// Draw text
		HFONT hOldFont = (HFONT)SelectObject(hDC, m_hTitleFont);
		SetTextColor(hDC, RGB(0, 0, 156));

		rectText.left = 8;
		rectText.top = 0;
		rectText.right = rect.right - rect.left;
		rectText.bottom = m_nTitleHeight;
		DrawText(hDC, m_lpszTitle, -1, &rectText, DT_VCENTER);
		SelectObject(hDC, hOldFont);

		// And finally underline title
		HPEN hOldPen, hPen = (HPEN)GetStockObject(BLACK_PEN);
		rect.top = rect.top + m_nTitleHeight;
		rect.bottom = rect.top;

		hOldPen = (HPEN)SelectObject(hDC, hPen);
		Polyline(hDC, (LPPOINT)&rect, 2);
		SelectObject(hDC, hOldPen);
	}
}

void CTodayOptionsDialog::GetDefaultTitleFont()
{
	LOGFONT lf;
	TEXTMETRIC tm;
    HDC hdc;
	
	hdc = GetDC(m_hWnd);
    GetTextMetrics(hdc, &tm);
    memset(&lf, 0, sizeof (lf));

    lf.lfHeight = -1 * (17 * GetDeviceCaps(hdc, LOGPIXELSY) / 72) / 2;
	lf.lfWeight = FW_SEMIBOLD;
	lf.lfPitchAndFamily = tm.tmPitchAndFamily;
	lstrcpy(lf.lfFaceName, _T("Tahoma"));

	m_hTitleFont = CreateFontIndirect(&lf);

	ReleaseDC(m_hWnd, hdc);

	m_nTitleHeight = 23;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -