}
//------------------------ static int daysMarked [] = {
1, 8, 10, 15, 25, 28
};
CArray
for (int i = 0; i < sizeof (daysMarked) / sizeof (int); i++) { }
m_calendar.MarkDates (arMarkedDates); //------------------ // Set colored days: //------------------
static int daysColor1 [] = { { }
static int daysColor2 [] = { { }
m_calendar.EnableMutipleSelection (TRUE); m_calendar.EnableTodayButton (TRUE); m_calendar.EnableWeekNumbers (FALSE);
COleDateTime dayColor (today.GetYear (), today.GetMonth (), daysColor2 [i], 0, 0, 0); m_calendar.SetDateColor (dayColor, RGB (0, 0, 255));
19, 20, 23
};
for (int i = 0; i < sizeof (daysColor2) / sizeof (int); i++)
COleDateTime dayColor (today.GetYear (), today.GetMonth (), daysColor1 [i], 0, 0, 0); m_calendar.SetDateColor (dayColor, RGB (255, 0, 0));
4, 5, 6 };
for (int i = 0; i < sizeof (daysColor1) / sizeof (int); i++)
COleDateTime dayBold (today.GetYear (), today.GetMonth (), daysMarked [i], 0, 0, 0); arMarkedDates.Add (dayBold.m_dt);
CBCGPCalendar::SetSingleMonthMode用于设置日历是否只显示一个月。如果其参数bSingleMonth=TRUE,则无论控件多大,都只会显示一个月;如果bSingleMonth=FALSE,
那么会根据控件的客户区大小来决定显示几个月。
CBCGPCalendar::MarkDates用于对日历控件中的某些日期做标记,被标记的日期会用粗体显示。函数原型: void MarkDates(const bRedraw=TRUE);
CArray
注意第一个参数是一个DATE数组的引用。 模板:
COleDateTime today = COleDateTime::GetCurrentTime (); static int daysMarked [] = {
1, 8, 10, 15, 25, 28
};
CArray
for (i = 0; i < sizeof (daysMarked) / sizeof (int); i++)
{ }
m_wndCalendarCtrl.MarkDates (arMarkedDates);
COleDateTime dayBold (today.GetYear (), today.GetMonth (), daysMarked [i], 0, 0, 0); arMarkedDates.Add (dayBold.m_dt);
CBCGPCalendar::SetDateColor用于将指定的日期以特殊颜色显示。 CBCGPCalendar::EnableMutipleSelection是否开启多选模式。若其参数bEnable=FALSE,则不开启多选模式,一次只能选择一个日期;若其参数bEnable=TRUE,则开启多选模式,在多选模式下可以同时选择多个日期。选择方式有:①鼠标单击并拖动;②按住Ctrl后多次点击鼠标;③点击每周前面的周数(周数是指这一周是今年的第几周),可以选择一整周。 CBCGPCalendar::EnableTodayButton是否启用“Today”按钮。若其参数bEnable=TRUE,则启用,控件运行时会额外显示一个“Today”按钮。如果此时正在浏览其他日期,点击该按钮就会直接回到今天的日期。
CBCGPCalendar::EnableWeekNumbers是否启用周数。周数也就是当前周是今年的第几周。若其参数bWeekNumbers=TRUE,则启用周数,在日历每个周的左侧会显示当前周的周数。若bWeekNumbers=FALSE,则不会显示周数。
CBCGPEdit
CBCGPEdit从CEdit派生,该类默认为文本输入框。除此之外,还可以实现:
浏览编辑框。该编辑框右侧有个浏览按钮,但其行为需要自定义。使用该类型编辑框需调用EnableBrowseButton(TRUE)函数。另外需重载CBCGPEdit类的virtual函数CBCGPEdit::OnBrowse 。
计算器编辑框。该编辑框右侧是个计算器按钮,点击后会弹出一个小计算器。调用该类型编辑框只需要:
m_edit.EnableBrowseButton(FALSE); m_edit.EnableCalculatorButton();
对于其具体行为需要重载类的OnCalculatorUserCommand。
浏览文件编辑框。该编辑框右侧是个浏览文件按钮,点击后会弹出一个浏览文件对话框。调用该类型编辑框只需要:
m_edit.EnableBrowseButton(FALSE); m_edit.EnableFileBrowseButton();
另外该类还提供了一个函数接口void SetBrowseButtonImage(UINT uiBmpResId);来支持自定义按钮图标。
CKeyAssign
键盘按钮获取。只需要将Edit的变量类型更改为CKeyAssign即可。 该类可以获取键盘按下的单个字母或者组合键,并显示在Edit中。同时提供了接口函数以获取按下的键。
CBCGPMaskEdit
限定格式内容Edit。该Edit会限定输入的格式与输入的具体内容。如:2013-12-20。这个字符串的格式就是XXXX-XX-XX,输入内容是数字0-9。
该控件会将输入内容自动提取并转换为对应的格式并显示。
如:输入20131220,就会自动显示为2013-12-20。而输入ABC31220,则是非法的,是无法输入的。
该类用法:
为一个Edit控件绑定一个CBCGPMaskEdit类变量m_edit。
在初始化函数中做以下设置: m_edit.EnableMask(
_T(\ ddd dd dd\// 输入的内容限制 _T(\// 输入的格式限制 _T(‘ ‘));
// 默认字符
m_edit.SetValidChars(_T(\m_edit.SetWindowText(_T(\注意事项:
①_T(\ ddd dd dd\该参数为输入的内容限制。这里使用的是d,也就是数字或空格。具体内容限制使用的字符见下表:
D d + C c 数字 数字或空格 +号、-号或空格 Alpha only Alpha or space
A a 字母 字母或空格 ②_T(\该参数为输入的格式限制。其中,每一个”_”表示一个输入字符。”()”以及”-“都是特殊字符,特殊字符会直接显示出来。如2013-12-20中的”-”即是特殊字符,输入20131220后,就会自动套用格式将特殊字符添加进去。只有”_”才表示输入字符,其他一切字母、数字、符号都可以作为特殊字符嵌套在这个参数里。
③_T(‘ ‘)该参数为默认字符。当输入时,比如要输入10个数字,但
只输入到第3个,还有7个数字没有输入,那么后7个数字的位置就会显示默认字符。一般来说默认字符设为空格。
④m_edit.SetValidChars(_T(\该函数用于设置具体的
输入内容。①中仅仅是规定了输入内容的类型,而SetValidChars()则规定输入内容具体允许有哪些。如要求只输入A~F与a~f的大小写字母,那么①仅仅规定了输入的是字母,但却无法规定A~F与a~f,从而F之后的字母也可以成功输入。但调用该函数就可以做相应的输入内容规定:m_edit.SetValidChars(_T(\其中里面字母的顺序是不重要的,可以乱序。
⑤m_edit.SetWindowText(_T(\为Edit设置初始化
显示。这个是非常重要的,必须要调用。如果Edit没有初始化显示,那么Edit就是空白的,无法输入。只有设置了初始化显示,Edit才能套用格式显示出来,从而可以按格式输入。
⑥特别要注意以下三行代码的格式:
_T(\ ddd dd dd\// 输入的内容限制 _T(\// 输入的格式限制 m_edit.SetWindowText(_T(\
这三行代码的格式一定要一致。
设空格用#号来表示,第二行代码中的’_’用*来表示。所谓一致是指: 第一行代码:#ddd##ddd#dd#dd 第二行代码:(***)*ddd*dd*dd 第三行代码:(123)#123-12-12
竖着看,三行代码都严格按照相同的格式来书写,输入内容与特殊字符的位置一定不能搞错,空格的个数一定不能多或少。否则可能编译出错或者无法显示。
CBCGPGridCtrl
该控件在BCG中全部由代码实现,不需要依赖控件。所以该控件需要调用Create()函数来创建一个属于自己的窗口区域。但一般该窗口区域是内嵌在对话框或者单文档显示区的。
以对话框为例,定义一个该类对象,直接将对话框的某个区域分配给它,即可