📄 calendar1dlg.cpp
字号:
//加上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 + -