亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? propertyitemimpl.h

?? 一款最完整的工業組態軟源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號:
#ifndef __PROPERTYITEMIMPL__H
#define __PROPERTYITEMIMPL__H

#pragma once

/////////////////////////////////////////////////////////////////////////////
// CPropertyItemImpl - Property implementations for the Property controls
//
// Written by Bjarke Viksoe (bjarke@viksoe.dk)
// Copyright (c) 2001-2002 Bjarke Viksoe.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed by any means PROVIDING it is 
// not sold for profit without the authors written consent, and 
// providing that this notice and the authors name is included. 
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage to you or your
// computer whatsoever. It's free, so don't hassle me about it.
//
// Beware of bugs.
//

#ifndef __PROPERTYITEM__H
  #error PropertyItemImpl.h requires PropertyItem.h to be included first
#endif

#ifndef __PROPERTYITEMEDITORS__H
  #error PropertyItemImpl.h requires PropertyItemEditors.h to be included first
#endif

#ifndef __ATLBASE_H__
  #error PropertyItem.h requires atlbase.h to be included first
#endif



/////////////////////////////////////////////////////////////////////////////
// Base CProperty class

class CProperty : public IProperty
{
protected:
   HWND   m_hWndOwner;
   LPTSTR m_pszName;
   bool   m_fEnabled;
   LPARAM m_lParam;

public:
   CProperty(LPCTSTR pstrName, LPARAM lParam) : m_fEnabled(true), m_lParam(lParam), m_hWndOwner(NULL)
   {
      ATLASSERT(!::IsBadStringPtr(pstrName,-1));
      ATLTRY(m_pszName = new TCHAR[ (::lstrlen(pstrName) * sizeof(TCHAR)) + 1 ]);
      ATLASSERT(m_pszName);
      ::lstrcpy(m_pszName, pstrName);
   }
   virtual ~CProperty()
   {
      delete [] m_pszName;
   }
   virtual void SetOwner(HWND hWnd, LPVOID /*pData*/)
   {
      ATLASSERT(::IsWindow(hWnd));
      ATLASSERT(m_hWndOwner==NULL); // Cannot set it twice
      m_hWndOwner = hWnd;
   }
   virtual LPCTSTR GetName() const
   {
      return m_pszName; // Dangerous!
   }
   virtual void SetEnabled(BOOL bEnable)
   {
      m_fEnabled = bEnable == TRUE;
   }
   virtual BOOL IsEnabled() const
   {
      return m_fEnabled;
   }
   virtual void SetItemData(LPARAM lParam)
   {
      m_lParam = lParam;
   }
   virtual LPARAM GetItemData() const
   {
      return m_lParam;
   }
   virtual void DrawName(PROPERTYDRAWINFO& di)
   {
      CDCHandle dc(di.hDC);
      COLORREF clrBack, clrFront;
      if( di.state & ODS_DISABLED ) {
         clrFront = di.clrDisabled;
         clrBack = di.clrBack;
      }
      else if( di.state & ODS_SELECTED ) {
         clrFront = di.clrSelText;
         clrBack = di.clrSelBack;
      }
      else {
         clrFront = di.clrText;
         clrBack = di.clrBack;
      }
      RECT rcItem = di.rcItem;
      dc.FillSolidRect(&rcItem, clrBack);
      rcItem.left += 2; // Indent text
      dc.SetBkMode(TRANSPARENT);
      dc.SetBkColor(clrBack);
      dc.SetTextColor(clrFront);
      dc.DrawText(m_pszName, -1, &rcItem, DT_LEFT | DT_SINGLELINE | DT_EDITCONTROL | DT_NOPREFIX | DT_VCENTER);
   }
   virtual void DrawValue(PROPERTYDRAWINFO& /*di*/) 
   { 
   }
   virtual HWND CreateInplaceControl(HWND /*hWnd*/, const RECT& /*rc*/) 
   { 
      return NULL; 
   }
   virtual BOOL Activate(UINT /*action*/, LPARAM /*lParam*/) 
   { 
      return TRUE; 
   }
   virtual BOOL GetDisplayValue(LPTSTR /*pstr*/, UINT /*cchMax*/) const 
   { 
      return FALSE; 
   }
   virtual UINT GetDisplayValueLength() const 
   { 
      return 0; 
   }
   virtual BOOL GetValue(VARIANT* /*pValue*/) const 
   { 
      return FALSE; 
   }
   virtual BOOL SetValue(const VARIANT& /*value*/) 
   { 
      ATLASSERT(false);
      return FALSE; 
   }
   virtual BOOL SetValue(HWND /*hWnd*/) 
   { 
      ATLASSERT(false);
      return FALSE; 
   }
};


