如何按下Ctrl,选种几个图元,就是我在视图中画几个文本框,如何按下Ctrl键,全部选种它们
我只知道用鼠标事件,具体的我不太清楚,最好给个列子
if ((nFlags & MK_CONTROL) != 0)

{
}

解决方案 »

  1.   

    为每个图元增加选中标记。以及选择函数。当鼠标按下时,判断鼠标点是否在该图元的范围内,如果在,则将选中标记设置为true。然后调用重画,对所有图元,如果选中标记为true,则需要绘制选中标记。
      

  2.   

    For example:
    void CSelectTool::OnLButtonDown(CMapDrawerView* pView, UINT nFlags, const CPoint& point)
    {
    CMapItem* pObj;
    selectMode = none; // Check for resizing (only allowed on single selections)
    Point3D localF((long double)point.x,(long double)point.y);
    pView->ClientToDoc(localF);
    if (pView->m_selection.GetCount() == 1)
    {
    pObj = pView->m_selection.GetHead();
    nDragHandle = pObj->HitTest(localF, pView, TRUE);
    if (nDragHandle != 0)
    selectMode = size;
    else if ((nFlags & MK_SHIFT) == 0)
    pView->Deselect(pObj);
    }
    Graphics graphics(theApp.m_dcScreen.m_hDC); // See if the click was on an object, select and start move if so
    if (selectMode == none)
    {
    pObj = pView->GetDocument()->ObjectAt(localF,&graphics); if (pObj != NULL)
    {
    selectMode = move;
    pObj->m_bSelected = TRUE;
    if (!pView->IsSelected(pObj))
    pView->Select(pObj, (nFlags & MK_SHIFT) != 0); // Ctrl+Click clones the selection...
    if ((nFlags & MK_CONTROL) != 0)
    pView->CloneSelection();
    }
    } graphics.ReleaseHDC(theApp.m_dcScreen.m_hDC);
    // Click on background, start a net-selection
    if (selectMode == none)
    {
    if ((nFlags & MK_SHIFT) == 0)
    pView->Select(NULL); selectMode = netSelect; CClientDC dc(pView);
    CRect rect(point.x, point.y, point.x, point.y);
    rect.NormalizeRect();
    dc.DrawFocusRect(rect);
    } lastPoint = localF;
    CDrawTool::OnLButtonDown(pView, nFlags, point);
    }