📄 todayoptionsdialog.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 + -