下载地址:http://download.csdn.net/source/2366929
首先感谢你下载和使用该控件,希望它能满足你的要求。若有任何问题请及时告知我们,我们将在第一时间为你解决,祝君万福!
开发目的:
VC自带的日历控件只有公历(阳历),而没有我们国家的阴历(农历)以及24节气及节假日信息等等。功能单一,不能很好的体现中国人民的智慧。因此我就有了写一个和中国万年历的想法,在网上查找资料,相关的资料很少,特别是c++的就更少,参考了网友的一些例子和中国的万年历书籍,构思基本上清晰,实现的可行性也有了。希望开发这款万年历,供大家下载参考和使用,独乐乐不如众乐乐。望大家支持。
软件功能:
1.实现阳历(公历)和阴历(农历)的相互转换和显示。
2.显示中国24节气、农历节日、国家法定日以及国际/国家有意义的纪念日等等
3.用户能自行增加/减少重要日的提醒,比如增加亲人/朋友的生日等等的提醒(可以是公历或者农历)。
4.用户可以定制该控件,包括颜色、字体、皮肤、功能等等。
5.强大的功能扩展。
6.形式多样化,提供类、dll、ocx等形式供大家方便使用。
7.加密了节日数据库,防止数据库被恶意篡改。
8.增加了一个数据库修改小工具,方便用户对数据库的修改和维护。用户可以添加自己的重要日子,包括阳历和阴历。比如:父母生日、结婚纪念日等等。支持中国特有的农历(阴历)记事提醒等。
9.提供对外函数和API。提供二次开发接口。编程人员可以使用该控件编程并修改以适应需求。包括颜色、字体、大小、背景等。
10.添加了控制按钮,有年、月的操作,返回当前日期和数据库操作。
API使用介绍
//初始化控件的大小
void InitSize(int nWidth,int nHeight,int nTitle);
//创建窗口及控件
virtual BOOL Create(RECT &rect, CWnd * pParentWnd, UINT nID);
//设置控件的颜色
void SetColor(BYTE item,COLORREF color);
//得到控件的颜色
COLORREF GetColor(BYTE item);
//设置字体大小
void SetTextFontSize(int bigsize,int smallsize);
//得到字体大小
void GetFontSize(int &bigsize,int &smallsize);
//得到控件的大小
int GetSize(BYTE item);
//判断iYear是不是闰年
static BOOL IsLeapYear(WORD iYear);
//计算iYear,iMonth,iDay对应是星期几 1年1月1日 --- 65535年12月31日
static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay);
//返回iYear年iMonth月的天数 1年1月 --- 65535年12月
static WORD MonthDays(WORD iYear, WORD iMonth);
//返回iYear年天数 1年 --- 65535年
static WORD YearDays(WORD iYear);
//返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,高字为第二个iLunarMonth月的天数,否则高字为0
// 1901年1月---2050年12月
Static LONG LunarMonthDays(WORD iLunarYear, WORD iLunarMonth);
//返回阴历iLunarYear年的总天数
// 1901年1月---2050年12月
static WORD LunarYearDays(WORD iLunarYear);
//返回阴历iLunarYear年的闰月月份,如没有返回0
// 1901年1月---2050年12月
static WORD GetLeapMonth(WORD iLunarYear);
//把iYear年格式化成天干记年法表示的字符串
static void FormatLunarYear(WORD iYear, char *pBuffer);
//把iMonth格式化成中文字符串
static void FormatMonth(WORD iMonth, char *pBuffer);
//把iDay格式化成中文字符串
static void FormatLunarDay(WORD iDay, char *pBuffer);
//计算公历两个日期间相差的天数 1年1月1日 --- 65535年12月31日
static LONG CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndDay,WORD iStartYear = START_YEAR, WORD iStartMonth =1, WORD iStartDay =1);
//计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24
//1901年1月1日---2050年12月31日
//公历==>农历
static WORD GetLunarDate(WORD iYear, WORD iMonth, WORD iDay, WORD &iLunarYear, WORD &iLunarMonth, WORD &iLunarDay);
//根据农历日期计算公历日期
//农历==>公历
static void GetDate(WORD iLunarYear, WORD iLunarMonth, WORD iLunarDay,WORD &iYear, WORD &iMonth, WORD &iDay);
//计算从1901年1月1日过iSpanDays天后的阴历日期
static void l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay, LONG iSpanDays);
//计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气
static WORD l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay);
//得到年份
WORD GetYear();
//得到月份
WORD GetMonth();
//得到天
WORD GetDay();
//得到日期
void GetDate(WORD &iYear, WORD &iMonth, WORD &iDay);
//设置日期
BOOL SetDate(WORD iYear, WORD iMonth, WORD iDay);
//根据公历查找节日/节气(公历/农历)
BOOL GetHoliday(WORD iYear, WORD iMonth, WORD iDay,char *pBuffer,BYTE item=0);
//根据农历查找节日/节气(公历/农历)
BOOL GetLunarHoliday(WORD LunarYear, WORD LunarMonth, WORD LunarDay,char *pBuffer,BYTE item=0);
//得到年号
CString GetYearName(WORD iYear);
//得到年的周数编号
int GetWeekNum(WORD iYear, WORD iMonth, WORD iDay);
API实例:
(1)初始化工程:包括包含控件头文件和添加控件DLL,初始化数据库。
(2)先初始化控件的大小:设置字体大小、控件各个部分的大小、颜色等。
(3)然后创建控件实例:创建控件。
(4)设置控件属性:修改控件的各个部分的字体、颜色等
(5)设置控件功能:包括日期转换,数据的获取等
(6)退出后清空资源:断开数据库等。
重要说明:
1.若在使用过程中发现任何问题请及时通知我们。
2.欢迎提供宝贵意见,使该控件完美,以供大家很好的使用。
3.该控件为mycaibo一手创作完成,版权和解释权归mycaibo所有,在使用中请保持原控件上的版权信息。
4.欢迎和鼓励将该控件用于商业目的,若想去掉控件中的版权信息(或者改为自己的信息),或者像拥有该控件的源代码等,请及时和mycaibo联系。
5.请尊重他人的劳动成果,谢谢合作,祝君万福。
转载自原文链接, 如需删除请联系管理员。
原文链接:多功能万年历控件编程,转载请注明来源!