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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? propertyitemeditors.h

?? 一款最完整的工業(yè)組態(tài)軟源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號(hào):
#ifndef __PROPERTYITEMEDITORS__H
#define __PROPERTYITEMEDITORS__H

#pragma once

/////////////////////////////////////////////////////////////////////////////
// CPropertyItemEditors - Editors for Property controls
//
// Written by Bjarke Viksoe (bjarke@viksoe.dk)
// Copyright (c) 2001-2003 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 PropertyItemEditors.h requires PropertyItem.h to be included first
#endif

#define PROP_TEXT_INDENT 2


/////////////////////////////////////////////////////////////////////////////
// Plain editor with a EDIT box

class CPropertyEditWindow : 
   public CWindowImpl< CPropertyEditWindow, CEdit, CControlWinTraits >
{
public:
   DECLARE_WND_SUPERCLASS(_T("WTL_InplacePropertyEdit"), CEdit::GetWndClassName())

   bool m_fCancel;

   CPropertyEditWindow() : m_fCancel(true)
   {
   }

   virtual void OnFinalMessage(HWND /*hWnd*/)
   {
      delete this;
   }

   BEGIN_MSG_MAP(CPropertyEditWindow)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
      MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
      MESSAGE_HANDLER(WM_CHAR, OnChar)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
      MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode)
   END_MSG_MAP()

   LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
   {
      LRESULT lRes = DefWindowProc();
      SetFont( CWindow(GetParent()).GetFont() );
      SetMargins(PROP_TEXT_INDENT, 0);   // Force EDIT margins so text doesn't jump
      return lRes;
   }
   LRESULT OnKeyDown(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
      switch( wParam ) {
      case VK_ESCAPE:
         m_fCancel = true;
         // FALL THROUGH...
      case VK_RETURN:
         // Force focus to parent to update value (see OnKillFocus()...)
         ::SetFocus(GetParent());
         break;
      case VK_TAB:
      case VK_UP:
      case VK_DOWN:
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      case VK_LEFT:
         int lLow, lHigh;
         GetSel(lLow, lHigh);
         if( lLow != lHigh || lLow != 0 ) break;
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      case VK_RIGHT:
         GetSel(lLow, lHigh);
         if( lLow != lHigh || lLow != GetWindowTextLength() ) break;
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      }
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnChar(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
      switch( LOWORD(wParam) ) {
      case VK_RETURN:
      case VK_ESCAPE:
         // Do not BEEP!!!!
         return 0;
      }
      m_fCancel = false;
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      m_fCancel = true;
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
   {
      LRESULT lRes = DefWindowProc(uMsg, wParam, lParam);
      ::SendMessage(GetParent(), m_fCancel ? WM_USER_PROP_CANCELPROPERTY : WM_USER_PROP_UPDATEPROPERTY, 0, (LPARAM) m_hWnd);
      return lRes;
   }
   LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
   {
      return DefWindowProc(uMsg, wParam, lParam) | DLGC_WANTALLKEYS | DLGC_WANTARROWS;
   }
};


/////////////////////////////////////////////////////////////////////////////
// General implementation of editor with button

template< class T, class TBase = CEdit >
class CPropertyDropWindowImpl : 
   public CWindowImpl< T, TBase, CControlWinTraits >
{
public:
   DECLARE_WND_SUPERCLASS(NULL, TBase::GetWndClassName())

   CContainedWindowT<CButton> m_wndButton;
   bool m_bReadOnly;

   virtual void OnFinalMessage(HWND /*hWnd*/)
   {
      delete (T*) this;
   }

   typedef CPropertyDropWindowImpl< T > thisClass;

   BEGIN_MSG_MAP(thisClass)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
      MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
      MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
      MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
      MESSAGE_HANDLER(WM_CHAR, OnChar)
      MESSAGE_HANDLER(WM_LBUTTONDOWN, OnMouseButtonClick)
      MESSAGE_HANDLER(WM_RBUTTONDOWN, OnMouseButtonClick)
      MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode)
   ALT_MSG_MAP(1) // Button
      MESSAGE_HANDLER(WM_KEYDOWN, OnButtonKeyDown)
      MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode)
   END_MSG_MAP()

   LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
   {
      LRESULT lRes = DefWindowProc(uMsg, wParam, lParam);
      RECT rcClient;
      GetClientRect(&rcClient);
      int cy = rcClient.bottom - rcClient.top;
      // Setup EDIT control
      SetFont( CWindow(GetParent()).GetFont() );
      ModifyStyle(WS_BORDER, ES_LEFT);
      SendMessage(EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG(PROP_TEXT_INDENT, ::GetSystemMetrics(SM_CXVSCROLL)));
      // Create button
      RECT rcButton = { rcClient.right - cy, rcClient.top - 1, rcClient.right, rcClient.bottom };
      m_wndButton.Create(this, 1, m_hWnd, &rcButton, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | BS_PUSHBUTTON | BS_OWNERDRAW);
      ATLASSERT(m_wndButton.IsWindow());
      m_wndButton.SetFont(GetFont());
      // HACK: Windows needs to repaint this guy again!
      m_wndButton.SetFocus();
      m_bReadOnly = true;
      return lRes;
   }
   LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      if( !m_bReadOnly ) {
         bHandled = FALSE;
      }
      else {
         // Set focus to button to prevent input
         m_wndButton.SetFocus();
         m_wndButton.Invalidate();
      }
      return 0;
   }
   LRESULT OnKillFocus(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
      if( (HWND) wParam != m_wndButton ) ::SendMessage(GetParent(), WM_USER_PROP_UPDATEPROPERTY, 0, (LPARAM) m_hWnd);
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnKeyDown(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
      if( m_bReadOnly ) {
         bHandled = FALSE;
         return 0;
      }
      switch( wParam ) {
      case VK_F2:
      case VK_F4:
      case VK_SPACE:
         m_wndButton.Click();
         return 0;
      case VK_RETURN:
      case VK_ESCAPE:
         // Announce the new value
         ::PostMessage(GetParent(), wParam == VK_RETURN ? WM_USER_PROP_UPDATEPROPERTY : WM_USER_PROP_CANCELPROPERTY, 0, (LPARAM) m_hWnd);
         ::SetFocus(GetParent());
         break;
      case VK_TAB:
      case VK_UP:
      case VK_DOWN:
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      case VK_LEFT:
         int lLow, lHigh;
         SendMessage(EM_GETSEL, (WPARAM) &lLow, (LPARAM) &lHigh);
         if( lLow != lHigh || lLow != 0 ) break;
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      case VK_RIGHT:
         SendMessage(EM_GETSEL, (WPARAM) &lLow, (LPARAM) &lHigh);
         if( lLow != lHigh || lLow != GetWindowTextLength() ) break;
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      }
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnChar(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      // Don't allow any editing
      if( !m_bReadOnly ) bHandled = FALSE;
      return 0;
   }
   LRESULT OnMouseButtonClick(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      // Don't allow selection or context menu for edit box
      if( !m_bReadOnly ) bHandled = FALSE;
      return 0;
   }

   // Button

   LRESULT OnButtonKeyDown(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
   {
      switch( wParam ) {
      case VK_UP:
      case VK_DOWN:
         return ::PostMessage(GetParent(), WM_USER_PROP_NAVIGATE, LOWORD(wParam), 0);
      case VK_F2:
      case VK_F4:
      case VK_SPACE:
         m_wndButton.Click();
         return 0;
      case VK_ESCAPE:
         ::PostMessage(GetParent(), WM_USER_PROP_UPDATEPROPERTY, 0, (LPARAM) m_hWnd);
         return 0;
      }
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
   {
      return DefWindowProc(uMsg, wParam, lParam) | DLGC_WANTALLKEYS;
   }
};


/////////////////////////////////////////////////////////////////////////////
// Editor with calendar dropdown

class CPropertyDateWindow : 
   public CPropertyDropWindowImpl<CPropertyDateWindow>
{
public:
   DECLARE_WND_SUPERCLASS(_T("WTL_InplacePropertyDateEdit"), CEdit::GetWndClassName())

   CContainedWindowT<CMonthCalendarCtrl> m_wndCalendar;

   typedef CPropertyDropWindowImpl<CPropertyDateWindow> baseClass;

   BEGIN_MSG_MAP(CPropertyDateWindow)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
      MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
      MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
      COMMAND_CODE_HANDLER(BN_CLICKED, OnButtonClicked)
      NOTIFY_CODE_HANDLER(MCN_SELECT, OnDateSelect)
      CHAIN_MSG_MAP( baseClass )
   ALT_MSG_MAP(1) // Button
      CHAIN_MSG_MAP_ALT( baseClass, 1 )
   ALT_MSG_MAP(2) // Calendar
      MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
   END_MSG_MAP()

   LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      LRESULT lRes = baseClass::OnCreate(uMsg, wParam, lParam, bHandled);
      // Create dropdown list (as hidden)
      m_wndCalendar.Create(this, 2, m_hWnd, &rcDefault, NULL, WS_POPUP | WS_BORDER);
      ATLASSERT(m_wndCalendar.IsWindow());
      m_wndCalendar.SetFont(GetFont());
      m_bReadOnly = false;
      return lRes;
   }
   LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
   {
      if( m_wndCalendar.IsWindow() ) m_wndCalendar.DestroyWindow();
      bHandled = FALSE;
      return 0;
   }
   LRESULT OnButtonClicked(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
   {
      // Set selection
      TCHAR szDate[64] = { 0 };
      GetWindowText(szDate, (sizeof(szDate) / sizeof(TCHAR)) - 1);
      CComVariant v = szDate;
      SYSTEMTIME st = { 0 };
      if( SUCCEEDED( v.ChangeType(VT_DATE) ) ) ::VariantTimeToSystemTime(v.date, &st);
      if( st.wYear == 0 ) ::GetLocalTime(&st);
      m_wndCalendar.SetCurSel(&st);
      // Move the calendar under the item
      RECT rcCalendar;
      m_wndCalendar.GetMinReqRect(&rcCalendar);
      RECT rcWin;
      GetWindowRect(&rcWin);
      ::OffsetRect(&rcCalendar, rcWin.left, rcWin.bottom);
      m_wndCalendar.SetWindowPos(HWND_TOPMOST, &rcCalendar, SWP_SHOWWINDOW);
      m_wndCalendar.SetFocus();
      return 0;
   }
   LRESULT OnDateSelect(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
   {
      USES_CONVERSION;
      SYSTEMTIME st = { 0 };
      m_wndCalendar.GetCurSel(&st);
      st.wHour = 0; st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0;
      CComVariant v;
      v.vt = VT_DATE;
      if( st.wYear > 0 ) ::SystemTimeToVariantTime(&st, &v.date);
      v.ChangeType(VT_BSTR);
      SetWindowText(OLE2CT(v.bstrVal));
      SetFocus();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲国产中文字幕欧美| 欧美狂野另类xxxxoooo| 色成人在线视频| 2023国产一二三区日本精品2022| 亚洲精品日韩一| 国产一区二区不卡| 欧美日韩综合不卡| 亚洲视频1区2区| 国产一区二区三区免费| 91麻豆精品国产91久久久资源速度 | 亚洲一区二区欧美日韩| 久久久久久电影| 日韩成人伦理电影在线观看| 色综合久久九月婷婷色综合| 国产丝袜欧美中文另类| 日本sm残虐另类| 欧美视频日韩视频| 亚洲色图一区二区三区| 国产成人av一区| 欧美一区二区三区在线视频| 亚洲一区二区三区国产| 91一区二区在线| 精品国产乱码久久久久久闺蜜| 亚洲大片在线观看| 日本高清免费不卡视频| 国产精品成人网| 丁香婷婷综合激情五月色| 久久夜色精品国产噜噜av| 免费成人在线观看| 国产激情偷乱视频一区二区三区| 5858s免费视频成人| 亚洲国产精品嫩草影院| 欧美综合久久久| 亚洲黄色录像片| 91视频国产资源| 亚洲三级在线观看| 97se亚洲国产综合自在线观| 中文字幕一区二区视频| 不卡一区在线观看| 国产精品久久久久天堂| 不卡一区在线观看| 亚洲视频一区二区在线| 97se亚洲国产综合自在线观| 亚洲人xxxx| 日本精品免费观看高清观看| 国产成人自拍网| 国产99久久久精品| 国产精品网曝门| 成人不卡免费av| 自拍视频在线观看一区二区| 99re8在线精品视频免费播放| 一色屋精品亚洲香蕉网站| hitomi一区二区三区精品| 亚洲同性同志一二三专区| 99国产精品视频免费观看| 亚洲乱码国产乱码精品精98午夜 | 免费观看在线色综合| 欧美一区永久视频免费观看| 美女在线一区二区| 久久婷婷国产综合精品青草| 国产不卡视频一区二区三区| 中文字幕乱码一区二区免费| av亚洲精华国产精华精华| 亚洲欧美日韩在线不卡| 欧美日韩精品一区二区三区| 亚洲风情在线资源站| 宅男在线国产精品| 韩国欧美国产一区| 中文字幕精品在线不卡| 91香蕉国产在线观看软件| 一区二区三区**美女毛片| 欧美日韩国产一区| 麻豆国产一区二区| 久久久精品中文字幕麻豆发布| 福利一区福利二区| 日韩欧美不卡在线观看视频| 激情六月婷婷综合| 亚洲欧洲av在线| 欧美日韩国产免费一区二区| 麻豆精品在线播放| 蜜臀91精品一区二区三区| 99久久777色| 亚洲va天堂va国产va久| 日韩精品一区二区三区三区免费| 国产精品456| 一区二区三区在线看| 欧美一区二区在线看| 国产ts人妖一区二区| 一区二区三区欧美| 精品免费国产一区二区三区四区| 国产成人免费av在线| 一区二区三区精品视频在线| 欧美一区二区久久久| 国产不卡免费视频| 午夜精品在线看| 中文字幕巨乱亚洲| 91精品国产综合久久香蕉的特点 | 五月婷婷激情综合网| 26uuu精品一区二区| 色婷婷精品久久二区二区蜜臀av| 五月天一区二区三区| 国产日韩欧美a| 欧美猛男男办公室激情| 国产精品一区二区免费不卡| 欧美va亚洲va在线观看蝴蝶网| 成人18精品视频| 免费成人小视频| 亚洲少妇中出一区| 久久午夜羞羞影院免费观看| 欧美亚洲动漫制服丝袜| 国产乱码精品一区二区三 | 国产清纯白嫩初高生在线观看91 | 国产成人av一区二区三区在线观看| 亚洲午夜一区二区三区| 国产欧美一区二区三区网站| 亚洲欧美偷拍卡通变态| 不卡的av电影| 美腿丝袜亚洲一区| 国产一区二区福利| 中文字幕中文字幕一区| proumb性欧美在线观看| 欧美高清一级片在线观看| 一本到不卡免费一区二区| 日本不卡123| 欧美日韩你懂得| 亚洲国产综合在线| 色美美综合视频| 国产三级欧美三级日产三级99| 精品制服美女丁香| 精品久久人人做人人爽| 91社区在线播放| 极品少妇一区二区三区精品视频| 亚洲一线二线三线久久久| 国产精品免费丝袜| 精品88久久久久88久久久| 91精品国产一区二区人妖| 欧美在线观看视频在线| 成人三级伦理片| 韩国女主播成人在线| 日本aⅴ亚洲精品中文乱码| 亚洲一区二区在线观看视频| 中文字幕一区二区三区精华液| 久久久久久电影| 久久一二三国产| 精品美女一区二区三区| 91精品国产综合久久小美女| 欧美日产在线观看| 欧美日韩在线直播| 在线观看亚洲a| 色噜噜狠狠色综合欧洲selulu| 成人动漫一区二区三区| 国产精品一二二区| 亚洲国产视频一区| 亚洲一区二区偷拍精品| 1区2区3区欧美| 中文字幕中文字幕一区| 一区在线播放视频| 国产精品久久久久影院老司| 国产精品久久看| 国产精品电影一区二区| 国产精品伦理在线| 国产精品国产三级国产| 国产精品免费视频观看| 91极品美女在线| 欧美体内she精高潮| 欧美午夜一区二区三区| 欧美日韩一区成人| 精品1区2区3区| 欧美一级一区二区| 日韩欧美二区三区| 久久久久久一二三区| 国产欧美日韩在线观看| 国产精品色哟哟网站| 亚洲欧美欧美一区二区三区| 亚洲美女视频一区| 香港成人在线视频| 免费观看久久久4p| 狠狠色狠狠色综合| 岛国精品在线播放| 一本到高清视频免费精品| 欧美精品自拍偷拍| 精品日韩欧美一区二区| 偷拍与自拍一区| 成人va在线观看| 欧美mv日韩mv国产网站app| 欧美美女激情18p| 日韩你懂的电影在线观看| 久久久激情视频| 亚洲三级免费电影| 亚洲成a人v欧美综合天堂下载| 日韩电影在线免费| 国产在线精品一区二区不卡了| 丰满亚洲少妇av| 色拍拍在线精品视频8848| 51精品视频一区二区三区| 久久综合狠狠综合久久综合88| 国产调教视频一区| 亚洲国产一区二区a毛片| 美女视频免费一区| 北岛玲一区二区三区四区|