Visual c++ 如何将夹持器添加到属性表?

Visual c++ 如何将夹持器添加到属性表?,visual-c++,mfc,Visual C++,Mfc,我有一个派生自CPropertySheet的类,我想在对话框的右下角插入一个“夹具”。 我的对话框已经可以调整大小了,我只是无法插入夹持器。我不知道是否有任何特殊的API可以这样做。一个选项是手动绘制,然后覆盖\u WM\u NCHITTEST上的,并返回HTBOTTOMRIGHT,以确定夹持器的位置。例如: void CMyDialog::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(); rc.l

我有一个派生自
CPropertySheet
的类,我想在对话框的右下角插入一个“夹具”。

我的对话框已经可以调整大小了,我只是无法插入夹持器。

我不知道是否有任何特殊的API可以这样做。一个选项是手动绘制,然后覆盖\u WM\u NCHITTEST上的
,并返回
HTBOTTOMRIGHT
,以确定夹持器的位置。例如:

void CMyDialog::OnPaint()
{
    CPaintDC dc(this);
    CRect rc;
    GetClientRect();
    rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL);
    rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL);
    HTHEME ht = OpenThemeData(m_hWnd, L"STATUS");
    if (ht)
    {
        DrawThemeBackground(ht, dc, SP_GRIPPER, 0, &rc, 0);
        CloseThemeData(ht);
    }
    else
    {
        dc.DrawFrameControl(rc, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
    }
}

LRESULT CMyDialog::OnNcHitTest(CPoint point)
{
    CRect rc;
    GetWindowRect(rc);
    rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL);
    rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL);
    if (rc.PtInRect(point))
        return HTBOTTOMRIGHT;
    return CDialog::OnNcHitTest(point);
} 

void CMyDialog::OnSize(UINT type, int cx, int cy)
{
    CDialog::OnSize(type, cx, cy);
    Invalidate(TRUE);
}
添加到消息映射:

ON_WM_PAINT()
ON_WM_NCHITTEST()
ON_WM_SIZE()

谢谢它的工作。但是我评论了第一个if(链接器问题)。为什么我需要第一个if?是的,如果不需要,您可以删除
OpenThemeData
和其他主题函数。这两种方法绘制夹持器图像的方式略有不同
DrawThemeBackground
以与记事本夹持器相同的方式绘制,如启用视觉样式时所示。我喜欢使用
m_bmpResize.LoadOEMBitmap(OBM_大小)
然后将其分配给一个
CStatic
,但我在调整大小时无法获得正确的渲染效果。@andreTruckle
DrawThemeBackground
绘制主题夹持器,如在OpenSaveDialog中。如果您想要旧的外观,请将其注释掉并使用
DrawFrameControl
。我明天会查看。如果需要,开始新问题。