當前位置:股票大全官網 - 財經新聞 - 財務日歷源代碼

財務日歷源代碼

VC有自己的日歷控件CMonthCalCtrl。

/code/legacy/controls/monthcalctrlcalendar . zip

閱讀MSDN2003,我們可以看到MFC提供了18種通用控件。我不會詳細列出它們,但妳可以在MSDN \ Visual Studio中看到它們。MSDN2003的。每個控件都對應於壹個MFC類。這些類的詳細描述可以在MSDN \ Visual Studio中找到。MSDN2003的。

在MFC中添加控件有兩種方法。

第壹種方法是直接將控件從“控件”工具欄拖到表單中。這種方法很直觀,但它僅限於基於對話框的MFC應用程序。為此,我將重點介紹第二種方法。

第二種方法是使用MFC類動態添加控件,我將以月歷控件為例介紹這種方法。與月歷控件對應的MFC類是CMonthCalCtrl。

第壹步是向表單添加壹個成員指針:CMonthCalCtrl * m _ pCtrlMonth。

第二步是在初始化窗體時初始化控件。這裏說的表單初始化不是form類的初始化函數,而是OnInitialUpdate()或OnInitDialog()的函數。

m _ pCtrlMonth = new CMonthCalCtrl

m _ pCtrlMonth-& gt;create(WS _ VISIBLE | WS _ CHILD | WS _ BORDER | MCS _ NOTODAY,rect,this,IDC _ MCC);

m _ pCtrlMonth-& gt;ShowWindow(SW _ SHOW);

Create()函數有四個參數:

第壹個參數是壹些宏定義的組合,它們指定控件的樣式。例如,WS_VISIBLE表示控件在初始化時可見,WS_CHILD表示控件是子窗體,WS_BORDER表示控件有邊框,MCS_NOTODAY表示控件不會在底部提示今天的日期。關於控件的樣式,您可以參考MSDN。msdn \ Visual Studio中描述了各種表單樣式。NET \ Visual c++ \ Visual c++引用\ MFC使用的結構、樣式、回調和消息映射\樣式\。當MSDN描述控件的相應類的創建功能時,特定控件的獨特風格被賦予。

第二個參數是對RECT結構的引用,該結構表示窗體中控件的位置坐標。

第三個參數是指向控件父窗體的指針。

第四個參數是控件的資源ID。您可以定義# defineid _ control * * * * *。

現在該控件已基本初始化成功,其他控件也已初始化成功。區別在於控件的樣式和控件對應的MFC類。接下來,您可以設置控件的屬性並添加控制消息。在這裏,我只介紹月歷控件的兩個常用消息。

MCN選擇消息:選擇完成日期時觸發此消息的消息處理程序。

NM_RELEASEDCAPTURE消息:月歷控件中有壹個Scoll,點擊Scoll將觸發該消息的消息處理功能。默認情況下,單擊壹次Scoll將切換壹個月的控件,您可以通過SetMonthDelta函數設置切換月份。m _ pCtrlMonth-& gt;SetMonthDelta(3)表示三個月的轉換。

如果將MCS_DAYSTATE樣式添加到控件中,則可以顯示日期的狀態。該狀態強調當前顯示月份的某些日期,狀態信息表示為32位數據類型MONTHDAYSTATE。MONTHDAYSTATE位域(1到31)中的每壹位代表壹月中某壹天的狀態。如果某壹位開啟,相應的日期將以粗體顯示;否則,將不會強調顯示日期。有兩種方法可以設置MonthCalendar控件的日期狀態:顯式調用cmontcalctrl::SetDayState或處理MCN_GETDAYSTATE通知消息。

MCN_GETDAYSTATE消息:此方法在MSDN \ Visual Studio中有詳細的中文描述。NET \ Visual C++\添加函數\ MFC \用戶界面\ Control \使用CMonthCalCtrl \設置MonthCalendar控件的日狀態\。

壹種方法是調用SetDayState函數,例如在NM_RELEASEDCAPTURE消息處理函數中,初始化本月哪些天需要突出顯示:

SYSTEMTIME timeFrom

SYSTEMTIME截止時間;

int nCount = m _ pCtrlMonth-& gt;GetMonthRange(& amp;時間從& amptimeUntil,GMR _ day state);

LPMONTHDAYSTATE pDayState

pDayState = new month daystate【nCount】;

memset(pDayState,0,sizeof(MONTHDAYSTATE)* nCount);

int nIndex =(time from . wday = = 1)?0 : 1;

pDayState【nIndex】| = 1 & lt;& lt3;//第四天

pDayState【nIndex】| = 1 & lt;& lt18;// 65438+第09天

pDayState【nIndex】| = 1 & lt;& lt24;//第25天

驗證(m _ pCtrlMonth-& gt;SetDayState(nCount,pDayState));

刪除【】pDayState

在MSDN引入SetDayState函數時給出了此代碼。其實原理很簡單。控件中有壹個屬性表示這些日期的狀態。您自己定義此屬性的副本,然後設置副本中日期的狀態,最後調用SetDayState函數將此副本的信息傳輸到控件的屬性。