回 帖 发 新 帖 刷新版面

主题:怎样给一个子菜单的索引添加Check??就是一个小对号

我想实现的就是。
我在MainFrame中增加了一个子菜单,绘图。下面有四个选项,点,直线,椭圆,矩形,然后我选择了之后,就在View中画出所要的图形,但是我这个实现了,但是,怎么实现对我选了点,然后会有一个小对号在 点上面?然后我选择了椭圆,那么椭圆会有小对号,但是点的就消失?????
 
我的代码。
void COpenWView::OnPoint() 
{
     m_nDrawType=1;
     SendMessage(UM_POINT);
      //pCmdU->SetCheck();
     // A menu item can be replaced with a control-bar button or other command user-interface object without changing the code within the ON_UPDATE_COMMAND_UI handler. 
        // TODO: Add your command handler code here
    
}

void COpenWView::OnLine() 
{   m_nDrawType=2;
    
    // TODO: Add your command handler code here
    
}

void COpenWView::OnJunjle() 
{m_nDrawType=3;  // 设置索引
   
    // TODO: Add your command handler code here
    
}

void COpenWView::OnArea() 
{
    m_nDrawType=4;
  
    
    // TODO: Add your command handler code here
    
}

void COpenWView::OnLButtonDown(UINT nFlags, CPoint point) 
{
         m_cPoint=point;  // 记录原来的地址
   
    CView::OnLButtonDown(nFlags, point);
}
void COpenWView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    CPen pen(PS_DASHDOT|PS_GEOMETRIC,1,RGB(0,22,2)),*open;
    open=dc.SelectObject(&pen);
    // 创建一个透明画刷,把这个图形的线条为透明
    //CBrush *pbrush=CBrush::FromHandle(( HBRUSH )GetStockObject(NULL_BRUSH));
   // 作用在于把一个句柄换成一个指针
    CBrush* pbrush=new CBrush,*obr=new CBrush;  // 记住要分配空间的。不然会导致错误的不能为read

    pbrush->CreateSysColorBrush(HS_DIAGCROSS);
 
    obr=dc.SelectObject(pbrush);  
      
    switch(m_nDrawType)
   {
   case 1: dc.SetPixel(point,RGB(255,0,0)); ///实现相应的画图功能。
       break;
   case 2:dc.MoveTo(m_cPoint);
       dc.LineTo(point);

       break;
   case 3: dc.Rectangle(CRect(m_cPoint,point));
       break;
   case 4:dc.Ellipse(CRect(m_cPoint,point));
       break;
   default :break;

   }

    dc.SelectObject(open);
    dc.SelectObject(obr);
    CView::OnLButtonUp(nFlags, point);
}
但是,我通过为这个四个选项增加命令更新函数,,但是,我看到不能为为他们增加成员变量。。
而且 SetCheck()里面的参数是固定的。不能动态的改变。。。q
我用在Frame增加一个手动更新但是老是不能为read。代码如图
void CMainFrame::OnPoint() 
{
     GetMenu()->GetSubMenu(4)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);
    // TODO: Add your command handler code here
    
}

回复列表 (共1个回复)

沙发

用SetCheck()函数  添加的是UPDATE_COMMAND_UI方法,而不是COMMAND方法

我来回复

您尚未登录,请登录后再回复。点此登录或注册