/////////////////////////////////////////////////////////////////////////////
// Simple property (displays text)

class CPropertyItem : public CProperty
{
protected:
   CComVariant m_val;

public:
   CPropertyItem(LPCTSTR pstrName, LPARAM lParam) : CProperty(pstrName, lParam)
   {
   }
   BYTE GetKind() const 
   { 
      return PROPKIND_SIMPLE; 
   }
   void DrawValue(PROPERTYDRAWINFO& di)
   {
      UINT cchMax = GetDisplayValueLength() + 1;
      LPTSTR pszText = (LPTSTR) _alloca(cchMax * sizeof(TCHAR));
      ATLASSERT(pszText);
      if( !GetDisplayValue(pszText, cchMax) ) return;
      CDCHandle dc(di.hDC);
      dc.SetBkMode(TRANSPARENT);
      dc.SetTextColor(di.state & ODS_DISABLED ? di.clrDisabled : di.clrText);
      dc.SetBkColor(di.clrBack);
      RECT rcText = di.rcItem;
      rcText.left += PROP_TEXT_INDENT;
      dc.DrawText(pszText, -1, 
         &rcText, 
         DT_LEFT | DT_SINGLELINE | DT_EDITCONTROL | DT_NOPREFIX | DT_END_ELLIPSIS | DT_VCENTER);
   }
   BOOL GetDisplayValue(LPTSTR pstr, UINT cchMax) const
   {      
      ATLASSERT(!::IsBadStringPtr(pstr, cchMax));
      // Convert VARIANT to string and use that as display string...
      CComVariant v;
      if( FAILED( v.ChangeType(VT_BSTR, &m_val) ) ) return FALSE;
      USES_CONVERSION;
      ::lstrcpyn(pstr, OLE2CT(v.bstrVal), cchMax);
      return TRUE;
   }
   UINT GetDisplayValueLength() const
   {
      // Hmm, need to convert it to display string first and
      // then take the length...
      // TODO: Call GetDisplayValue() instead...
      CComVariant v;
      if( FAILED( v.ChangeType(VT_BSTR, &m_val) ) ) return 0;
      return v.bstrVal == NULL ? 0 : ::lstrlenW(v.bstrVal);
   }
   BOOL GetValue(VARIANT* pVal) const
   {
      return SUCCEEDED( CComVariant(m_val).Detach(pVal) );
   }
   BOOL SetValue(const VARIANT& value)
   {
      m_val = value;
      return TRUE;
   }
};


/////////////////////////////////////////////////////////////////////////////
// ReadOnly property (enhanced display feature)

class CPropertyReadOnlyItem : public CPropertyItem
{
protected:
   UINT m_uStyle;
   HICON m_hIcon;
   COLORREF m_clrBack;
   COLORREF m_clrText;

public:
   CPropertyReadOnlyItem(LPCTSTR pstrName, LPARAM lParam) : 
      CPropertyItem(pstrName, lParam), 
      m_uStyle( DT_LEFT | DT_SINGLELINE | DT_EDITCONTROL | DT_NOPREFIX | DT_END_ELLIPSIS | DT_VCENTER ),
      m_clrBack( (COLORREF) -1 ),
      m_clrText( (COLORREF) -1 ),
      m_hIcon(NULL)
   {
   }
   void DrawValue(PROPERTYDRAWINFO& di)
   {
      // Get property text
      UINT cchMax = GetDisplayValueLength() + 1;
      LPTSTR pszText = (LPTSTR) _alloca(cchMax * sizeof(TCHAR));
      ATLASSERT(pszText);
      if( !GetDisplayValue(pszText, cchMax) ) return;
      // Prepare paint
      RECT rcText = di.rcItem;
      CDCHandle dc(di.hDC);
      dc.SetBkMode(OPAQUE);
      // Set background color
      COLORREF clrBack = di.clrBack;
      if( m_clrBack != (COLORREF) -1 ) clrBack = m_clrBack;
      dc.SetBkColor(clrBack);
      // Set text color
      COLORREF clrText = di.clrText;
      if( m_clrText != (COLORREF) -1 ) clrText = m_clrText;
      if( di.state & ODS_DISABLED ) clrText = di.clrDisabled; 
      dc.SetTextColor(clrText);
      // Draw icon if available
      if( m_hIcon ) {
         POINT pt = { rcText.left + 2, rcText.top + 2 };
         SIZE sz = { ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON) };
         ::DrawIconEx(dc, pt.x, pt.y, m_hIcon, sz.cx, sz.cy, 0, NULL, DI_NORMAL);
         rcText.left += sz.cx + 4;
      }
      // Draw text with custom style
      rcText.left += PROP_TEXT_INDENT;
      dc.DrawText(pszText, -1, 
         &rcText, 
         m_uStyle);
   }

   // Operations

   // NOTE: To use these methods, you must cast the HPROPERTY 
   //       handle back to the CPropertyReadOnlyItem class.
   //       Nasty stuff, but so far I've settled with this approach.

   COLORREF SetBkColor(COLORREF clrBack)
   {
      COLORREF clrOld = m_clrBack;
      m_clrBack = clrBack;
      return clrOld;
   }
   COLORREF SetTextColor(COLORREF clrText)
   {
      COLORREF clrOld = m_clrText;
      m_clrText = clrText;
      return clrOld;
   }
   HICON SetIcon(HICON hIcon)
   {
      HICON hOldIcon = m_hIcon;
      m_hIcon = hIcon;
      return hOldIcon;
   }
   void ModifyDrawStyle(UINT uRemove, UINT uAdd)
   {
      m_uStyle = (m_uStyle & ~uRemove) | uAdd;
   }
};


