类MainMenuItemDrawing主要负责主菜单的一级子菜单(如常见的文件菜单)的绘制。 实现如下: public class MainMenuItemDrawing 类MenuItemDrawing负责主菜单的子菜单和上下文菜单的绘制。 public class MenuItemDrawing 你对源码有兴趣。可以下载本文提供的源代码也可以从http://www.codeproject.com/cs/menu/MhOffice2003Menus.asp下载。 由于绘制的代码比较长,不宜在文中全部给出,所以具体的绘制代码将省去。文中只是给出了实现该组件的思路。 结束语:由于.net中使用了GDI+,所以组件的绘制工作比以前在MFC或者Win32API模式下绘制要容易地多。组件的开发最重要的一点就是当菜单项被置为自绘方式后,用户需要激活两个事件来定制菜单的显示。第一个事件对应Win32的WM_MEASUREITEM消息。窗口收到这个消息时,它就会触发一个 MeasureItem 事件给所有的自绘 MenuItem 对象。这个事件代理(Delegate)是一个名为MeasureItemEventHandler的类,与此事件相关的信息都被存储在一个MeasureItemEventArgs 对象中并被传递到事件处理函数(文中为mainMenuItem_MeasureItem或者menuItem_MeasureItem)。第二个事件与 Win32 的WM_DRAWITEM消息对应,并给每个注册了的事件处理函数传递一个 DrawItemEventArgs 对象。这个事件代理是一个名为DrawItemEventHandler的类。个人认为组件实现的难点和重点就是在两事件处理函数中根据菜单的不同状态所要进行的不同绘制工作。 |
正在阅读:用C#实现office2003风格的菜单组件用C#实现office2003风格的菜单组件
2005-08-24 09:49
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键