请教一个很弱的菜单问题

geyufly 2005-05-29 09:25:45
在SDI程序中我新建了一个菜单ID_MENU1后在CMAINFRAM类的CREATE中加了代码 menu1.LoadMenu(IDR_MENU1);
SetMenu(&menu1);
MENU1我以定义为菜单类对象,可是在我设计的菜单中的菜单项在程序运行是全是灰显状态,是怎么回事啊大哥们
还有顺便请教下VC中是要区分大小写?
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgxysl 2005-05-29
  • 打赏
  • 举报
回复
你必须在CPP文件中为菜单的ID添加消息映射,如:
BEGIN_MESSAGE_MAP(CLgxgridForMoreDocView, CView)
//{{AFX_MSG_MAP(CLgxgridForMoreDocView)
ON_WM_KEYDOWN()
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_SIZE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, OnPrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, OnPrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnPrintView)
ON_COMMAND(ID_FILE_PRINT_SETUP, OnPrintSetup)
ON_COMMAND(ID_EDIT_COPY, OnCopy)//复制
ON_COMMAND(ID_EDIT_PASTE, OnPase)//粘贴
ON_COMMAND(ID_EDIT_CUT, OnCut)//剪切
ON_COMMAND(ID_UNITE, OnUnite)//合并单元格
ON_COMMAND(ID_SPLIT, OnSplit)//拆分单元格
ON_COMMAND(ID_IntoGrid, OnIntoGrid)//拆分单元格
ON_COMMAND(ID_InRow, OnInRow)
ON_COMMAND(ID_DelRow, OnDelRow)
ON_COMMAND(ID_ghw,OnHW)
ON_COMMAND( ID_DelData,OnDelData)

END_MESSAGE_MAP()

同时你还要在头文h中添加处理函数的说明,如:
protected:
//{{AFX_MSG(CLgxgridForMoreDocView)
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
afx_msg void OnCut();//剪切
afx_msg void OnCopy();//复制
afx_msg void OnPase();//粘贴
afx_msg void OnPrintView();//打印预览
afx_msg void OnPrintSetup();//打印设置
afx_msg void OnPrint();//打印
afx_msg void OnUnite();//合并
afx_msg void OnSplit();//拆分
afx_msg void OnIntoGrid();//插入表格
afx_msg void OnInRow();
afx_msg void OnDelRow();
afx_msg void OnHW();
afx_msg void OnDelData();
afx_msg BOOL OnDataChangLgxs(UINT nID,long hid, long lid, LPCTSTR oldData, LPCTSTR newData);//数据变动事件处理函数
afx_msg BOOL OnDragDropXYLgxs(UINT nID,float x, float y);
afx_msg BOOL OnDragOverXYLgxs(UINT nID,float x, float y);
afx_msg BOOL OnClickLgxs(UINT nID);
afx_msg BOOL OnMouseDownLgxs(UINT nID,short Button, short Shift, float x, float y);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void GridAdd(int xi,int Lists,int Rows,int Left,int Top,int Height,int Width);
afx_msg void OnLwChangLgxs(UINT nID,long Lid, long Lw);
afx_msg void OnUnChangLgxs(UINT nID,long d1r, long d1l, long d2r, long d2l);
afx_msg void OnSpChangLgxs(UINT nID,long d1r, long d1l);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()//声明消息
DECLARE_EVENTSINK_MAP()//声明事件


再有,你还必须写具体的处理函数过程,如:
void CLgxgridForMoreDocView::OnHW()
{
if(NowId>0)
{
SetHW Setghw;
CLgxgridForMoreDocDoc* Mdoc=this->GetDocument();
Mdoc=this->GetDocument();
Setghw.Height=Mdoc->GData[NowId].Height;
Setghw.Width=Mdoc->GData[NowId].Width;
Setghw.DoModal();
if(Setghw.Onyes=1)
{
CRect MRect;
Lgxs[NowId].GetWindowRect(MRect);
ScreenToClient(&MRect);
MRect.bottom=MRect.top+Setghw.Height;
MRect.right =MRect.left+Setghw.Width;
Lgxs[NowId].MoveWindow(MRect,true);
//将改动保存到文档
Mdoc->GData[NowId].Left=MRect.left;
Mdoc->GData[NowId].Top=MRect.top;
Mdoc->GData[NowId].Height=Setghw.Height;
Mdoc->GData[NowId].Width=Setghw.Width;
}
}

}




Kudeet 2005-05-29
  • 打赏
  • 举报
回复
没有添加菜单处理的程序都是灰色不可用的。
星辰游侠 2005-05-29
  • 打赏
  • 举报
回复
灰显说明菜单没有进行消息映射。
VC区分大小写

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