[译].dan.g.ToDoList的日历插件-10个简单步骤™
By robot-v1.0
本文链接 https://www.kyfws.com/applications/calendar-plug-in-for-dan-g-s-todolist-in-10-easy-s-zh/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 18 分钟阅读 - 8538 个词 阅读量 0[译].dan.g.ToDoList的日历插件-10个简单步骤™
原文地址:https://www.codeproject.com/Articles/22868/Calendar-Plug-in-for-dan-g-s-ToDoList-In-10-Easy-S
原文作者:[d3m0n]
译文由本站 robot-v1.0 翻译
前言
A Calendar UI extension component for the ToDoList, giving you a timeline view of your tasks
用于ToDoList的Calendar UI扩展组件,为您提供任务的时间线视图
- 下载演示-139.03 KB(Download demo - 139.03 KB)
- 下载DLL-76.97 KB(Download DLL - 76.97 KB)
- 下载源62.08 KB(Download source - 62.08 KB) (当前版本:((Current version:)1.0(1.0)-2008年6月6日发布)(- released 6 Jun, 2008))
介绍(Introduction)
本文试图描述我如何为.dan.g.创建日历插件(This article is an attempt to describe how I created a Calendar plug-in for .dan.g.’s) 待办事项清单(ToDoList) .它可能对您有用,有两个原因:(. It may be useful to you for two reasons:)
- 您可能只想下载DLL并获得任务列表的有用日历视图.(You might simply want to download the DLL and get a useful Calendar view of your task list.)
- 您可能想更进一步,编写自己的插件.(You may want to go that one step further and write your own plug-in.) 如果您出于#1的原因来到这里,而又因#2的原因而害怕,请不要担心.继续阅读-很简单!(If you’re here for reason #1 and scared of reason #2, please don’t worry. Read on - it’s easy!)
背景(Background)
当我开始使用.dan.g.强大的ToDoList时,这让我重新思考了处理任务的方式.以前,我不得不尝试真正记住(嗯)在我认为一项任务已完全完成之前需要做的每件事.现在说实话,我的记忆力比金鱼差,所以找到ToDoList真是天赐良机.现在,我将所有任务递归分解为数以百万计的子任务,并且不再需要我的记忆(让我自由地专注于其他同样重要的事情,例如我最喜欢的比尔`希克斯(Bill Hicks)笑话或主题曲<神秘的黄金城市>(The Mysterious Cities Of Gold). “总有一天,我们会找到黄金的城市^"-质量!(When I started using .dan.g.’s mighty ToDoList, it made me rethink the way I approached my tasks. Previously I had to try to actually remember (ugh) every minor thing that needed to be done before I could regard a task as fully completed. Now to be honest I have a memory worse than a goldfish, so finding the ToDoList was a godsend. I now break down all my tasks recursively into squillions of subtasks and my memory is no longer required (leaving it free to concentrate on other equally important things, such as my favourite Bill Hicks jokes, or the theme tune to the Mysterious Cities Of Gold. “Aaaaaah ahaa ahaaaaa someday we will find the cities of gold…” - quality!).)
拥有大量任务和子任务会带来一个问题,因为很难弄清楚您的进度比进度提前/落后(毕竟,这些是老板所关心的.弄错了,可能意味着去拜访了再一次.).因此,我开始花很多时间为所有任务设置"开始日期"和"到期日期”,但这还不够.无论开始/到期日期多么准确/最新,我都无法想象自己的脑袋进展.我想要的是对进度进度的快速概览,对项目的可视化.(Having a large number of tasks and subtasks poses a problem because it is difficult to figure out how far ahead/behind of schedule you are (after all, these are what your boss cares about. Get ‘em wrong and it could mean a visit to the Jobcentre. Again.). So, I started spending a lot of time setting the Start Date and Due Date for all my tasks, but this just wasn’t enough. I couldn’t visualize my progress in my head, no matter how accurate/up-to-date the Start/Due Dates were. What I wanted was a quick overview of my progress against the schedule, a visualization of my project.)
我需要的是ToDoList本身中的日历类型的视图.当然,我可以尝试以某种方式导出我的数据并将其导入另一个程序,但是这样做的乐趣何在?这个已经在.dan.g自己的ToDoList上了,所以我决定帮助他.这是我至少可以做的.他还就如何编写自己的ToDoList Calendar插件给了我广泛的建议.(What I needed was a calendar-type view within the ToDoList itself. Of course, I could have tried to export my data somehow and import it into another program, but where’s the fun in that? This was already on .dan.g.’s own ToDoList, so I decided to help him out. It’s the least I could do. And he gave me extensive advice on how to go about writing my own ToDoList Calendar plug-in.)
日历总览(Calendar Overview)
文件(The file)**CalendarExt.dll(CalendarExt.dll)**需要放在(needs to be placed in the)**待办事项清单(ToDoList)**目录(directory).(.)
日历可以从ToDoList的[Tools-> Calendar]菜单项中激活.这将显示无模式的日历窗口,(The Calendar can be activated from ToDoList’s [Tools->Calendar] menu item. This displays the modeless Calendar window for the)活动任务列表(active task list)(切换任务列表将适当地隐藏/显示"日历"窗口).日历窗口分为两个窗格:((switching task lists will hide/show the Calendar window appropriately). The Calendar window is split into two panes:)
- 左窗格=(Left hand pane =)
MiniCalendar
- 右窗格=(Right hand pane =)
BigCalendar
迷你日历(MiniCalendar)
- 的(The)
MiniCalendar
窗格最初包含当前月份和下个月.如果将窗口调整为足够大的大小,则该窗口还将包含下个月.(pane initially contains the current month and the next month. If the window is resized large enough, it will also contain the following month.) - 单击第一个月的向左/向右滚动箭头将相应地移动到上一个/下一个月.(Clicking the left/right scroll arrows on the first month will move to the previous/next month accordingly.)
- 单击一个月的标题将显示一个月列表,您可以从中选择要跳转到的月.(Clicking on the title of a month will display a list of months, from which you can select a month to jump to.)
- 点击日期(Clicking on a date in the)
MiniCalendar
将跳至该日期(will jump to that date in the)BigCalendar
.(.) - 单击"今天"菜单项将在两个日历中跳至该日期.(Clicking the “Today” menuitem will jump to that date in both calendars.)
大日历(BigCalendar)
- 的(The)
BigCalendar
窗格最初包含围绕当前日期的6周内的每个日期.(pane initially contains each date in the 6-week period surrounding today’s date.) - 中的日期(A date in the)
BigCalendar
包含活动任务列表中所有任务的开始/到期日期等于该日期.(contains all tasks in the active task list with a Start/Due Date equal to this date.) - 开始日期任务以绿色标记显示.(Start Date Tasks are shown with a green marker.)
- 截止日期任务以红色标记显示.(Due Date Tasks are shown with a red marker.)
- 在两个日历中,包含一个或多个任务的任何日期都将以黄色突出显示.(Any dates containing one or more tasks will be highlighted in yellow, in both calendars.)
用户动作(User Actions)
- 的(The)
MiniCalendar
可以使用[View-> Mini Calendar]菜单项隐藏/显示窗格.(pane can be hidden/shown using the [View->Mini Calendar] menu item.) - 的(The)
BigCalendar
可以使用滚动条,鼠标滚轮,箭头键和PageUp/PageDown进行操作.(can be manoeuvred using the scrollbars, mouse wheel, arrow keys and PageUp/PageDown.) - 点击任务中的(Clicking on a task in the)
BigCalendar
(或使用箭头键选择它并按Return键)将跳至活动任务列表中的该任务.((or selecting it using the arrow keys and pressing Return) will jump to that task in the active task list.) - 在活动任务列表中重命名任务将自动更新任务名称.(Renaming a task in the active task list will automatically update the task’s name in the)
BigCalendar
.(.) - 在活动任务列表中更改任务的开始/到期日期将自动在任务中移动任务(Changing a task’s Start/Due Date in the active task list will automatically move the task in the)
BigCalendar
.(.)
技术位(The Technical Bit)
的(The) BigCalendar
和(and) MiniCalendar
是我最慷慨地从The Code Project的其他文章"偷走"(是正确的词吗?)的第三方类.如果我使用别人的课程,我喜欢花一些时间来弄清楚它在做什么以及为什么这样做.我喜欢以自己的风格重写代码,因此我可以(a)更好地理解它,并且(b)调试起来更容易.我不需要的课程的任何部分都将被删除.这是我在日历中使用的以下三个类所做的工作:(are third party classes which I most graciously “stole” (is that the right word?) from other articles at The Code Project. If I use someone else’s class, I like to spend some time working out what it is doing and why it is doing it. I like to rewrite the code in my own style so I can (a) understand it better and (b) debug it easier. Any part of the class I don’t need will be ripped out. This is what I’ve done with the following three classes that I used in the Calendar:)
- 右侧窗格((The right hand pane ()
BigCalendar
)是一个漂亮的定制日历,由() is a beautiful custom-drawn calendar by) [弗雷德里克雷泽(Frederic Rezeau)(*Frederic Rezeau*)](http://www.codeproject.com/KB/miscctrl/CCalendarCtrl.aspx) .我对此课进行的主要更改是使用(*. The main change I made to this class was to use*)
CListBox` 在每个日期中,而不是直接将任务绘制为文本.(es in each date instead of drawing the tasks as text directly.) - 左侧窗格((The left hand pane ()
MiniCalendar
)是一个很棒的Microsoft Outlook风格的迷你日历,() is a cool Microsoft Outlook-style mini-calendar by) 马特`古列特(Matt Gullett) .(.) - 的(The)
CListBox
中的(es in the)BigCalendar
是(are)CTransparentListBox
es by(es by) 阿里`拉菲(Ali Rafiee)(Ali Rafiee) .我还向此类添加了工具提示支持.(. I also added tooltip support to this class.)
ToDoList的插件架构(ToDoList’s Plug-in Architecture)
ToDoList使用插件来提供多种方法来实现对主应用程序的不同自定义.已经使用了多种类型的插件,包括加密,自定义注释,任务导入器/导出器和UI扩展.使用插件体系结构的好处包括:(ToDoList uses plug-ins to provide a number of ways of achieving different customizations to the main application. There are several types of plug-ins already in use, including Encryption, Custom Comments, Task Importers/Exporters and UI Extensions. The benefits of using a plug-in architecture include:)
- 保持不同功能的实现不同,从而使所有各方的维护变得更加容易.(Keeping the implementations of different features distinct, making maintenance considerably easier for all parties.)
- 避免不必要地增加核心应用程序的大小和复杂性.(Avoiding increasing the size and complexity of the core application unnecessarily.)
- 使第三方可以更轻松,更容易地创建自己的插件,而不用编辑(甚至破坏)核心应用程序的代码.(Making it easier and more accessible for third parties to create their own plug-ins, rather than editing (and perhaps breaking) the code of the core application.)
- 仅通过删除DLL即可删除全部不需要的功能.(Allowing an entire chunk of unneeded functionality to be removed just by deleting a DLL.)
ToDoList的所有插件都是以相同的方式构造的:该插件驻留在DLL中,并导出一个(或多个)C函数(它们的名称未修饰/未修饰).这些导出功能之一通常是(All of ToDoList’s plug-ins are architected the same way: the plug-in resides in a DLL and exports one (or more) C functions (their names are unmangled/undecorated). One of these exported functions is typically a)
CreateXXX()
该函数返回指向纯虚拟接口(类)的指针,然后ToDoList使用该接口与插件进行通信.对于UI扩展插件,此函数称为(function that returns a pointer to a pure virtual interface (class) that ToDoList then uses to communicate with the plug-in. In the case of UI Extension plug-ins, this function is called)CreateUIExtensionInterface()
.(.)
尽管对纯虚拟接口的完整讨论不在本文的讨论范围之内,但实质上,它们定义了插件承诺支持的协定,而无需在两个组件之间进行任何明确的绑定.您可能会说它们等同于C ++的调用(Whilst a full discussion of pure virtual interfaces is beyond the scope of this article, essentially they define a contract which the plug-in commits to supporting without requiring any explicit binding between the two components. You might say that they are the C++ equivalent of calling) GetProcAddress
在已加载的DLL上.纯虚拟接口是COM的核心,并且是将接口与组件实现分离的一种行之有效的方法.(on a loaded DLL. Pure virtual interfaces are at the heart of COM and are a proven method for decoupling the interface and implementation of a component.)
-
注意1:ToDoList避免仅仅因为注册要求而使用COM,因为注册要求会阻止插件在USB记忆棒上工作.(Note 1: ToDoList avoids using COM simply because of the registration requirements which would prevent plug-ins working off a USB stick.)
-
注意2:ToDoList通常在启动时加载插件,然后在会话期间保持接口指针.(Note 2: ToDoList typically loads plug-ins at start-up and then holds onto the interface pointer for the duration of the session.) 对于UI扩展插件,ToDoList提供了两个接口,它们都位于(For UI Extension plug-ins, ToDoList provides two interfaces, both located in)共享\ IUIExtension.h(Shared\IUIExtension.h):(:)
-
的(The)
IUIExtension
interface接口是一个高级接口,它允许ToDoList创建插件窗口,还可以从插件获取菜单文本和图标信息,以便可以将菜单项添加到每个插件的[工具]菜单中.(interface is a high-level interface that allows ToDoList to create plug-in windows and also obtain menu-text and icon information from the plug-in so that a menu item can be added to the [Tools] menu for each plug-in.) -
的(The)
IUIExtensionWindow
界面代表用户将实际与之交互的窗口.这是插件的胆量所在,响应来自ToDoList的编辑通知,并在用户单击某些内容时有选择地将选择事件发送回ToDoList.(interface represents the window that the user will actually interact with. This is where the guts of the plug-in reside, responding to editing notifications from ToDoList and optionally sending selection events back to ToDoList when the user clicks on something.)
创建日历插件(Creating the Calendar Plug-in)
这里有(Here are the)10个简单步骤™(10 Easy Steps™)我曾经创建了一个基本的日历工作插件:(I used to create a basic working Calendar plug-in:)
阶段1:创建项目,创建类,创建接口存根(Stage 1: Create Project, Create Classes, Create Interface Stubs)
- 创建一个新的C ++ DLL项目,名为(Create a new C++ DLL project, called)
CalendarExt
.更改链接器设置,以便(. Change the linker settings so that)**CalendarExt.dll(CalendarExt.dll)**与以下文件夹相同(is built to the same folder as)待办事项清单(ToDoList.exe).(.) - 创建两个新类,(Create two new classes,)
CCalendarExtApp
和(and)CCalendarFrameWnd
,源于(, derived from)IUIExtension
和(and)IUIExtensionWindow
分别包含所有纯虚函数的存根.(respectively, containing stubs for all the pure virtual functions.) - 创建一个导出函数,名为(Create an exported function called)
CreateUIExtensionInterface
(也定义于((also defined in)共享\ IUIExtension.h(Shared\IUIExtension.h)),它仅返回指向新创建的指针(或() which simply returns a pointer to a newly created (or)static
)的实例() instance of)CCalendarExtApp
.(.) - 实施(Implement the)
CCalendarExtApp::GetMenuText
函数返回"日历"并实现(function to return “Calendar” and implement the)CCalendarExtApp::GetIcon()
函数以返回适当的图标.(function to return an appropriate icon.) - 编译项目并重新启动(Compile the project and restart)待办事项清单(ToDoList.exe).通过检查[工具]菜单中带有正确图标的名为[日历]的菜单项,检查ToDoList是否在找到插件.注意:此时,选择菜单项将无效,因为尚未将其连接起来.(. Check that ToDoList is finding the plug-in by examining the [Tools] menu for a menu item called [Calendar], with the correct icon. Note: at this point, selecting the menu item will have no effect because this has not been wired up yet.)
阶段2:实现接口功能,创建窗口(Stage 2: Implement Interface Functions, Create Window)
- 实行(Implement)
CCalendarFrameWnd::Create()
为用户创建合适的窗口进行交互.我选择派生(to create a suitable window for the user to interact with. I chose to derive)CCalendarFrameWnd
从(from)CFrameWnd
,但您可以使用无模式(, but you could use a modeless)CDialog
,(,)CPropertySheet
,(,)CView
管他呢.(or whatever.) - 实行(Implement)
CCalendarExtApp::CreateExtensionWindow()
返回指向的新创建实例的指针(to return a pointer to a newly created instance of)CCalendarFrameWnd
并调用此窗口的(and call this window’s)Create
功能.(function.) - 重新编译项目并重新启动(Recompile the project and restart)待办事项清单(ToDoList.exe).检查选择[Tools-> Calendar]菜单项是否显示该窗口的实例.这也是检查多个任务列表之间的切换是否正确隐藏并显示正确窗口的有用时间,因为每个打开的任务列表都有其自己的插件窗口实例.切换任务列表应关闭当前任务列表的插件窗口,并打开新任务列表的插件窗口(如果有).(. Check that selecting the [Tools->Calendar] menu item displays an instance of the window. This is also a useful time to check that switching between multiple task lists correctly hides and displays the correct window, since each open task list gets its own instance of the plug-in window. Switching task lists should close the plug-in window of the current task list and open the plug-in window of the new task list (if it has one).) 注意:ToDoList负责插件窗口的所有显示和隐藏.插件的职责只是简单地合理地实现纯虚拟接口.(Note: ToDoList looks after all the display and hiding of plug-in windows; the plug-in’s responsibility is simply to implement the pure virtual interface sensibly.)
阶段3:不太容易-实施将在窗口中显示的内容,以响应任务列表更新事件(Stage 3: The Not-quite-so-easy Bit - Implement What will be Displayed in Your Window, Respond to Task List Update Events)
-
修改(Modify the)
CCalendarFrameWnd
类显示(class to display the)CBigCalendarCtrl
和(and)CMiniCalendarCtrl
窗口在其客户区域中,并响应调整大小的事件.(windows in its client area, and to respond to resizing events.) -
在插件和任务列表之间实现双向通信(如有必要).这涉及:(Implement two-way communication (if necessary) between your plug-in and the task list. This involves:)
- 添加代码以响应活动任务列表中的编辑事件.更改任务的属性后,(Adding code to respond to editing events from the active task list. When a task’s attributes are changed,)
CCalendarFrameWnd::Update()
被叫.从这里,我更新我的(gets called. From here, I update my)CCalendarData
具有更新信息的对象(用于缓存活动任务列表的所有任务的类).然后我打电话给(object (a class to cache all tasks for the active task list) with the updated information. I then call a)TasklistUpdated
都在(function in both the)CBigCalendarCtrl
和(and)CMiniCalendarCtrl
对象,告诉他们使用最新数据更新视图.(objects, which tells them to update their views using the latest data.) - 添加代码以从插件通知活动任务列表.就我而言,当用户点击日历中的任务时,我将(Add code to notify the active task list from the plug-in. In my case, when the user clicks on a task in the calendar, I send the)
WM_TDCM_TASKLINK
消息发送到ToDoList主应用程序窗口,以及单击的任务的ID. ToDoList解释此消息并在活动任务列表中选择指定的任务.(message to the main ToDoList application window, along with the ID of the clicked task. ToDoList interprets this message and selects the specified task in the active task list.)
- 添加代码以响应活动任务列表中的编辑事件.更改任务的属性后,(Adding code to respond to editing events from the active task list. When a task’s attributes are changed,)
而已!我不会为您带来有关Big/MiniCalendars工作原理的更多详细信息.您没有时间!你在等什么?(That’s it! I won’t bore you with further details about how the Big/MiniCalendars work. You haven’t got time for that! What are you waiting for?)现在去写一个插件!(Go write a plug-in now!!)
此版本的ToDoList Calendar插件已准备好与5.4或更高版本一起使用.请关注此页面以获取更新.欢迎所有评论,错误,抱怨或建议.(This version of the ToDoList Calendar plug-in is ready to go with version 5.4 or later. Please keep an eye on this page for updates. All comments, bugs, grumbles or suggestions are welcome.)
致谢(Acknowledgements)
非常感谢我^嗯^所借的三类作家:(Big thanks go to the writers of the three classes that I, erm… borrowed, namely:)
- 弗雷德里克`雷泽(Frederic Rezeau)(Frederic Rezeau)
- 马特`古列特(Matt Gullett)
- 阿里`拉菲(Ali Rafiee)(Ali Rafiee) 显然也要感谢.dan.g.,我认为这是开源代码编写人员的灵感来源.我认为我从来没有遇到过这样一个好人,他具有如此快速的错误/请求周转时间以及对他的用户群的奉献精神. Dan一直对我很有耐心,并为我提供了很多有用的插件体系结构和有关Calendar的建议,帮助我修复了一些棘手的错误,并为我提供了本文的大量信息!(A massive thanks also obviously to .dan.g., who in my opinion is an inspiration to open source coders. I don’t think I’ve ever come across such a nice guy with such quick bug/request turnaround and dedication to his user-base. Dan has been very patient with me and helped me lots with his plug-in architecture and suggestions for the Calendar, helping me to fix some dodgy bugs, as well as giving me loads of information for this article!)
未来功能(Future Features)
- 任务着色以匹配活动任务列表中的颜色(Task colouring to match the colours in the active task list)
- 将任务从一个日期拖放到另一个日期(Drag and drop a task from one date into another)
- 任务上的弹出菜单(Pop-up menu on a task)
- 额外的键盘处理,例如删除任务的Delete键(Extra keyboard handling, such as the Delete key to remove a task)
- 打印窗口内容(到打印机和文件)(Print window contents (to printer and to file))
- 在开始和结束之间添加中间日期(和完成日期?)(Add intermediate dates between Start and End (and Completed?))
- 从TDL 5.5添加到期时间功能(Add Due Time feature from TDL 5.5)
历史(History)
-
1.0 alpha(1.0 alpha)(2008年1月12日)((12 Jan 2008))
- 第一版(First version)
-
1.0 alpha.2(1.0 alpha.2)(2008年1月16日)((16 Jan 2008))
- 新增:Esc关闭"日历"窗口(New: Esc closes the Calendar window)
- 新增:任务工具提示(New: Tooltips for tasks)
- 新增:标题栏上的最大化按钮(New: Maximize button on title-bar)
- 固定:日单元格中的非ASCII字符支持(Fixed: Non-ASCII character support in day cells)
-
1.0 alpha.3(1.0 alpha.3)(2008年2月12日)((12 Feb 2008))
- 新增:显示/隐藏周末-使用[查看->周末]菜单(New: Show/Hide Weekends - use the [View->Weekends] menu)
- 新增:记住[查看->周末]和[查看->迷你日历]设置(在(New: Remembers [View->Weekends] and [View->Mini Calendar] settings (in the)**ToDoList.ini(ToDoList.ini)**文件)(file))
- 固定:第二次打开"日历"窗口后,按键立即不执行任何操作(Fixed: Immediately after opening the Calendar window the second time, key presses do nothing)
- 固定:现在根据当前区域设置,在MiniCalendar和BigCalendar中设置一周的第一天(Fixed: First day of the week is now set according to the current regional settings, in both MiniCalendar and BigCalendar)
-
1.0 alpha.4(1.0 alpha.4)(2008年3月9日)((9 Mar 2008))
- 新增:保存窗口位置,包括最大化状态(New: Save window position, including maximized state)
- 新增:选择要显示的周数-使用[查看->周数]菜单(New: Select the number of weeks to display - use the [View->Number Of Weeks] menu)
- 新增:选择已完成任务的格式-使用[查看->已完成任务…]菜单(New: Select the format of completed tasks - use the [View->Completed Tasks…] menu)
- 新增:将相关任务列表的名称添加到"日历"窗口标题栏中(需要TDL版本5.4.9或更高版本)(New: Add the name of the associated tasklist to the Calendar window titlebar (requires TDL version 5.4.9 or higher))
- 固定:在主任务列表中编辑任务的注释窗格时,日历闪烁(Fixed: Calendar flicker when editing the comments pane of a task in the main tasklist)
-
1.0 alpha.5(1.0 alpha.5)(2008年4月30日)((30 Apr 2008))
- 新增:添加了状态栏以显示有关所选任务的其他信息-使用[查看->状态栏]菜单(New: Added status-bar to show additional information for the selected task - use the [View->Status Bar] menu)
- 新增:工具提示现在显示悬停项目的完整路径(New: Tooltips now display full path of hovered item)
- 新增:将任务双击行为更改为单击-添加手形光标使其更加明显(New: Changed task double-click behaviour to single-click - added hand-cursor to make it more obvious)
- 新增功能:MiniCalendar中前几个月/下几个月的天数现在显示为灰色(New: Days from previous/next months in MiniCalendar are now shown in grey)
- 新增:用"转到今天"菜单项替换了"今天"按钮(New: Replaced the Today button with a Go To Today menuitem)
- 新增:现在,在MiniCalendar上滚轮可滚动BigCalendar(New: Mousewheeling over the MiniCalendar now scrolls the BigCalendar)
- 修复:超时后消失的工具提示没有重新出现(Fixed: Tooltips that disappeared after timeout did not reappear)
- 固定:BigCalendar和MiniCalendar中的统一字体(Fixed: Unified fonts across BigCalendar and MiniCalendar)
- 固定:现在以BigCalendar以非英语显示正确的星期几(Fixed: Now displays correct days of week in non-English languages, in BigCalendar)
- 固定:将父任务标记为完成时更新子任务(Fixed: Updating child tasks when marking parent task as complete)
- 固定:可以在BigCalendar中右键单击以跨多个单元选择多个任务(Fixed: Could right-click to select multiple tasks across multiple cells, in BigCalendar)
-
1.0(1.0)(2008年6月6日)((6 Jun, 2008))
- 新增:添加了自动更新功能-使用[检查更新…]菜单(New: Added auto-update functionality - use the [Check for Updates…] menu)
- 固定:显示很长的工具提示时的GPF(Fixed: GPF when displaying a very long tooltip)
- 固定:从另一个应用切换回"日历"窗口后,焦点丢失(Fixed: Focus lost after switching back to Calendar window from another app)
- 固定:使用MiniCalendar月度选择器后失去焦点(Fixed: Focus lost after using the MiniCalendar Month Picker)
- 固定:如果1则不显示BigCalendar中的月份名称(Fixed: Month names in BigCalendar were not being displayed if the 1)圣(st)由于是在周末,所以隐藏了月份中的某天(day of the month is hidden because it’s on a weekend)
- 固定:改进了小界面(Fixed: Minor UI improvements)
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
C++ VC6 Windows MFC Visual-Studio Dev 新闻 翻译