首页 » 技术分享 » 多功能万年历控件编程

多功能万年历控件编程

 

 

下载地址: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对应是星期几 111 --- 655351231

static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay);

//返回iYeariMonth月的天数 11 --- 6553512

static WORD MonthDays(WORD iYear, WORD iMonth);

//返回iYear年天数 1 --- 65535

static WORD YearDays(WORD iYear);

//返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,高字为第二个iLunarMonth月的天数,否则高字为0

// 19011---205012

Static LONG LunarMonthDays(WORD iLunarYear, WORD iLunarMonth);

//返回阴历iLunarYear年的总天数

// 19011---205012

static WORD LunarYearDays(WORD iLunarYear);

//返回阴历iLunarYear年的闰月月份,如没有返回0

// 19011---205012

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);

//计算公历两个日期间相差的天数  111 --- 655351231

static LONG CalcDateDiff(WORD iEndYear, WORD iEndMonth, WORD iEndDay,WORD iStartYear = START_YEAR, WORD iStartMonth =1, WORD iStartDay =1);

//计算公历iYeariMonthiDay日对应的阴历日期,返回对应的阴历节气 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);

//计算从190111日过iSpanDays天后的阴历日期

static void   l_CalcLunarDate(WORD &iYear, WORD &iMonth ,WORD &iDay, LONG iSpanDays);

//计算公历iYeariMonthiDay日对应的节气 0-240表不是节气

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.请尊重他人的劳动成果,谢谢合作,祝君万福。

 

转载自原文链接, 如需删除请联系管理员。

原文链接:多功能万年历控件编程,转载请注明来源!

0