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

📄 safedaydlg.cpp

📁 女性安全期计算(VC版) 里面利用了来自cODEpROJECT的关于ppToolTip,CreditsCtrl,HighTime等有关的应用。
💻 CPP
字号:
// SafeDayDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "SafeDay.h"
#include "SafeDayDlg.h"
#include "HighTime.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#include "CreditsCtrl.h"


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	CCreditsCtrl m_wndCredits;
	DECLARE_MESSAGE_MAP()
public:
	virtual BOOL OnInitDialog();
	static void DrawCreditsBackground(CDC *pDC, RECT rect, BOOL bAnimate, DWORD lParam);
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CSafeDayDlg 对话框

BOOL CAboutDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	srand((unsigned)time(NULL));
	
	// Content
	CString s;
	s = "<font color='255,255,255' face='arial' size='12' align='center'>";
	s += "<font size='28' face='楷体_GB2312' style='b'>女性安全期计算</font><p><font size='18' style='u' color='255,200,0'>V1.0</font>";
	s += "<p>Coded in July 2006<br>by <font style='b'>Hottomson</font><vspace size='5'>";
	s += "<font align='left' size='11'><hspace size='30'><font style='i'>mail:   </font>";
	s += "<font style='ub'><a href='mailto:hottomson@sohu.com?SUBJECT=关于 女性安全期计算 1.0' color='255,200,0'>hottomson@sohu.com</a></font><p>";
	s += "</font><font size='18' style='u' color='255,200,0'>Credits</font>";
	s += "<p>Thanks to <font style='ub'><a href='http://www.codeproject.com' color='255,200,0'>The Code Project</a></font>";
	s += " for being<br> the coolest VC++/MFC site out there!<br></font><br><img src='#%d' border='2' color='none'><vspace size='80'>";

	// Content Data
	m_wndCredits.FormatDataString(s,IDB_BITMAP);
	
	// TODO:  在此添加额外的初始化
	m_wndCredits.Create(/*WS_EX_CLIENTEDGE*/0,WS_VISIBLE|WS_CHILD,IDC_PLACEHOLDER,this,0,IDC_CURSOR1,0);
	
	m_wndCredits.m_pBackgroundPaint = CAboutDlg::DrawCreditsBackground;
	m_wndCredits.m_dwBackgroundPaintLParam = TRUE;

	m_wndCredits.m_crInternalTransparentColor = RGB(0,0,0);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

// this is our custom background drawing function...
//   it's probably not the most beatifull background effect, but it does
//   demonstrate how custom background drawing should/could be done.. enjoy
void CAboutDlg::DrawCreditsBackground(CDC *pDC, RECT rect, BOOL bAnimate, DWORD lParam)
{
	pDC->FillSolidRect(&rect,0x00000000);
	pDC->SetBkColor(0x000000);
	CBrush bgBrush;
	bgBrush.CreateHatchBrush(HS_CROSS,RGB(0,70,30));
	pDC->FillRect(&rect,&bgBrush);	
}



CSafeDayDlg::CSafeDayDlg(CWnd* pParent /*=NULL*/)
	: CXTPDialog(CSafeDayDlg::IDD, pParent)
	, m_nDaysMin(28)
	, m_nDaysMax(28)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSafeDayDlg::DoDataExchange(CDataExchange* pDX)
{
	DDX_Control(pDX, IDC_CALENDAR_VIEW, m_wndCalendarViewLocation);
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_DATETIMEPICKER, m_oDataTimeCtrl);
	DDX_Text(pDX, IDC_DAYS_MIN, m_nDaysMin);
	DDV_MinMaxInt(pDX, m_nDaysMin, 24, 40);
	DDX_Text(pDX, IDC_DAYS_MAX, m_nDaysMax);
	DDV_MinMaxInt(pDX, m_nDaysMax, 24, 40);
}

BEGIN_MESSAGE_MAP(CSafeDayDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(ID_ABOUT,OnAbout)
	ON_COMMAND(ID_CLOSE, OnClose)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
	ON_WM_ENTERIDLE()
	ON_BN_CLICKED(IDC_BTN_START, OnBnClickedBtnStart)
END_MESSAGE_MAP()


static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};
// CSafeDayDlg 消息处理程序

