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

📄 supernotepaddlg.cpp

📁 非比寻常的超级记事本 1.日历控件的使用 2.托盘技术 3.开机后应用程序自动启动 4.非模态对话框的创建和关闭 5.Singleton类的使用 6.文件的读写 7.弹出式菜单的创建
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -