您的位置:首页 > 运维架构

关于CMFCPropertyGridProperty 选件类的使用

2014-11-18 14:02 393 查看
最近这段时间项目都是使用到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);

};

希望对使用这个控件的同学有点帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: