CMenuButton的实现
来源:互联网 发布:深圳警察收入知乎 编辑:程序博客网 时间:2024/05/16 07:26
这几天工作上需要在原先的主菜单栏上添加几个Checkbox, 直接贴吧,翻烂了MSDN都没找到相关的内容。
如果直接建个dialog,然后在上面用cmenu实现,则这个dialog必须是popup类型,这样会引起很多问题,不好用。
只好自己想别的办法实现, 大致思路:
建一个长条dialog,在dialog上动态生成点击能产生菜单,并能响应菜单的Button (我取了个名字CMenuButton) ,然后在dialog的右侧放上几个checkbox。 难点就是CMenuButton的设计。
建个类:
class CMenuButton : public CButton
{
DECLARE_DYNAMIC(CMenuButton)
public:
CMenuButton(); //构造函数
void SetMenuID(int nID); //设置关联菜单ID
void SetForeColor(COLORREF color); //设置文本颜色
void SetBkColor(COLORREF color); //设置背景颜色
void SetText(CString str); //设置按钮文本
BOOL isClick(); //是否单击主按钮区
void SetMenuHandle(HMENU hMenu); //设计menu句柄 (一个button带一个popup的menu)
void OnShowMenu(int x, int y); //显示menu,这个方法可用可不用,看情况选择
void SetSubMenux(WORD subMenu_x);
WORD GetSubMenux();
WORD GetSubMenuy();
void SetMaxSubMenuy(WORD MaxSubMenu_y);
private:
int m_State; //按钮状态 不同状态按钮形状不同
BOOL b_InFlag; //鼠标进入标志
BOOL b_ClickFlag; //单击选择区
BOOL b_ClickBut; //单击主体区
CString m_strText; //按钮文字
COLORREF m_ForeColor; //文本颜色
COLORREF m_BackColor; //背景色
CRect m_ButRect; //按钮尺寸
CRect m_LRect; //按钮左部尺寸
CRect m_RRect; //按钮右部尺寸
CMenu m_Menu; //弹出菜单
int m_MenuID; //菜单ID
HMENU m_hMenu; //菜单句柄
WORD m_subMenu_x; //用于定位菜单
WORD m_subMenu_y; //用于定位菜单
WORD m_MaxSubMenu_y;
BOOL m_LButtonFlag; //左键点击标志
void DrawButton(CDC *pDC); //绘制按钮
LRESULT SendMessageToParenet(WPARAM wParam, LPARAM lParam); //发送消息给父窗口,处理菜单命令
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
public:
virtual void PreSubclassWindow();
//用于处理菜单消息,在这里面调用SendMessageToParenet()
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
// Generated message map functions
public:
//{{AFX_MSG(CMenuButton)
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
在使用时候调用基类的Create动态生成CMenuButton,然后读配置文件(菜单项更改时候只需要更改配置文件而不需要重新编译程序)生成popupmenu,
然后调用CMenuButton::SetMenuHandle()把该popupmenu跟CMenuButton关联起来
最后就剩下比较具体的消息响应,方法逻辑等东西了。
全部完成后,测试下,大功告成,只是某些细节还需要改进下。
- CMenuButton的实现
- CMenuButton控件
- 三子棋的实现的实现的实现
- JAVA实现的时钟实现
- 模态框的的实现
- 杀毒软件的简单实现的简单实现
- android的实现电话号码的实现
- 音频的实现音乐声音的实现
- malloc的实现、内存池的实现
- 异形窗体的实现
- 个性化的分页实现
- ASP数据库连接的实现
- Struts单选框的实现
- 梅西迭代算法的实现
- 翻页功能的实现
- Struts,MVC 的实现
- 实现JavaScript的继承
- 接口的显示实现
- 全新打造的 TreeView
- ruby学习笔记(3)--Container(Array/Hash)
- 精明人,聪明人,明白人--经典(ZT)
- C语言实现的可动态增长的队列
- 做一个有品位的男人
- CMenuButton的实现
- 今天开始,2006.11.30.
- Java连接access数据库
- 历史轮廓[整理1]
- 程序员的程序不工作时他们最常说的20个回复
- java连接Access数据库的两种代码
- 在这开发专业园地,拥有一片自留地!
- 使用Rational Data Architect v6.1构建,测试,部署DB2 SAMPLE数据库
- 用JS控制IE