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

📄 calendar1dlg.cpp

📁 编辑语言:C++ 编辑环境:Microsoft Visual C++ 6.0 是软件实习中本人作业 希望能对大家有所帮助
💻 CPP
📖 第 1 页 / 共 3 页
字号:

    //加上iEndYear年1月1日到iEndMonth月iEndDay日之间的天数
    iDiffDays += monthday[iEndMonth-1] +
		                           (IsLeapYear(iEndYear)&&iEndMonth>2? 1: 0);
    iDiffDays += iEndDay;

	//减去iStartYear年1月1日到iStartMonth月iStartDay日之间的天数
	iDiffDays -= (monthday[iStarMonth-1] + 
		                  (IsLeapYear(iStartYear)&&iStarMonth>2 ? 1: 0));
    iDiffDays -= iStartDay;	
	return iDiffDays;
}

//计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的节气0-24
WORD CCalendar1Dlg::GetLunarDate(WORD iYear, WORD iMonth, WORD iDay, WORD &iLunarYear, WORD &iLunarMonth, WORD &iLunarDay)
{
   l_CalcLunarDate(iLunarYear,iLunarMonth,iLunarDay,CalcDateDiff(iYear,iMonth,iDay));
   return l_GetLunarHolDay(iYear,iMonth,iDay);
}
//计算从1901年1月1日过iSpanDays天后的阴历日期
BYTE CCalendar1Dlg::l_CalcLunarDate(WORD &iYear, WORD &iMonth, WORD &iDay, LONG iSpanDays)
{
//阳历1901年2月19日为阴历1901年正月初一
	//阳历1901年1月1日到2月19日共有49天
	BYTE rcode =0;
   	if(iSpanDays <49)
	{
		iYear  = START_YEAR-1;
		if(iSpanDays <19)
		{ 
		  iMonth = 11;  
		  iDay   = 11+WORD(iSpanDays);
		}
		else
		{
			iMonth = 12;
			iDay   =  WORD(iSpanDays) -18;
		}
		return  rcode;
	}
	//下面从阴历1901年正月初一算起
	iSpanDays -=49;
    iYear  = START_YEAR;
	iMonth = 1;
	iDay   = 1;
	//计算年
	LONG tmp = LunarYearDays(iYear); 
	while(iSpanDays >= tmp)
	{
		iSpanDays -= tmp;
		tmp = LunarYearDays(++iYear);
	}
    //计算月
	tmp = LOWORD(LunarMonthDays(iYear, iMonth));
	while(iSpanDays >= tmp)
	{
		iSpanDays -= tmp;
	    if(iMonth == GetLeapMonth(iYear))
		{
			tmp  = HIWORD(LunarMonthDays(iYear, iMonth));
			if(iSpanDays < tmp)	
			{
			   rcode = 1;
			   break;
			}
			iSpanDays -= tmp;
		}
		tmp = LOWORD(LunarMonthDays(iYear, ++iMonth));
	}
	//计算日
	iDay += WORD(iSpanDays);
	return rcode;
}
//iYear年iMonth月iDay日对应的节气0-24,0表示不是节气
WORD CCalendar1Dlg::l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay)
{
   int &flag = gLunarHolDay[(iYear - START_YEAR)*12+iMonth -1];
	WORD day=0;
	if(iDay<15)
		 day= 15 - ((flag>>4)&0x0f);
	else
	{   
	   int 	a=flag&0x0f;
		day = ((flag)&0x0f)+15;
	}
	if(iDay==day)
	   return (iMonth-1)*2 + (iDay>15? 1: 0) +1; 
	else
	   return 0;
}

//点击窗体以外的地方,则返回系统时间。
void CCalendar1Dlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	SYSTEMTIME systime;GetSystemTime(&systime);
	m_Year=systime.wYear;
	m_Month=systime.wMonth;
	m_Day=systime.wDay;
	this->UpdateData(false);
	CDialog::OnLButtonDown(nFlags, point);
}
//调出版本号
void CCalendar1Dlg::OnOk2() 
{
	// TODO: Add your control notification handler code here
	CAboutDlg copyright;
	copyright.DoModal();
}

