【问题标题】:Showing size grip in CDialog?在 CDialog 中显示尺寸夹点?
【发布时间】:2009-03-04 18:50:20
【问题描述】:

我已经看到处理这个东西的绘图的代码 (DFCS_SCROLLSIZEGRIP),但肯定有一个窗口样式我可以应用它来“免费”获得它。对吧?

【问题讨论】:

    标签: winapi mfc resize


    【解决方案1】:

    为了代替更好的答案,我将发布我拥有的代码,用于绘制尺寸握把并处理命中测试。您还需要在 OnSize 期间使适当的区域无效才能重新绘制。

    BOOL CMyDialog::OnEraseBkgnd(CDC* pDC)
    {
        if (CDialog::OnEraseBkgnd(pDC))
        {
            // draw size grip
            CRect r;
            GetClientRect(&r);
            int size = GetSystemMetrics(SM_CXVSCROLL);
            r.left = r.right - size;
            r.top = r.bottom - size;
            pDC->DrawFrameControl(&r, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    

    -

    LRESULT CMyDialog::OnNcHitTest(CPoint point)
    {
        // return HTBOTTOMRIGHT for sizegrip area
        CRect r;
        GetClientRect(&r);
        int size = GetSystemMetrics(SM_CXVSCROLL);
        r.left = r.right - size;
        r.top = r.bottom - size;
        ScreenToClient(&point);
    
        if (r.PtInRect(point))
        {
            return HTBOTTOMRIGHT;
        }
        else
            return CDialog::OnNcHitTest(point);
    }
    

    来源:http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.ui/2006-01/msg00103.html

    【讨论】:

      【解决方案2】:

      除了上面提到的 OnEraseBkgnd 和 OnNcHitTest 之外,还需要在窗口变大时使抓握区域失效,否则放大时会留下痕迹:

      void CMyDialog::OnSize(UINT nType, INT cx, INT cy)
      {
      
          CRect  rc;
          int    iSize=GetSystemMetrics(SM_CXVSCROLL);
      
          GetClientRect(rc);
          InvalidateRect(CRect(rc.left-iSize, rc.bottom-iSize, rc.right, rc.bottom), FALSE);
          CDialog::OnSize(nType, cx, cy);
      }
      

      【讨论】:

        【解决方案3】:

        我认为没有默认样式可以免费获得此功能。您必须创建一个新的子窗口,其类名称为 Scrollbar,控件样式为 SBS_SIZEGRIP

        【讨论】:

          猜你喜欢
          • 2018-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多