當前位置:編程學習大全網 - 源碼下載 - 日歷組件源代碼

日歷組件源代碼

VC有自己的日歷控件CMonthCalCtrl。

/code/legacy/controls/monthcalctrlcalendar . zip

閱讀MSDN2003,可以看到MFC提供了18種通用控件。我不會詳細列出它們,但是妳可以在MSDN \ Visual Studio中看到它們。MSDN2003的. NET \ Visual c++ \ Add Functions \ MFC \ User Interface \ Controls \等。每個控件都對應於壹個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;SHOW window(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 timeUntil

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

LPMONTHDAYSTATE pDayState

pDayState = new month daystate[nCount];

memset(pDayState,0,sizeof(month daystate)* nCount);

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

pDayState[nIndex]| = 1 & lt;& lt3;//第四天

pDayState[nIndex]| = 1 & lt;& lt18;//19日

pDayState[nIndex]| = 1 & lt;& lt24;//第25天

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

刪除[]pDayState;

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

  • 上一篇:可以用於作文的漂亮句子
  • 下一篇:大話西遊有幾集啊?
  • copyright 2024編程學習大全網