VisualC 中的日历控件使用详解

2008-04-09 04:09:36来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  前言:

  控件在Visual C 编程学习中占据很重要的位置。笔者在国外英文网站上看到了这篇关于日历控件学习的文章,虽然内容看似简单,但读完后感觉到还是学到了一些东西。感觉到原著作者对一些不常用的日历控制的使用方法写的介绍的很详细,通俗易懂,于平淡之中显神奇,是对日历控件的"深度挖掘",对VC的初学者应该是很有帮助的,所以就将其翻译过来介绍给国内读者朋友。

  一、有关日历控件的介绍

  Win32 API提供了一个显示日期得当彩色日历控件,日期的显示模式是基于控制面板中的区域性设置或者说是依赖于用户的操作系统。具体的日历控件如下图一所示:


图一、日历控件显示效果

  这个常用的日历控件的标题条包含两个按钮和两个标签,左边的按钮准许用户单击选择前一个月份,左边的标签显示当前选择的月份,右边的标签显示当前日期中的年份。右边的按钮是让用户选择下一个月份。日历控件可以配置成显示多个月份,下图是一具体的实例:


图二、显示多个月份的日历控件

  如果要让日历控件显示多个月份,按钮的个数将通过前月或后月列表来增加或减少。例如,如果控件正在显示4月或5月,这时用户点击了左边的按钮,控件将显示3月或4月;如果用户点击了右边的按钮,控件将显示5月和6月。此外,选择当前年份中的任意一个月份,用户可以点击标题框中的月份名,这时候将显示一个月份列表供用户来选择。具体如图所示:


图三、显示月份列表

  如果要更改年份,用户可以点击年份标签,这时候将显示旋转按钮,用户可以通过点击旋转按钮的上下键来更改年份,也可以使用键盘上的上下箭头来更改年份。


图四、更改日历控件的年份

  在标题条的下面,根据控制面板的格式显示着星期的简写,在英语地区,每个星期的第一天通常是星期天。开发人员可以改变控件中的第一天设置。

  控件上,当前选择的日期有一圆圈。用户可以点击欲选择的日期来在控件上选择一个日期。在大部分地区,日期以数字的形式显现在一个白色背景上(这个背景颜色乃至控件上的任何颜色可以通过程序来改变)。默认的情况下,控件显示一个椭圆围绕的当前日期。使用标题条按钮、月份和年份标签,用户可以更改日期。如果控件显示的不是当前日期,用户可以通过点击控件底部显示今天日期的标签来使控件显示今天的日期。(如果你是一个程序员,可以隐藏控件底部这个显示今日日期的标签)。

  二、创建日历控件

  我们可以在窗口、对话框架、工具条及其他任何容器窗口中创建日历控件。日历控件对应着CmonthCalCtrl类,所以要动态创建一个日历控件,需要声明一个CmonthCalCtrl变量或指向CmonthCalCtrl的指针,代码如下:

// Exercise1Dlg.h : header file
class CExercise1Dlg : public CDialog
{
 // Construction
 public:
  CExercise1Dlg(CWnd* pParent = NULL); // standard constructor
 private:
  CMonthCalCtrl *ctlCalendar;
};

  CmonthCalCtrl类象MFC中其他控件对应的类一样,提供了一个Create()方法用来在容器窗口中动态创建日历控件,代码如下:

CExercise1Dlg::CExercise1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CExercise1Dlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CExercise1Dlg)
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 ctlCalendar = new CMonthCalCtrl;
}
/////////////////////////////////////////////////////////////////////////////
// CExercise1Dlg message handlers
BOOL CExercise1Dlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 // Set the icon for this dialog. The framework does this automatically
 // when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE); // Set big icon
 SetIcon(m_hIcon, FALSE); // Set small icon
 // TODO: Add extra initialization here
 ctlCalendar->Create(WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_BORDER,CPoint(20, 20), this, 0x224);
 return TRUE; // return TRUE unless you set the focus to a control
}
  三、日历控件属性操作

  在对话框或窗口中创建一个日历控件后,它仅显示当前的月份并仅仅只能显示一个月份,这是因为,按照默认的设计,控件的长、宽、高只能容纳一个月的日期,如果要显示两个月,就要增加控件的宽度(同样的道理,也可以通过增加高度来显示两个月份)。

  作为一个可视化对象,日历控件可以用不同的颜色来表现背景、星期日、标题条文本、标题条背景等。作为开发人员理所当然地可以通过程序来更换这些颜色,当然是要在不影响控件亲合力的情况下。改变日历控件的颜色,需要调用CMonthCalCtrl::SetColor() 方法,该方法的语法是:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:VisualC 小技巧:实现透明窗体

下一篇:用VisualC 6.0模拟仿真生态系统

热门词条
热门标签