注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

VC 2010 sp1新特性之CMFCPropertyGridCtrl属性表控件功能扩展(设置列宽、禁用状态下的下拉框选中项)  

2011-08-18 22:47:50|  分类: vc界面编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

VC 2010 sp1新特性之CMFCPropertyGridCtrl属性表控件功能扩展:设置列宽、禁用状态下的下拉框选中项

 

(1)设置列宽

//头文件

#pragma once


// CMyMFCPropertyGridCtrl

class CMyMFCPropertyGridCtrl : public CMFCPropertyGridCtrl
{
 DECLARE_DYNAMIC(CMyMFCPropertyGridCtrl)

public:
 CMyMFCPropertyGridCtrl();
 virtual ~CMyMFCPropertyGridCtrl();

protected:
 DECLARE_MESSAGE_MAP()

public:
 void SetColumnWidth(INT value){m_nLeftColumnWidth=value;};

public:
 TCHAR GetListDelimeter(){return m_cListDelimeter;};
};

 

 

 

//.cpp文件


#include "stdafx.h"
#include "MyMFCPropertyGridCtrl.h"


// CMyMFCPropertyGridCtrl

IMPLEMENT_DYNAMIC(CMyMFCPropertyGridCtrl, CMFCPropertyGridCtrl)

CMyMFCPropertyGridCtrl::CMyMFCPropertyGridCtrl()
{

}

CMyMFCPropertyGridCtrl::~CMyMFCPropertyGridCtrl()
{
}


BEGIN_MESSAGE_MAP(CMyMFCPropertyGridCtrl, CMFCPropertyGridCtrl)
END_MESSAGE_MAP()

通过简单的重载,让CMFCPropertyGridCtrl的列宽可以动态调整。


(2)禁用状态下的下拉框选中一项

也就是,类似CComboBox的SetCurSel函数的功能。而且是在属性单元被禁用的情况下选中一项。

 

//头文件

#pragma once
class CMyMFCPropertyGridProperty:
 public CMFCPropertyGridProperty
{
 friend class CMyMFCPropertyGridCtrl;
 friend class CMFCPropertyGridCtrl;

public:
 CMyMFCPropertyGridProperty(void);
 ~CMyMFCPropertyGridProperty(void);

public:
 BOOL SetCurSel(INT isel);

protected:
 BOOL OnUpdateValue2(CString strText);

 BOOL TextToVar(const CString& strText)
 {
  return __super::TextToVar(strText);
 }
};

//.cpp文件

#include "StdAfx.h"
#include "MyMFCPropertyGridProperty.h"

#include "MyMFCPropertyGridCtrl.h"

#define AFX_PROP_HAS_LIST 0x0001
#define AFX_PROP_HAS_BUTTON 0x0002
#define AFX_PROP_HAS_SPIN 0x0004

CMyMFCPropertyGridProperty::CMyMFCPropertyGridProperty(void):
 CMFCPropertyGridProperty(_T(""))
{
}


CMyMFCPropertyGridProperty::~CMyMFCPropertyGridProperty(void)
{
}

BOOL CMyMFCPropertyGridProperty::SetCurSel(INT isel)
{
 ASSERT_VALID(this);
 ASSERT_VALID(m_pWndList);

 if (m_lstOptions.GetCount() > 1)
 {
  CString strText;
  POSITION pos=m_lstOptions.FindIndex(isel);
  if (pos!=NULL)
  {
   strText = m_lstOptions.GetAt(pos);
  }

  OnUpdateValue2(strText);
  Redraw();

  return TRUE;
 }

 if (m_dwFlags & AFX_PROP_HAS_BUTTON)
 {
  CWaitCursor wait;

  CString strPrevVal = FormatProperty();

  OnClickButton(CPoint(-1, -1));

  if (strPrevVal != FormatProperty())
  {
   m_pWndList->OnPropertyChanged(this);
  }

  Redraw();

  return TRUE;
 }

 return FALSE;
}

BOOL CMyMFCPropertyGridProperty::OnUpdateValue2(CString strText)
{
 ASSERT_VALID(this);
 ASSERT_VALID(m_pWndList);

 BOOL bRes = FALSE;
 BOOL bIsChanged = FormatProperty() != strText;

 if (m_bIsValueList)
 {
  CString strDelimeter(((CMyMFCPropertyGridCtrl *)m_pWndList)->GetListDelimeter());

  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();

   CMFCPropertyGridProperty* pSubItem = GetSubItem(i);
   ASSERT_VALID(pSubItem);

   ((CMyMFCPropertyGridProperty *)pSubItem)->TextToVar(strItem);
  }

  bRes = TRUE;
 }
 else
 {
  bRes = TextToVar(strText);
 }

 if (bRes && bIsChanged)
 {
  m_pWndList->OnPropertyChanged(this);
 }

 return bRes;
}

 

By:章永辉

  评论这张
 
阅读(4093)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016