关于CMFCPropertyGridProperty 选件类的使用

来源:互联网 发布:mac 快捷方式到桌面 编辑:程序博客网 时间:2024/05/18 01:13

最近这段时间项目都是使用到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);
};

希望对使用这个控件的同学有点帮助。

 

 

 

0 0
原创粉丝点击