/////////////////////////////////////////////////////////////////////////////
// Simple Value property

class CPropertyEditItem : public CPropertyItem
{
protected:
   HWND m_hwndEdit;

public:
   CPropertyEditItem(LPCTSTR pstrName, LPARAM lParam) : 
      CPropertyItem(pstrName, lParam), 
      m_hwndEdit(NULL)
   {
   }
   BYTE GetKind() const 
   { 
      return PROPKIND_EDIT; 
   }
   HWND CreateInplaceControl(HWND hWnd, const RECT& rc) 
   {
      // Get default text
      UINT cchMax = GetDisplayValueLength() + 1;
      LPTSTR pszText = (LPTSTR) _alloca(cchMax * sizeof(TCHAR));
      ATLASSERT(pszText);
      if( !GetDisplayValue(pszText, cchMax) ) return NULL;
      // Create EDIT control
      CPropertyEditWindow* win = new CPropertyEditWindow();
      ATLASSERT(win);
      RECT rcWin = rc;
      m_hwndEdit = win->Create(hWnd, rcWin, pszText, WS_VISIBLE | WS_CHILD | ES_LEFT | ES_AUTOHSCROLL);
	  win->SetWindowText(pszText);
      ATLASSERT(::IsWindow(m_hwndEdit));
      // Simple hack to validate numbers
      switch( m_val.vt ) {
      case VT_UI1:
      case VT_UI2:
      case VT_UI4:
         win->ModifyStyle(0, ES_NUMBER);
      }
      return m_hwndEdit;
   }
   BOOL SetValue(const VARIANT& value)
   {
      if( m_val.vt == VT_EMPTY ) m_val = value;
      return SUCCEEDED( m_val.ChangeType(m_val.vt, &value) );
   }
   BOOL SetValue(HWND hWnd) 
   { 
      ATLASSERT(::IsWindow(hWnd));
      int len = ::GetWindowTextLength(hWnd) + 1;
      LPTSTR pstr = (LPTSTR) _alloca(len * sizeof(TCHAR));
      ATLASSERT(pstr);
      if( ::GetWindowText(hWnd, pstr, len) == 0 ) {
         // Bah, an empty string AND an error causes the same return code!
         if( ::GetLastError() != 0 ) return FALSE;
      }
      CComVariant v = pstr;
      return SetValue(v);
   }
   BOOL Activate(UINT action, LPARAM /*lParam*/)
   {
      switch( action ) {
      case PACT_TAB:
      case PACT_SPACE:
      case PACT_DBLCLICK:
         if( ::IsWindow(m_hwndEdit) ) {
            ::SetFocus(m_hwndEdit);
            ::SendMessage(m_hwndEdit, EM_SETSEL, 0, -1);
         }
         break;
      }
      return TRUE;
   }
};


/////////////////////////////////////////////////////////////////////////////
// Simple Value property

