最近这段时间项目都是使用到CMFCPropertyGridProperty选件类。网上关于CMFCPropertyGridProperty 的创建已经有很多了,我今天说一些没有的,在项目中用到的知识
像CMFCPropertyGridFileProperty 和 CMFCPropertyGridFontProperty 类,都是自带有一个按钮的,但是有时候那个按钮太小了,想要调整又不知道如何调整。如果你仔细查看选件类的源代码。你就会发现,它是利用两个函数进行调整的。这个时候我们就要自己写一个类继承自你需要调整的类了。
class CMFCPropertyFile : public CMFCPropertyGridFileProperty
{
public:
CMFCPropertyFile(const CString& strName, BOOL bOpenFileDialog, const CString& strFileName, LPCTSTR lpszDefExt = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = 0);
virtual ~CMFCPropertyFile();
virtual void AdjustButtonRect();
virtual void OnDrawButton(CDC* pDC, CRect rect);
};
如上就是自己定义的类。使用起来和CMFCPropertyGridFileProperty是一样的。CMFCPropertyFile::CMFCPropertyFile(const CString& strName, BOOL bOpenFileDialog, const CString& strFileName, LPCTSTR lpszDefExt ,
DWORD dwFlags , LPCTSTR lpszFilter , LPCTSTR lpszDescr, DWORD_PTR dwData)
:CMFCPropertyGridFileProperty(strName,bOpenFileDialog,strFileName,lpszDefExt,dwFlags,lpszFilter,lpszDescr,dwData)
{
}
CMFCPropertyFile::~CMFCPropertyFile()
{
}
// CMFCPropertyFile member functions
void CMFCPropertyFile::AdjustButtonRect()
{
ASSERT_VALID(this);
m_rectButton = m_Rect;
m_rectButton.left = m_rectButton.right - m_rectButton.Height() + 3;
m_rectButton.left -=10;
m_rectButton.top ++;
m_rectButton.top -=5;
}
// CMFCPropertyFont member functions
void CMFCPropertyFile::OnDrawButton(CDC* pDC, CRect rect)
{
ASSERT_VALID(this);
ASSERT_VALID(pDC);
ASSERT_VALID(m_pWndList);
CBrush m_brush(RGB(181,180,180));
pDC->FillRect(rect, &m_brush);
CString str = _T("...");
pDC->DrawText(str, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
这样就可以实现了按钮的重画。可以变大和改变颜色。
CMFCPropertyGridFontProperty的做法一样。因为CMFCPropertyGridFontProperty只有GetLogFont获取字体,现在我们可以自己定义SetLogFont往属性表里面填数据。
class CMFCPropertyFont : public CMFCPropertyGridFontProperty
{
public:
CMFCPropertyFont(CString strName, LOGFONT lf, DWORD dwFontDialogFlags, LPCTSTR lpszDescr, DWORD_PTR dwData, COLORREF color = (COLORREF)-1);
virtual ~CMFCPropertyFont();
public:
virtual void SetLogFont(LOGFONT lf){m_lf = lf;}
virtual void SetLogColor(COLORREF m_col){m_Color = m_col;}
virtual void AdjustButtonRect();
virtual void OnDrawButton(CDC* pDC, CRect rect);
};
希望对使用这个控件的同学有点帮助。