BOOL CSafeDayDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将\“关于...\”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	CXTPPaintManager::SetCustomTheme(new CXTPOfficeTheme());

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}
	m_wndStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_STRETCH, 100);

	m_wndMenuBar.CreateToolBar(WS_VISIBLE|WS_CHILD|CBRS_TOOLTIPS|CBRS_GRIPPER, this, AFX_IDW_TOOLBAR + 10 );
	m_wndMenuBar.LoadMenuBar(IDR_MENU);
	m_wndMenuBar.SetFlags(xtpFlagStretched);
	SetMenuBar(&m_wndMenuBar);

	VERIFY(m_wndToolBar.CreateToolBar(WS_VISIBLE|WS_CHILD|CBRS_TOOLTIPS|CBRS_GRIPPER, this, AFX_IDW_TOOLBAR));
	VERIFY(m_wndToolBar.LoadToolBar(IDR_TOOLBAR));
	m_wndToolBar.SetFlags(xtpFlagStretched);

	XTPImageManager()->SetIcons(IDR_MAINFRAME);

	CRect rcCal;
	m_wndCalendarViewLocation.GetWindowRect(&rcCal);
	ScreenToClient (&rcCal);
	m_oCalendarView.Create(NULL,NULL,WS_CHILD | WS_VISIBLE,rcCal,this,IDC_CALENDAR_VIEW);
	m_oCalendarView.SetOwner (this);

	CRect rcClientStart;
	CRect rcClientNow;
	GetClientRect(rcClientStart);
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);


	CPoint ptOffset(rcClientStart.left - rcClientNow.left,
		-rcClientStart.top + rcClientNow.top);

	ptOffset.y -= ::GetSystemMetrics(SM_CYMENU);
	CRect rcChild;
	CWnd* pwndChild = GetWindow(GW_CHILD);
	while (pwndChild)
	{
		pwndChild->GetWindowRect(rcChild);
		rcChild.OffsetRect(ptOffset);
		pwndChild->MoveWindow(rcChild, FALSE);
		pwndChild = pwndChild->GetNextWindow();
	}

	CRect rcWindow;
	GetWindowRect(rcWindow);
	rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
	rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
	MoveWindow(rcWindow, FALSE);

	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

	m_tooltip.Create(this);
	m_tooltip.SetNotify();
	
	m_tooltip.AddTool(GetDlgItem(IDC_DATETIMEPICKER), _T("<center><h2>日历选择框</h2><br><hr color=blue></center><br>你可以在这里直接输入时间,<br>或者选择时间。"));

	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

void CSafeDayDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		OnAbout();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}
void CSafeDayDlg::OnAbout()
{
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}
// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CSafeDayDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CSafeDayDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

LRESULT CSafeDayDlg::OnKickIdle(WPARAM, LPARAM)
{
	SendMessageToDescendants(WM_IDLEUPDATECMDUI);
	return 0;
}
void CSafeDayDlg::OnClose()
{
	OnOK();
}

BOOL CSafeDayDlg::PreTranslateMessage(MSG* pMsg)
{
	m_tooltip.RelayEvent(pMsg);

	return CDialog::PreTranslateMessage(pMsg);
}

void CSafeDayDlg::OnEnterIdle(UINT nWhy, CWnd* pWho)
{
	CDialog::OnEnterIdle(nWhy, pWho);

	m_tooltip.OnEnterIdle(nWhy, pWho);
}

void CSafeDayDlg::SetCustomTheme(CXTPPaintManager* pTheme)
{
	CXTPPaintManager::SetCustomTheme(pTheme);

	//m_wndStatusBar.
	//RedrawCommandBars();
	RedrawWindow();
}
void CSafeDayDlg::OnBnClickedBtnStart()
{
	UpdateData(TRUE);
	SYSTEMTIME sysTime;
	m_oDataTimeCtrl.GetTime(&sysTime);
	CHighTime tmSet(sysTime);
	CHighTime tmCur;
	tmCur=tmCur.GetPresentTime();
	CHighTimeSpan tmSpan(1,0,0,0);
	m_oCalendarView.SetDate(tmSet.GetYear(),tmSet.GetMonth(),tmSet.GetDay());
	m_oCalendarView.Show(TRUE);
}

⌨️ 快捷键说明

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