class CPropertyDateItem : public CPropertyEditItem
{
public:
   CPropertyDateItem(LPCTSTR pstrName, LPARAM lParam) : 
      CPropertyEditItem(pstrName, lParam)
   {
   }
   HWND CreateInplaceControl(HWND hWnd, const RECT& rc) 
   {
      // Get default text
      UINT cchMax = GetDisplayValueLength() + 1;
      LPTSTR pszText = (LPTSTR) _alloca(cchMax * sizeof(TCHAR));
      ATLASSERT(pszText);
      if( !GetDisplayValue(pszText, cchMax) ) return NULL;
      // Create window
      CPropertyDateWindow* win = new CPropertyDateWindow();
      ATLASSERT(win);
      RECT rcWin = rc;
      m_hwndEdit = win->Create(hWnd, rcWin, pszText);
      ATLASSERT(win->IsWindow());
      return *win;
   }
   BOOL GetDisplayValue(LPTSTR pstr, UINT cchMax) const
   {
      if( m_val.date == 0.0 ) {
         ::lstrcpy(pstr, _T(""));
         return TRUE;
      }
      return CPropertyEditItem::GetDisplayValue(pstr, cchMax);
   }
   BOOL SetValue(const VARIANT& value)
   {
      if( value.vt == VT_BSTR && ::SysStringLen(value.bstrVal) == 0 ) {
         m_val.date = 0.0;
         return TRUE;
      }
      return CPropertyEditItem::SetValue(value);
   }
   BOOL SetValue(HWND hWnd)
   {
      if( ::GetWindowTextLength(hWnd) == 0 ) {
         m_val.date = 0.0;
         return TRUE;
      }
      return CPropertyEditItem::SetValue(hWnd);
   }
};


/////////////////////////////////////////////////////////////////////////////
// Checkmark button