//把年份转换为汉字
CString CCalendar1Dlg::l_paint(int iYear,int iMonth,int iDay)
{
   CString temp;
   int a=iYear/1000;
   int b=iYear%1000/100;
   int c=iYear%1000%100/10;
   int d=iYear%10;
   temp+=l_paint_h(a)+l_paint_h(b)+l_paint_h(c)+l_paint_h(d);
   temp=temp+"年";
   b=-1;
       a=iMonth/10;
	   if(a==0)  a=-1;
	          else b=10;
	 if(a==1) 
	 {
		 a=-1;
		 b=10;
	 }
       c=iMonth%10;
	  if(c==0) c=-1;
   temp+=l_paint_h(a)+l_paint_h(b)+l_paint_h(c)+"月";
   b=-1;
   if(iDay==10) temp+="初十";
     else
	 {
       a=iDay/10;
	   if(a==0)  {a=-1;temp+="初";}
	        else b=10;
			if(a==1) {a=-1;}
	   c=iDay%10;
	   if(c==0) c=-1;
   temp+=l_paint_h(a)+l_paint_h(b)+l_paint_h(c);
	 }
   return temp;
}

CString CCalendar1Dlg::l_paint_h(int num)
{
  switch(num)
  {
  case  0: return "零";break;
  case  1: return "一";break;
  case  2: return "二";break;
  case  3: return "三";break;
  case  4: return "四";break;
  case  5: return "五";break;
  case  6: return "六";break;
  case  7: return "七";break;
  case  8: return "八";break;
  case  9: return "九";break;
  case 10: return "十";break;
  default :return "";
  }
}
              
CString CCalendar1Dlg::l_paint_jieqi(WORD num)
{
switch(num)
  {
    case  1: return "小寒";break;
	case  2: return "大寒";break;
	case  3: return "立春";break;
	case  4: return "雨水";break;
	case  5: return "惊蛰";break;
	case  6: return "春分";break;
	case  7: return "清明";break;
	case  8: return "谷雨";break;
	case  9: return "立夏";break;
	case  10: return "小满";break;
	case  11: return "芒种";break;
	case  12: return "夏至";break;
	case  13: return "小暑";break;
	case  14: return "大暑";break;
	case  15: return "立秋";break;
	case  16: return "处暑";break;
	case  17: return "白露";break;
	case  18: return "秋分";break;
	case  19: return "寒露";break;
	case  20: return "霜降";break;
    case  21: return "立冬";break;
	case  22: return "小雪";break;
	case  23: return "大雪";break;
	case  24: return "冬至";break;
	default :return " ";
  }
}

CString CCalendar1Dlg::l_Star(WORD month, WORD date)
{
  CString value;
if (month == 1 && date >=20 || month == 2 && date <=18) {value = "水瓶座";}
if (month == 2 && date >=19 || month == 3 && date <=20) {value = "双鱼座";}
if (month == 3 && date >=21 || month == 4 && date <=19) {value = "白羊座";}
if (month == 4 && date >=20 || month == 5 && date <=20) {value = "金牛座";}
if (month == 5 && date >=21 || month == 6 && date <=21) {value = "双子座";}
if (month == 6 && date >=22 || month == 7 && date <=22) {value = "巨蟹座";}
if (month == 7 && date >=23 || month == 8 && date <=22) {value = "狮子座";}
if (month == 8 && date >=23 || month == 9 && date <=22) {value = "处女座";}
if (month == 9 && date >=23 || month == 10 && date <=22) {value = "天秤座";}
if (month == 10 && date >=23 || month == 11 && date <=21) {value = "天蝎座";}
if (month == 11 && date >=22 || month == 12 && date <=21) {value = "人马座";}
if (month == 12 && date >=22 || month == 1 && date <=19) {value = "摩羯座";}
return value;
}

void CCalendar1Dlg::Chang()
{
	SYSTEMTIME tme ;
	pCtrl->GetCurSel(&tme);
    m_Year=tme.wYear;
	m_Day=tme.wDay;
	m_Month=tme.wMonth;
	this->UpdateData(false);
	long Daynum;
	WORD Year,Month,Day;
	Daynum=this->CalcDateDiff(m_Year,m_Month,m_Day);
    this->l_CalcLunarDate(Year,Month,Day,Daynum);
    m_Mu_Year=Year;	
    m_Mu_Month=Month;	
    m_Mu_Day=Day;
    m_Lun=FormatLunarYear(m_Mu_Year);
	m_Lun+=" "+l_paint(Year,Month,Day);
	WORD amb=l_GetLunarHolDay(m_Year,m_Month,m_Day);
    m_Lun+=" "+l_paint_jieqi(amb);
	m_Lun+=" "+this->l_Star(m_Month,m_Day);
	int a=this->LunarYearDays(Year);
	this->UpdateData(false);
}

void CCalendar1Dlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	CDialog::OnCancel();
}

void CCalendar1Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
		//	MoveWindow(100,100,100,100);  //将对话框程序界面改变为0
    ShowWindow(SW_SHOWMINIMIZED);   //使界面最小化到任务栏
   //   OnOK(); //调用对话框的OnOK函数
}

⌨️ 快捷键说明

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