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
,但我在调整大小时无法获得正确的渲染效果。@andreTruckleDrawThemeBackground
绘制主题夹持器,如在OpenSaveDialog中。如果您想要旧的外观,请将其注释掉并使用DrawFrameControl
。我明天会查看。如果需要,开始新问题。