class CPropertyCheckButtonItem : public CProperty
{
protected:
   bool m_bValue;

public:
   CPropertyCheckButtonItem(LPCTSTR pstrName, bool bValue, LPARAM lParam) : 
      CProperty(pstrName, lParam),
      m_bValue(bValue)
   {
   }
   BYTE GetKind() const 
   { 
      return PROPKIND_CHECK; 
   }
   BOOL GetValue(VARIANT* pVal) const
   {
      return SUCCEEDED( CComVariant(m_bValue).Detach(pVal) );
   }
   BOOL SetValue(const VARIANT& value)
   {
      // Set a new value
      switch( value.vt ) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国精品久久久| 亚洲一区二区欧美| 一区二区三区欧美在线观看| 日韩经典一区二区| 99国产精品久久久久| 久久久青草青青国产亚洲免观| 亚洲欧美区自拍先锋| 韩国成人在线视频| 欧美一区日韩一区| 亚洲成人手机在线| 色偷偷成人一区二区三区91 | 欧美三级三级三级| 国产日韩欧美精品综合| 日韩精品一区第一页| 欧美羞羞免费网站| 国产精品美女久久久久久久久久久| 美洲天堂一区二卡三卡四卡视频 | 亚洲美女视频一区| 国产91精品一区二区麻豆亚洲| 欧美哺乳videos| 亚洲在线视频网站| 色欧美片视频在线观看在线视频| 国产精品日日摸夜夜摸av| 国产乱理伦片在线观看夜一区| 91精品国产乱码久久蜜臀| 亚洲一区二区三区爽爽爽爽爽 | 亚洲精品日韩专区silk| 丰满少妇久久久久久久| 久久精品在这里| 国产精品1区二区.| 久久精品水蜜桃av综合天堂| 精品亚洲aⅴ乱码一区二区三区| 欧美xingq一区二区| 美国精品在线观看| 精品国产不卡一区二区三区| 久久99精品久久久久久久久久久久| 欧美一二三在线| 久久99精品久久久久久国产越南 | 精品无码三级在线观看视频| 日韩一区二区三区四区| 精品综合久久久久久8888| 欧美精品一区二区不卡| 国产精品综合二区| 日本一区二区久久| 99re视频这里只有精品| 亚洲美女视频在线| 69久久99精品久久久久婷婷| 亚洲成a人v欧美综合天堂下载| 欧美日韩一区高清| 午夜精品免费在线观看| 欧美日韩一区二区电影| 免费成人美女在线观看.| 欧美大肚乱孕交hd孕妇| 精品一区二区三区香蕉蜜桃| 欧美日韩二区三区| 天堂在线亚洲视频| 国产午夜精品一区二区三区嫩草| 国产福利精品导航| 亚洲欧美日韩系列| 成人午夜精品在线| 亚洲欧美一区二区三区极速播放| 欧美性视频一区二区三区| 丝袜美腿亚洲一区二区图片| 2021国产精品久久精品| 国产成+人+日韩+欧美+亚洲| 亚洲图片欧美综合| 日韩一区二区免费电影| 成人性色生活片免费看爆迷你毛片| 国产精品久久久久久久久晋中 | 成人网页在线观看| 337p日本欧洲亚洲大胆精品| 一本久道中文字幕精品亚洲嫩| 亚洲精品亚洲人成人网| 精品三级在线观看| 处破女av一区二区| 日本不卡视频在线| 久久先锋影音av| 欧美日韩视频在线第一区| 国产精品久久久久久久久免费樱桃 | 久久99精品国产| 中文字幕乱码亚洲精品一区| 欧美日韩国产乱码电影| 国产精品91xxx| 日韩精品91亚洲二区在线观看| 国产日韩欧美精品综合| 欧美一级片免费看| 不卡视频一二三四| 日本欧美韩国一区三区| 久久久久久久综合日本| 一本大道久久精品懂色aⅴ | 天天操天天干天天综合网| 国产精品伦理在线| 欧美高清视频www夜色资源网| 97精品国产露脸对白| 青青草国产精品亚洲专区无| 亚洲一区免费观看| 久久精品人人做人人综合| 日韩一区二区不卡| 91在线观看美女| 国产成人丝袜美腿| 18欧美乱大交hd1984| 欧美精品一二三区| caoporn国产一区二区| 国产一区啦啦啦在线观看| 亚洲综合图片区| 成人免费小视频| 国产精品沙发午睡系列990531| 欧美一区二区三区性视频| 在线观看成人免费视频| 国v精品久久久网| 激情成人午夜视频| 免费成人在线网站| 蜜臀av在线播放一区二区三区| 亚洲精品国产a| 亚洲日本成人在线观看| 久久精品人人爽人人爽| 精品国产一区久久| 日韩欧美一区在线观看| 3atv在线一区二区三区| 成人免费高清在线| 高清不卡在线观看av| 日韩中文字幕区一区有砖一区| 首页国产欧美日韩丝袜| 亚洲欧美日韩久久| 国产精品国产三级国产aⅴ原创| 中文字幕日韩精品一区| 国产免费观看久久| 1区2区3区精品视频| 国产精品动漫网站| 亚洲人成网站影音先锋播放| 久久久不卡网国产精品一区| 理论电影国产精品| 亚洲欧洲三级电影| 日韩久久久精品| 色婷婷久久综合| 国产伦精品一区二区三区视频青涩 | 日韩精品电影在线| 亚洲国产精品二十页| 欧美色涩在线第一页| 国产一区二三区好的| 国产不卡视频一区二区三区| 日韩av不卡在线观看| 婷婷成人激情在线网| 亚洲欧洲在线观看av| 国产精品久久久一本精品| 一区二区三区高清| 一片黄亚洲嫩模| 一区二区三区精密机械公司| 国产精品国产自产拍高清av| 亚洲成av人**亚洲成av**| 91精品久久久久久久99蜜桃| 国产成人精品免费网站| 午夜久久久久久久久| 日韩一区二区不卡| 欧美日本精品一区二区三区| 丝袜亚洲另类丝袜在线| 欧美精品一区二区三| 欧美精品第一页| 大陆成人av片| 91社区在线播放| 欧美日韩精品欧美日韩精品一| 欧美久久婷婷综合色| 精品久久人人做人人爰| 国产人妖乱国产精品人妖| 337p日本欧洲亚洲大胆色噜噜| 国产精品日韩成人| 亚洲bt欧美bt精品| 国产欧美va欧美不卡在线| 亚洲精品国产成人久久av盗摄| 亚洲欧美日韩综合aⅴ视频| 亚洲自拍偷拍综合| 午夜精品久久一牛影视| 成人app网站| 色婷婷国产精品综合在线观看| 成人av在线播放网址| 欧美精品在线一区二区三区| 久久精品欧美一区二区三区麻豆| 国产精品第13页| 成人自拍视频在线| 国产白丝网站精品污在线入口| 免费一级片91| 亚洲第一成人在线| 成人动漫精品一区二区| 日韩小视频在线观看专区| 国产精品欧美一区喷水| 欧美va亚洲va| 成人免费三级在线| 成人黄色小视频在线观看| 在线精品国精品国产尤物884a| 国产午夜久久久久| 久久99最新地址| 91麻豆精品视频| 亚洲天堂免费在线观看视频| 狠狠色2019综合网| 91精品国产免费久久综合| 久久久久久久久久久久久久久99| 日韩久久精品一区| 欧美艳星brazzers| 91福利社在线观看| 亚洲人成影院在线观看|