📄 supernotepaddlg.cpp
字号:
// SuperNotepadDlg.cpp : implementation file
//
#include "stdafx.h"
#include "SuperNotepad.h"
#include "SuperNotepadDlg.h"
#include "UseExplain.h"
#include "AboutSuperNotepad.h"
#include "MySingletonClass.h"
#include "CommonDefine.h"
#include "TimeTipDlg.h"
#include "RegularTipDlg.h"
#include "TipInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSuperNotepadDlg dialog
// 初始化变量
CSuperNotepadDlg::CSuperNotepadDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSuperNotepadDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSuperNotepadDlg)
m_csEventEdit = _T(""); // 编辑事件
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_csTimeData = _T(""); // 时间数据
m_csCurrentTime = _T(""); // 当前时间
m_csBufferTime = _T("");
m_csYear = _T(""); // 年
m_csMonth = _T(""); // 月
m_csDay = _T(""); // 日
m_bSave = false; // 保存标志
m_bIsEdit = false; // 编辑标志
}
void CSuperNotepadDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSuperNotepadDlg)
DDX_Control(pDX, IDC_EDIT_EVENT, m_ctrlEditEvent);
DDX_Control(pDX, IDC_BUTTON_CLEAREVENT, m_btnClear);
DDX_Control(pDX, IDC_BUTTON_GIVEUP, m_btnGiveUp);
DDX_Control(pDX, IDC_BUTTON_SAVE, m_btnSave);
DDX_Control(pDX, IDC_MONTHVIEW_SUPERNOTEPAD, m_ctrMonthView);
DDX_Text(pDX, IDC_EDIT_EVENT, m_csEventEdit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSuperNotepadDlg, CDialog)
//{{AFX_MSG_MAP(CSuperNotepadDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_MENUITEM_HELP_EXPLAIN, OnMenuitemHelpExplain)
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
ON_BN_CLICKED(IDC_BUTTON_GIVEUP, OnButtonGiveup)
ON_EN_CHANGE(IDC_EDIT_EVENT, OnChangeEditEvent)
ON_BN_CLICKED(IDC_BUTTON_CLEAREVENT, OnButtonClearEvent)
ON_COMMAND(ID_MENU_SYSTEM_QUIT, OnMenuSystemQuit)
ON_COMMAND(ID_MENUITEM_HELP_ABOUT_DEVELOPER, OnMenuitemHelpAboutDeveloper)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_WM_SYSCOMMAND()
ON_MESSAGE( WM_SHELLNOTIFY, OnShellNotify )
ON_WM_SIZE()
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
ON_BN_CLICKED(IDC_BUTTON_REGULAR_TIP, OnButtonRegularTip)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSuperNotepadDlg message handlers
// 初始化对话框
BOOL CSuperNotepadDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// 初始化托盘图标
InitNotifyIconData();
// 居中显示主窗口
CenterWindow();
// 窗口总处于最上面
SetWindowPos( & wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE );
GetWindowPlacement( & m_wndPlaceMent );
// 获取系统时间.
CTime time = CTime::GetCurrentTime();
m_csCurrentTime = time.Format(_T("%Y年%m月%d日"));
int nPos = m_csCurrentTime.Find( _T("年") );
m_csYear = m_csCurrentTime.Mid( 0, 6 ); // 年
m_csMonth = m_csCurrentTime.Mid( nPos + 2, 4 ); // 月
m_csMonth.TrimLeft();
m_csMonth.TrimRight();
int nLen = 0;
m_csDay = _T("");
CString csMonthFirstPos = m_csMonth.Mid( 0, 1 );
if ( _T("0") == csMonthFirstPos ) // 0开头的月,如4月->04
{
nLen = m_csCurrentTime.Delete( nPos + 2, 1 );
m_csDay = m_csCurrentTime.Mid( nPos + 5, 4 );
}
else
{
m_csDay = m_csCurrentTime.Mid( nPos + 6, 4 );
}
CString csDayFirstPos = m_csDay.Mid( 0, 1 );
if ( _T("0") == csDayFirstPos ) // 0开头的日,如9日->09
{
if ( _T("0") == csMonthFirstPos )
{
nLen = m_csCurrentTime.Delete( nPos + 5, 1 );
}
else
{
nLen = m_csCurrentTime.Delete( nPos + 6, 1 );
}
}
int nYear = atoi( m_csYear );
int nMonth = atoi( m_csMonth );
int nDay = atoi( m_csDay );
m_ctrMonthView.SetYear( nYear ); // 设置年
m_ctrMonthView.SetMonth( nMonth ); // 设置月
m_ctrMonthView.SetDay( nDay ); // 设置日
int nDayOfWeek = time.GetDayOfWeek(); // 取得一周内的某天
CString csDayOfWeek = GetDayInOneWeek( nDayOfWeek );
CString csTodayInfo = _T("^_^ 今天是");
csTodayInfo += m_csCurrentTime;
csTodayInfo += _T(" ");
csTodayInfo += csDayOfWeek;
CString csHasTodayRecord = _T("。 有纪录!");
CString csNoTodayRecord = _T("。 没有纪录!");
// 设置选中日期当天所记录的事件.
m_csTimeData.Format( _T("%d年%d月%d日"), nYear, nMonth, nDay );
CString csFilePath = _T("");
csFilePath = SAVE_FILE_FOLDER;
csFilePath += _T("\\");
csFilePath += m_csTimeData;
csFilePath += _T(".sav");
// 打开文件
// 今天有记录
if ( myFileSave.Open(csFilePath, CFile::modeRead|CFile::typeText, NULL) )
{
m_csBufferTime = ReadFromSaveFile();
m_csEventEdit = m_csBufferTime;
UpdateData(FALSE);
BOOL bSetReadOnlyEdit = m_ctrlEditEvent.SetReadOnly( TRUE );
GetDlgItem(IDC_STATIC_HIP_CONTENTS)->SetWindowText( _T("") );
GetDlgItem(IDC_STATIC_HIP_CONTENTS)->SetWindowText( csTodayInfo + csHasTodayRecord );
}
else // 今天没有记录
{
GetDlgItem(IDC_STATIC_HIP_CONTENTS)->SetWindowText( _T("") );
GetDlgItem(IDC_STATIC_HIP_CONTENTS)->SetWindowText( csTodayInfo + csNoTodayRecord );
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CSuperNotepadDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSuperNotepadDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSuperNotepadDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
// 初始化托盘图标
void CSuperNotepadDlg::InitNotifyIconData()
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = m_hWnd;
nid.uID = IDR_MAINFRAME;
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
nid.hIcon = LoadIcon( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_MAINFRAME ) );
nid.uCallbackMessage = WM_SHELLNOTIFY;
lstrcpy( nid.szTip, _T( "超级记事本" ) ); // 鼠标移到图标上面时的提示信息
Shell_NotifyIcon( NIM_ADD, & nid ); // 在任务栏右下角添加图标
}
// 弹出式菜单中的退出
void CSuperNotepadDlg::OnCancel()
{
DestroyWindow();
}
// 清除托盘图标
void CSuperNotepadDlg::OnDestroy()
{
CDialog::OnDestroy();
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = m_hWnd;
nid.uID = IDR_MAINFRAME;
Shell_NotifyIcon( NIM_DELETE, & nid ); // 删除图标
}
// 在图标上按下鼠标左键,显示/隐藏窗口
// 在图标上按下鼠标右键,显示弹出式菜单
void CSuperNotepadDlg::OnShellNotify( WPARAM wParam, LPARAM lParam )
{
if ( lParam == WM_LBUTTONDOWN )
{
if ( IsWindowVisible() )
{
ShowWindow( SW_HIDE ); // 隐藏窗口
}
else
{
SetWindowPlacement( & m_wndPlaceMent ); // 显示窗口
}
}
if ( lParam == WM_RBUTTONDOWN )
{
PopupMenu(); // 弹出式菜单
}
}
// 弹出式菜单
void CSuperNotepadDlg::PopupMenu()
{
CPoint point;
GetCursorPos( & point );
CMenu menuPopup;
menuPopup.CreatePopupMenu(); // 创建弹出式菜单
menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_SHOW, _T( "显示" ) );
menuPopup.AppendMenu( MF_SEPARATOR );
menuPopup.AppendMenu( MF_STRING, ID_MENUITEM_EXIT, _T( "退出" ) );
int nCmd = ( int ) menuPopup.TrackPopupMenu( \
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD, \
point.x, point.y, \
AfxGetMainWnd() );
switch( nCmd )
{
case ID_MENUITEM_EXIT: // 退出菜单
PostMessage( WM_CLOSE );
break;
case ID_MENUITEM_SHOW: // 显示菜单
SetWindowPlacement( & m_wndPlaceMent );
break;
default:
break;
}
}
// 隐藏窗口到图标上
void CSuperNotepadDlg::OnSize( UINT nType, int cx, int cy )
{
if ( nType == SIZE_MINIMIZED )
{
ShowWindow( SW_HIDE ); // 隐藏窗口
}
}
// 读文件
CString CSuperNotepadDlg::ReadFromSaveFile()
{
CString csBuf = _T("");
CString csRet = _T("");
while ( myFileSave.ReadString(csBuf) ) // 按行读取
{
csRet = csRet + csBuf;
csRet += _T("\r\n");
}
myFileSave.Close(); // 关闭文件
return csRet;
}
BEGIN_EVENTSINK_MAP(CSuperNotepadDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CSuperNotepadDlg)
ON_EVENT(CSuperNotepadDlg, IDC_MONTHVIEW_SUPERNOTEPAD, 1 /* DateClick */, OnDateClickMonthview, VTS_DATE)
ON_EVENT(CSuperNotepadDlg, IDC_MONTHVIEW_SUPERNOTEPAD, 2 /* DateDblClick */, OnDateDblClickMonthview, VTS_DATE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
// 定时触发指定的事件
void CSuperNotepadDlg::OnTimer(UINT nIDEvent)
{
try
{
BOOL bIsJustDateTime = CompareDateTime();
switch (nIDEvent)
{
case FLAG_ONE:
KillTimer( FLAG_ONE );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -