// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "NewControls.h"
#include "CustomProperties.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
////////////////////////////////////////////////////////////////////////////////
// CCheckBoxProp class
CCheckBoxProp::CCheckBoxProp(const CString& strName, BOOL bCheck, LPCTSTR lpszDescr, DWORD dwData) :
CMFCPropertyGridProperty(strName, COleVariant((long)bCheck), lpszDescr, dwData)
{
m_rectCheck.SetRectEmpty();
}
void CCheckBoxProp::OnDrawName(CDC* pDC, CRect rect)
{
m_rectCheck = rect;
m_rectCheck.DeflateRect(1, 1);
m_rectCheck.right = m_rectCheck.left + m_rectCheck.Height();
rect.left = m_rectCheck.right + 1;
CMFCPropertyGridProperty::OnDrawName(pDC, rect);
OnDrawCheckBox(pDC, m_rectCheck, (m_varValue.boolVal));
}
void CCheckBoxProp::OnClickName(CPoint point)
{
if (m_bEnabled && m_rectCheck.PtInRect(point))
{
m_varValue.boolVal = !(m_varValue.boolVal);
m_pWndList->InvalidateRect(m_rectCheck);
}
}
BOOL CCheckBoxProp::OnDblClk(CPoint point)
{
if (m_bEnabled && m_rectCheck.PtInRect(point))
{
return TRUE;
}
m_varValue.boolVal = !(m_varValue.boolVal);
m_pWndList->InvalidateRect(m_rectCheck);
return TRUE;
}
void CCheckBoxProp::OnDrawCheckBox(CDC * pDC, CRect rect, BOOL bChecked)
{
COLORREF clrTextOld = pDC->GetTextColor();
CMFCVisualManager::GetInstance()->OnDrawCheckBox(pDC, rect, FALSE, bChecked, m_bEnabled);
pDC->SetTextColor(clrTextOld);
}
BOOL CCheckBoxProp::PushChar(UINT nChar)
{
if (nChar == VK_SPACE)
{
OnDblClk(CPoint(-1, -1));
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
// CPasswordProp class
const TCHAR cPassword = _T('*');
CPasswordProp::CPasswordProp(const CString& strName, const CString& strPassword, LPCTSTR lpszDescr, DWORD dwData)
: CMFCPropertyGridProperty(strName, (LPCTSTR) strPassword, lpszDescr, dwData)
{
}
CWnd* CPasswordProp::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
CEdit* pWndEdit = new CEdit;
DWORD dwStyle = WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_PASSWORD;
if (!m_bEnabled || !m_bAllowEdit)
{
dwStyle |= ES_READONLY;
}
pWndEdit->Create(dwStyle, rectEdit, m_pWndList, AFX_PROPLIST_ID_INPLACE);
pWndEdit->SetPasswordChar(cPassword);
bDefaultFormat = TRUE;
return pWndEdit;
}
CString CPasswordProp::FormatProperty()
{
CString strVal = (LPCTSTR)(_bstr_t)m_varValue;
for (int i = 0; i < strVal.GetLength(); i++)
{
strVal.SetAt(i, cPassword);
}
return strVal;
}
/////////////////////////////////////////////////////////////////////////////
// CPropSliderCtrl
CPropSliderCtrl::CPropSliderCtrl(CSliderProp* pProp, COLORREF clrBack)
{
m_clrBack = clrBack;
m_brBackground.CreateSolidBrush(m_clrBack);
m_pProp = pProp;
}
CPropSliderCtrl::~CPropSliderCtrl()
{
}
BEGIN_MESSAGE_MAP(CPropSliderCtrl, CSliderCtrl)
//{{AFX_MSG_MAP(CPropSliderCtrl)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_HSCROLL_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropSliderCtrl message handlers
HBRUSH CPropSliderCtrl::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
pDC->SetBkColor(m_clrBack);
return m_brBackground;
}
void CPropSliderCtrl::HScroll(UINT /*nSBCode*/, UINT /*nPos*/)
{
ASSERT_VALID(m_pProp);
m_pProp->OnUpdateValue();
m_pProp->Redraw();
}
////////////////////////////////////////////////////////////////////////////////
// CSliderProp class
CSliderProp::CSliderProp(const CString& strName, long nValue, LPCTSTR lpszDescr, DWORD dwData) :
CMFCPropertyGridProperty(strName, nValue, lpszDescr, dwData)
{
}
CWnd* CSliderProp::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
CPropSliderCtrl* pWndSlider = new CPropSliderCtrl(this, m_pWndList->GetBkColor());
rectEdit.left += rectEdit.Height() + 5;
pWndSlider->Create(WS_VISIBLE | WS_CHILD, rectEdit, m_pWndList, AFX_PROPLIST_ID_INPLACE);
pWndSlider->SetPos(m_varValue.lVal);
bDefaultFormat = TRUE;
return pWndSlider;
}
BOOL CSliderProp::OnUpdateValue()
{
ASSERT_VALID(this);
ASSERT_VALID(m_pWndInPlace);
ASSERT_VALID(m_pWndList);
ASSERT(::IsWindow(m_pWndInPlace->GetSafeHwnd()));
long lCurrValue = m_varValue.lVal;
CSliderCtrl* pSlider = (CSliderCtrl*) m_pWndInPlace;
m_varValue = (long) pSlider->GetPos();
if (lCurrValue != m_varValue.lVal)
{
m_pWndList->OnPropertyChanged(this);
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
// CBoundedNumberPairProp class
CBoundedNumberPairProp::CBoundedNumberPairProp(const CString& strGroupName, int nMinValue1, int nMaxValue1, int nMinValue2, int nMaxValue2, DWORD_PTR dwData, BOOL bIsValueList) :
CMFCPropertyGridProperty(strGroupName, dwData, bIsValueList)
{
m_nMinValue1 = nMinValue1;
m_nMaxValue1 = nMaxValue1;
m_nMinValue2 = nMinValue2;
m_nMaxValue2 = nMaxValue2;
}
BOOL CBoundedNumberPairProp::OnUpdateValue()
{
ASSERT_VALID(this);
ASSERT_VALID(m_pWndInPlace);
ASSERT_VALID(m_pWndList);
ASSERT(::IsWindow(m_pWndInPlace->GetSafeHwnd()));
CString strText;
m_pWndInPlace->GetWindowText(strText);
BOOL bIsChanged = FormatProperty() != strText;
if (bIsChanged)
{
CString strDelimeter(_T(","));
for (int i = 0; !strText.IsEmpty() && i < GetSubItemsCount(); i++)
{
CString strItem = strText.SpanExcluding(strDelimeter);
if (strItem.GetLength() + 1 > strText.GetLength())
{
strText.Empty();
}
else
{
strText = strText.Mid(strItem.GetLength() + 1);
}
strItem.TrimLeft();
strItem.TrimRight();
int nItem = _ttoi(strItem);
if ((i == 0) && ((nItem < m_nMinValue1) || (nItem > m_nMaxValue1)))
{
static BOOL bRecursedHere = FALSE;
if (bRecursedHere)
return TRUE;
bRecursedHere = TRUE;
CString strMessage;
strMessage.Format(_T("Height value must be between %d and %d."), m_nMinValue1, m_nMaxValue1);
AfxMessageBox(strMessage);
bRecursedHere = FALSE;
return FALSE;
}
else if ((i == 1) && ((nItem < m_nMinValue2) || (nItem > m_nMaxValue2)))
{
static BOOL bRecursedHere = FALSE;
if (bRecursedHere)
return TRUE;
bRecursedHere = TRUE;
CString strMessage;
strMessage.Format(_T("Width value must be between %d and %d."), m_nMinValue2, m_nMaxValue2);
AfxMessageBox(strMessage);
bRecursedHere = FALSE;
return FALSE;
}
}
return CMFCPropertyGridProperty::OnUpdateValue();
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
// CBoundedNumberSubProp class
CBoundedNumberSubProp::CBoundedNumberSubProp(const CString& strName, const COleVariant& varValue, int nMinValue, int nMaxValue, LPCTSTR lpszDescr) :
CMFCPropertyGridProperty(strName, varValue, lpszDescr)
{
m_nMinValue = nMinValue;
m_nMaxValue = nMaxValue;
}
BOOL CBoundedNumberSubProp::OnUpdateValue()
{
ASSERT_VALID(this);
ASSERT_VALID(m_pWndInPlace);
ASSERT_VALID(m_pWndList);
ASSERT(::IsWindow(m_pWndInPlace->GetSafeHwnd()));
BOOL bRet = TRUE;
CString strText;
m_pWndInPlace->GetWindowText(strText);
BOOL bIsChanged = FormatProperty() != strText;
if (bIsChanged)
{
int nItem = _ttoi(strText);
if ((nItem < m_nMinValue) || (nItem > m_nMaxValue))
{
static BOOL bRecursedHere = FALSE;
if (bRecur
没有合适的资源?快使用搜索试试~ 我知道了~
CMFCButton按钮的使用方法
共59个文件
bmp:25个
h:12个
cpp:10个
5星 · 超过95%的资源 需积分: 43 251 下载量 72 浏览量
2014-01-08
11:20:47
上传
评论 3
收藏 260KB RAR 举报
温馨提示
CMFCButton为VS2010中新的按钮类,CMFCButton 对象的样式可以是 3D,平面,不稳定的 或 没有边框。 按钮文本对齐,可以在左侧、顶部或按钮的中心。 在运行时,可以控制按钮是否显示文本、图像或文本和图像。 还可以指定特定光标图像显示,当光标悬停在按钮时。 使用 MFC选件类向导 工具和对话框模板,创建一个按钮控件直接在代码中,或。 如果直接创建一个按钮控件,请添加一个 CMFCButton 变量到您的应用程序,然后调用 CMFCButton 对象的构造函数和 Create 方法。 如果使用 MFC选件类向导,添加一个 CButton 变量到您的应用程序,从 CButton 然后将变量的类型。CMFCButton。 处理在对话框中应用程序的通知消息,请添加消息映射项和一个事件处理程序每个通知的。 CMFCButton 对象发送的通知是一样的。CButton 对象发送的小。
资源推荐
资源详情
资源评论
收起资源包目录
VS2010NewControls.rar (59个子文件)
NewControls
Page2.cpp 6KB
NewControlsPropSheet.h 1KB
NewControls.rc 19KB
NewControls.vcxproj.filters 6KB
resource.h 6KB
Page1.h 2KB
Page6.h 1KB
Page4.h 1KB
CustomProperties.cpp 17KB
Page4.cpp 4KB
NewControls.cpp 2KB
stdafx.h 2KB
ReadMe.htm 7KB
Page6.cpp 3KB
res
NewControls.ico 66KB
play.bmp 1KB
image.bmp 1KB
icons32.bmp 24KB
buttons.bmp 1KB
btn1.bmp 1KB
stop_hot.bmp 1KB
radio_of32.bmp 1KB
test_bit.bmp 406B
back.bmp 221KB
play_hot.bmp 1KB
icons.bmp 7KB
radio_on32.bmp 1KB
NewControls.rc2 404B
btn1_hot.bmp 1KB
globe.bmp 3KB
button32.bmp 2KB
Thumbs.db 35KB
propicons.bmp 8KB
checkno.bmp 1KB
toolbar1.bmp 358B
check32.bmp 1KB
button32hot.bmp 2KB
checkno32.bmp 1KB
bitmap1.bmp 1KB
radio_of.bmp 1KB
radio_on.bmp 1KB
Btn.cur 766B
stop.bmp 1KB
NewControls.vcxproj 47KB
stdafx.cpp 207B
Page2.h 1KB
Page1.cpp 8KB
NewControlsPropSheet.cpp 3KB
CustomProperties.h 5KB
Page3.h 2KB
NewControls.vcxproj.user 143B
Page3.cpp 5KB
NewControls.sln 4KB
Page5.h 2KB
NewControls.suo 20KB
NewControls.aps 173KB
targetver.h 287B
Page5.cpp 13KB
NewControls.h 1KB
共 59 条
- 1
abcd125030
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024年下半年软考中级网络工程师bfd与静态路由联动配置实验
- 2024年下半年软考中级网络工程师单臂路由配置实验
- 类图与操作系统进程:映射与实现
- vmware虚拟机安装教程的个人学习资料,欢迎使用 内容来源于网络分享,如有侵权请联系我删除
- 数据库数据清洗策略:技术实现与代码实践
- vmware虚拟机安装教程的个人学习资料,欢迎使用 内容来源于网络分享,如有侵权请联系我删除
- vmware虚拟机安装教程的个人学习资料,欢迎使用 内容来源于网络分享,如有侵权请联系我删除
- unity射击游戏模板Low Poly Shooter Pack v4.0.7z
- 行人乱丢垃圾检测数据集VOC+YOLO格式3264张2类别
- 电力场景越线闯入检测数据集VOC+YOLO格式258张1类别.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页