\t\t孙鑫 第六课 菜单编程笔记

1 将菜单设为空

SetMenu(NULL);

2 给MainFrame添加自己写的菜单  

CMenu menu;                               //new menu

menu.LoadMenu(IDR_MENU1);  //load menu, para is ID of the Menu

SetMenu(&menu);                        //set menu 

menu.Detach();                             // menu为局部变量,为了不 让menu对象析构时在在程序里看不见该                                                         //   菜单

3 添加消息函数

①在类声明中添加成员函数原型: afx_msg   void Function(para1, ...);  // void 返回值仅仅是示例 

②在cpp中添加消息映射: ON_COMMAND(ID_xx,  Function)   //函数名无括号,后面无号

③在cpp中定义函数


4 给菜单项添加图标

CMenu::SetMenuItemBitmaps

BOOL SetMenuItemBitmaps(UINT nPosition,UINT nFlags,const CBitmap* pBmpUnchecked,  constCBitmap*  pBmpChecked);

eg.

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CBitmap bitmap2;

bitmap2.LoadBitmap(IDB_BITMAP2);

GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0, MF_BYPOSITION, &bitmap, &bitmap2);

bitmap.Detach();

bitmap2.Detach(); //这里bitmap bitmap2是局部变量,析构时图片会消失,加上这句就好了


5 获取系统信息

Platform SDK: Windows System Information

int GetSystemMetrics( int nIndex // system metric or configuration setting);

参数为要获取哪方面的系统信息 详见MSDN


6 菜单可用/不可用

CMenu::EnableMenuItem

UINT  EnableMenuItem(UINT  nIDEnableItem,UINT  nEnable);

NOTE:在MFC中提供了一种供菜单是否可用的更新机制,如果要自己改变菜单可用不可用,要在MAINFRAM类构造函数中将m_bAutoMenuEnable = FALSE;

eg.

GetMenu()->GetSubMenu(0)->EnableMenuItem(1, MF_BYPOSITION | MF_GRAYED | MF_DISABLED); //使菜单不可用, 其中MF_DISABLED菜单变灰色并不是必须的 但要加上。


7 追加菜单

CMenu::AppendMenu

BOOL AppendMenu(UINT nFlags,UINT nIDNewItem = 0,LPCTSTR lpszNewItem = NULL);

BOOL AppendMenu(UINT nFlags,UINT nIDNewItem,const CBitmap*pBmp);

①追加弹出式菜单 也就是顶级菜单

CMenu popup; //弹出式菜单

popup.CreatePopupMenu();

GetMenu()->AppendMenu(MF_STRING | MF_POPUP, (UINT)popup.m_hMenu, "编辑(&E)"); //MF_POPUP是还必须的

②菜单栏中插入顶级菜单(而非在最后,而是在几个顶级菜单之间插入)

CMenu::InsertMenu

BOOL InsertMenu(UINT nPosition,UINTnFlags,UINT nIDNewItem=0,LPCTSTR lpszNewItem=NULL);

BOOL InsertMenu(UINT nPosition,UINTnFlags,UINT nIDNewItem,const CBitmap* pBmp);

eg.

CMenu popup2;

popup2.CreatePopupMenu();

GetMenu()->InsertMenu(1, MF_STRING | MF_BYPOSITION | MF_POPUP, (UINT)popup2.m_hMenu, "HAHA");

popup2.Detach();

③在已有菜单中追加菜单项

eg.

GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING | MF_ENABLED, 300 /* ID */, "HELLO");


 

④在已有菜单中某位置插入菜单项

eg.

GetMenu()->GetSubMenu(1)->InsertMenu(MF_STRING | MF_ENABLED, IDM_XXX  /* ID */, "MOTO");

 

8 为了让菜单项中和工具栏中的按钮对应,即能响应同一段代码,就要把该菜单项和该工具按钮的ID写成一样的即可。

 

9 弹出菜单

CMenu::TrackPopupMenu

BOOL  TrackPopupMenu(UINT nFlags,int x,int y,CWnd *pWnd,LPCRECT lpRect=NULL);


10 转换坐标:客户区坐标到屏幕坐标

CWnd::ClientToScreen 

void  ClientToScreen(LPPOINT lpPoint)const;

void ClientToScreen(LPRECT lpRect)const;

11 窗口重绘 

CWnd::Invalidate(bool bErase = TRUE)

12 LOWORD 宏

WORD LOWORD(DWORD dwValue); //dwValue is 32-bit

选取低字节,  相似的如同WORD  HIWORD(DWORD dwValue)


13 CStingArray 类 

 class Members: GetSize(),  GetAt(int index),  详见MSDN

14 CMainFrame::GetActiveView() 函数

获得当前View类指针

 


 








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值