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

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

?? tyopcclientview.cpp

?? OPC Client 源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// TYOPCClientView.cpp : implementation of the CViewOPCItem class
//

#include "stdafx.h"
#include "TYOPCClient.h"

#include "TYOPCClientDoc.h"
#include "TYOPCClientView.h"

#include "DlgOPCItemWrite.h"
#include "DlgModifyName.h"
#include "DlgPropertyOPCItem.h"

#include "SafeLock.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Define some list control constants:
static UINT COLUMNWIDH[] =
{
	100,		//數據別名
	160,		//數據ID
	80,			//數據類型	
	120,		//數據值
	100,		//郵戳
	60,			//品質
	40,			//ACTIVE
	80			//更新記數
};
#define DEFAULTCOLUMNWIDTH	120

//Define Sort Order
#define ASCENDING			0	//升序
#define DESCENDING			1	//降序

// Define amount to grow item list by:
#define GROWLIST			1024

// Define column headers:
static LPCTSTR lpszRegSection = _T("Item View");
static LPCTSTR lpszSortColumn = _T("Sort Column");
static LPCTSTR lpszSortOrder = _T("Sort Order");
static LPCTSTR lpszUpdateInterval = _T("Update Interval");

// Item pane update timer evetn type:
#define UPDATE_ITEMPANE_EVENT	1

// Declare member statics:
WORD CViewOPCItem::sm_wSortOrder = ASCENDING;
WORD CViewOPCItem::sm_wSortColumn = 0;
DWORD* CViewOPCItem::sm_pSortedItems = NULL;

//數據更新速率
#define VIEW_DEFAULT_INTERVAL		250


/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem

IMPLEMENT_DYNCREATE(CViewOPCItem, CListView)

BEGIN_MESSAGE_MAP(CViewOPCItem, CListView)
	//{{AFX_MSG_MAP(CViewOPCItem)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetDispInfo)
	ON_WM_TIMER()
	ON_NOTIFY_REFLECT(HDN_ITEMCLICK, OnItemClick)
	ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)
	ON_WM_RBUTTONDOWN()
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_OPCITEM_ASYNC20_WRITE, OnOPCItemAsync20Write)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRClick)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem construction/destruction

CViewOPCItem::CViewOPCItem()
{
	// TODO: add construction code here
	m_nSortedItems=0;					//已有數據量
	m_nSortedListSize=0;				//sm_pSortedItems能容納數據總數

	m_wUpdateInterval = VIEW_DEFAULT_INTERVAL;
}

CViewOPCItem::~CViewOPCItem()
{
	if(sm_pSortedItems)
		delete[] sm_pSortedItems;
}

/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem drawing

void CViewOPCItem::OnDraw(CDC* pDC)
{
//	CTYOPCClientDoc* pDoc = GetDocument();
	CDocument* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem printing

BOOL CViewOPCItem::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CViewOPCItem::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CViewOPCItem::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem diagnostics

#ifdef _DEBUG
void CViewOPCItem::AssertValid() const
{
	CView::AssertValid();
}

void CViewOPCItem::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
//*
CTYOPCClientDoc* CViewOPCItem::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTYOPCClientDoc)));
	return (CTYOPCClientDoc*)m_pDocument;
}
//*/
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// CViewOPCItem message handlers

BOOL CViewOPCItem::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	// Perform default processing.  Return FALSE if failure:
	if (!CListView::PreCreateWindow (cs))
		return (FALSE);
	
	// Modify window sytle:
	// First clear icon view, small icon view, and list view bits.
	// Then set report view and owner data bits.  
	// (Owner data transfers the responsibility of managing data from the 
	// list control to the application programmer.  This allows very large
	// data sets to be handled efficiently.  See MSDN discussion of Virtual
	// List-View Style.)
	cs.style &= ~(LVS_ICON | LVS_SMALLICON | LVS_LIST);
	cs.style |= (LVS_REPORT | LVS_OWNERDATA);

	return TRUE;
}

int CViewOPCItem::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CListView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//
	// Initialize the image list for the items. The bitmap must use a 
	// purple background color, RGB (255, 0, 255), so that the CImageList
	// object can construct a mask.  The images are 14x14 pixels.  Set the
	// image list background color to CLR_NONE so masked pixels will be
	// transparent. 
	// Image number		Use
	//	0				Active tag
	//	1				Inactive tag
	//	2				Invalid tag
	//	3				not used
	BOOL bCreate=m_cImageList.Create (IDB_ITEMIMAGES, 14, 2, RGB (255, 0, 255));
	m_cImageList.SetBkColor (CLR_NONE);
	GetListCtrl ().SetImageList (&m_cImageList, LVSIL_SMALL);

	GetListCtrl ().ModifyStyle (NULL,CCS_TOP|LVS_SHOWSELALWAYS);	//LVS_EDITLABELS|允許就地編輯
	GetListCtrl ().SetExtendedStyle (LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

	// Create a string to hold column tile:
	CString strColumnTitle;
	UINT unFlag=LVCFMT_CENTER;
	// Define list control columns:
	int nCols=sizeof(COLUMNWIDH)/sizeof(UINT);
	for (int i = 0; i < nCols; i++)
		{
		// Create a string to contain column width registry entry:
		TCHAR szNum [8];
		wsprintf (szNum, _T("%d"), i);

		// Read the column width from the registry.  This is the width of the column
		// saved at the end of the last session.
		int nWidth = AfxGetApp ()->GetProfileInt (lpszRegSection, szNum, DEFAULTCOLUMNWIDTH);

		// Make sure it is valid:
		if (nWidth < 0)
			nWidth = DEFAULTCOLUMNWIDTH;
		
		unFlag=LVCFMT_CENTER;
		// Load the column title string resource:
		switch (i)
			{
			case 0:	// Item Alias
				strColumnTitle.LoadString (IDS_ITEMALIAS);
				unFlag=LVCFMT_LEFT;
				break;

			case 1:	// Item ID
				strColumnTitle.LoadString (IDS_ITEMID);
				unFlag=LVCFMT_LEFT;
				break;

			case 2: // Data Type
				strColumnTitle.LoadString (IDS_DATATYPE);
				break;

			case 3: // Value
				strColumnTitle.LoadString (IDS_VALUE);
				break;

			case 4:	// Timestamp
				strColumnTitle.LoadString (IDS_TIMESTAMP);
				break;

			case 5: // Quality
				strColumnTitle.LoadString (IDS_QUALITY);
				break;

			case 6: // Active
				strColumnTitle.LoadString (IDS_ACTIVE);
				break;

			case 7:	// Update Count
				strColumnTitle.LoadString (IDS_UPDATE_COUNT);
				break;

			default: // Unexpected column index
				ASSERT (FALSE);
				break;
			}

			// Insert the column:
			GetListCtrl ().InsertColumn (i, strColumnTitle, unFlag, COLUMNWIDH[i]);
		}


	// Load the sort settings from registry.  (Settings saved at end of last session.)
	sm_wSortColumn = AfxGetApp ()->GetProfileInt (lpszRegSection, lpszSortColumn, sm_wSortColumn);
	sm_wSortOrder = AfxGetApp ()->GetProfileInt (lpszRegSection, lpszSortOrder, sm_wSortOrder);

	// Load update interval setting from registry.  (Setting saved at end of last session.)
	m_wUpdateInterval = AfxGetApp ()->GetProfileInt (lpszRegSection, lpszUpdateInterval, m_wUpdateInterval);

	// Start update view timer.  This will give us a chance to do periodic 
	// maintenance of the view.
	SetTimer (UPDATE_ITEMPANE_EVENT, m_wUpdateInterval, NULL);

	// Add the extended full row selection style (This causes all subitems
	// to be selected at once - i.e. full row is selected.)
	SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
	
	return 0;
}

void CViewOPCItem::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CWaitCursor wc;

	// Process according to hint type:
	switch (lHint)
		{
		// Need to update view due to added items:
		case HINT_ITEM_ADD:	
			{
			// pHint points to a CObArray containing a list of COPCItem 
			// objects to add.  
			
			// Check to see if pHint was set (debug only).
			ASSERT (pHint != NULL);
			
			// Get pointer to the item list:
			CObArray *pAddItems = (CObArray *)pHint;

			// Initialize some variables:
			COPCItem *pItem = NULL;
			DWORD dwIndex = 0;

			// Postpone redrawing until we are done.  This will make things
			// go faster and look smoother.
			SetRedraw (false);

			for(int nIndex=0;nIndex<=pAddItems->GetUpperBound ();nIndex++)
			{
				pItem = (COPCItem *) pAddItems->GetAt (nIndex);
				Insert (pItem);
			}

			// Update the item count.  (This is one of the responsibilities
			// we took on by using a virtual list view.  See comments in
			// PreCreateWindow().)  Set flags to prevent the scroll position
			// from changing and to prevent the list control from repainting
			// unless affected items are in view. 
			GetListCtrl ().SetItemCountEx (m_nSortedItems, LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);

			// Sort the Items:
			SortItems ();

			// Now that we have added all of the items, we can let the 
			// view repaint itself:
			SetRedraw (true);
			}
			break;
		case HINT_GETSEL_ITEM:
			{
			// Check to see if pHint was set (debug only).
			ASSERT (pHint != NULL);
			
			// Get pointer to the item list:
			CStringArray *pSelItems = (CStringArray *)pHint;
			GetSelOPCItem(*pSelItems);
			break;
			}
/*/
		// Need to update view due to re-added items:
		case HINT_READD_ITEM:
			{
			// This will be accomplished by simply causing a repaint of the
			// item icons currently in view.

			// Get reference to our list control:
			CListCtrl &cList = GetListCtrl ();

			int nTopIndex;
			CRect rc;
			CRect rcitem;
			
			// Get view rectangle:
			cList.GetClientRect (&rc);

			// Get index of first visible item:
			nTopIndex = cList.GetTopIndex ();

			// Get rectangle bounding the first visible item's icon:
			cList.GetItemRect (nTopIndex, &rcitem, LVIR_ICON);

			// Adjust the view rectangle to invalidate all item icons areas:
			rc.right = rcitem.right;
			rc.left = rcitem.left;
						
			// Invalidate the area to force a repaint of item icons:
			cList.InvalidateRect (&rc);
			}
			break;

		// Need to update view due to closed project or new server selection:
		case HINT_CLOSE_PROJECT:
		case HINT_SERVER_SELECT:
			// pHint will be NULL if HINT_CLOSE_PROJECT and will contain a
			// pointer to a CKServer object if HINT_SELECT_SERVER.  (Not
			// used in either case.)

			// No items should be displayed after project is closed of if
			// a server is selected.  (Items are displayed only when a group
			// is selected.)  Delete any items in list control.
			if (GetListCtrl ().GetItemCount () > 0)
				DeleteAllItems ();
			break;
//*/
		// Need to update view due to new group selection:
		case HINT_ITEM_REMOVE:
		case HINT_GROUP_SELECT:

			{
			// pHint points to the newly selected CKGroup object.

				// Hint pointer must have been set for us to proceed:
				// Get reference to our list control:
				CListCtrl &cList = GetListCtrl ();

				if (pHint == NULL)
				{	//當前選擇項---非組
					m_nSortedItems=0;
					cList.SetItemCountEx (m_nSortedItems, LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);
					cList.DeleteAllItems ();
					break;
				}


				// Get pointer to newly selected COPCGroup:
				COPCGroup *pGroup = (COPCGroup *) pHint;

				// Postpone redrawing until we are done.  This will make
				// things go faster and look smoother.
				SetRedraw (false);

				// Delete any items that are currently in the list:
				if (cList.GetItemCount () > 0)
					cList.DeleteAllItems ();
				m_nSortedItems=0;
//				if (cList.GetItemCount () > 0)
//					DeleteAllItems ();
				
				// Insert all items that belong to the selected group:

				// Start with head of linked list of items in group and
				// work our way to the end.
				CMapStringToOb* pMapItem = pGroup->GetItem();

				// Add each item in linked list until we hit the end 
				// (indicated by a NULL pointer).
				POSITION pos=pMapItem->GetStartPosition ();
				COPCItem* pItem=NULL;
				CString rKey;
				while (pos)
				{
					pMapItem->GetNextAssoc (pos,rKey,(CObject*&)pItem);
					ASSERT(pItem);
					if(pItem)
						Insert (pItem);
				}

				// Update the item count.  (This is one of the responsibilities
				// we took on by using a virtual list view.  See comments in
				// PreCreateWindow().)  Set flags to prevent the scroll position
				// from changing and to prevent the list control from repainting
				// unless affected items are in view.
				cList.SetItemCountEx (m_nSortedItems, LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);

				// Sort the list:
				SortItems ();

				// Now that we are done adding items, we can let the view
				// repaint itself:
				SetRedraw (true);
			}
			break;
/*/
		// Need to update view due to refresh view request:
		case HINT_REFRESH_ITEMVIEW:
			// Force a repaint of whole view:
			GetListCtrl ().Invalidate (false);
			GetListCtrl ().UpdateWindow ();
			break;
//*/
		// Perform default processing:
		case HINT_NEW_DOCUMENT:
		case HINT_OPEN_DOCUMENT:
			{
				CListCtrl &cList = GetListCtrl ();
				m_nSortedItems=0;
				cList.SetItemCountEx (m_nSortedItems, LVSICF_NOSCROLL | LVSICF_NOINVALIDATEALL);
				cList.DeleteAllItems ();
				break;
			}
		default:
			CView::OnUpdate (pSender, lHint, pHint);
			break;
		}	
}

void CViewOPCItem::Insert(COPCItem *pItem,BOOL bSelItem/*=TRUE*/)
{
/*/
	CListCtrl& cListCtrl=GetListCtrl();

//	cListCtrl.InsertItem( 0,pItem->GetItemID (),0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美aaa在线| 亚洲精品国产高清久久伦理二区| 欧美日韩视频一区二区| 欧美色图12p| 精品美女被调教视频大全网站| 久久久不卡影院| 亚洲人成网站在线| 亚洲人一二三区| 日韩精品亚洲一区二区三区免费| 国产乱码精品一品二品| 91视视频在线直接观看在线看网页在线看 | 中文字幕第一区第二区| 亚洲青青青在线视频| 日本强好片久久久久久aaa| 日本欧美一区二区三区乱码| 国产精品一区二区无线| 欧美性欧美巨大黑白大战| 国产精品久久久久久久久久久免费看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美日韩午夜在线| 亚洲欧美日韩国产中文在线| 91精品国产综合久久福利软件 | www国产成人免费观看视频 深夜成人网| 亚洲激情图片一区| 91麻豆蜜桃一区二区三区| 中文在线一区二区| 国产电影一区二区三区| 精品第一国产综合精品aⅴ| 麻豆成人免费电影| 91精品国产免费| 热久久免费视频| 69av一区二区三区| 日本中文字幕一区二区有限公司| 欧美精品丝袜久久久中文字幕| 亚洲在线成人精品| 欧美日韩国产综合视频在线观看| 亚洲午夜久久久久久久久电影院| 在线亚洲人成电影网站色www| 亚洲精品久久久蜜桃| 色成年激情久久综合| 一区二区三区91| 欧美影院精品一区| 七七婷婷婷婷精品国产| 日韩欧美色综合| 国产一区二区三区最好精华液| 日韩一级免费观看| 国产99精品视频| 最新中文字幕一区二区三区| 91麻豆视频网站| 舔着乳尖日韩一区| 亚洲精品在线免费播放| 国产91高潮流白浆在线麻豆| 国产精品久99| 欧美亚洲禁片免费| 日本欧美在线看| 中文字幕免费不卡在线| 欧美亚洲一区三区| 美女视频免费一区| 国产精品日日摸夜夜摸av| 91免费小视频| 男人的天堂久久精品| 久久精品一区四区| 在线观看一区二区视频| 九九**精品视频免费播放| 一区在线观看免费| 欧美精品色综合| 久久99国产精品免费网站| 国产欧美1区2区3区| 欧日韩精品视频| 国产真实乱对白精彩久久| 一区二区三区欧美激情| 欧美大片顶级少妇| 91论坛在线播放| 国产在线国偷精品产拍免费yy| 亚洲天堂a在线| 精品免费日韩av| 日本韩国一区二区三区| 国产一区激情在线| 丝瓜av网站精品一区二区| 中文字幕av在线一区二区三区| 欧美高清hd18日本| 91官网在线观看| 国产福利91精品| 日韩av一区二区在线影视| 亚洲婷婷国产精品电影人久久| 欧美精品一区二区三区蜜桃| 欧美日韩一本到| 成年人午夜久久久| 国产在线精品一区二区| 午夜不卡av在线| 又紧又大又爽精品一区二区| 久久久久久日产精品| 欧美人与z0zoxxxx视频| 99久久精品费精品国产一区二区| 狠狠色狠狠色合久久伊人| 日韩成人精品视频| 亚洲国产综合91精品麻豆| 中文字幕一区二区5566日韩| 亚洲精品一区二区三区四区高清| 欧美日韩在线观看一区二区 | 欧美日韩精品电影| 色综合久久66| 色综合天天综合狠狠| 成人深夜福利app| 国产精品一二三| 国模娜娜一区二区三区| 奇米精品一区二区三区在线观看一| 一区二区三区在线视频免费| 国产精品国产馆在线真实露脸 | 国产综合久久久久影院| 日韩经典中文字幕一区| 樱花影视一区二区| 亚洲一区二区精品视频| 亚洲精品乱码久久久久久黑人 | 欧美日韩精品综合在线| 日本精品裸体写真集在线观看| 一本在线高清不卡dvd| 99re热视频这里只精品| 91女人视频在线观看| 一本色道久久综合狠狠躁的推荐| 不卡av电影在线播放| 99久久99久久精品国产片果冻| av一区二区三区黑人| 色综合天天性综合| 欧美日本韩国一区| 欧美电影免费观看高清完整版| 日韩欧美色综合网站| 久久久精品综合| 18成人在线视频| 亚洲午夜精品一区二区三区他趣| 亚洲 欧美综合在线网络| 性欧美疯狂xxxxbbbb| 蜜臀精品久久久久久蜜臀| 麻豆91精品91久久久的内涵| 国产精品一区二区在线播放| 风间由美一区二区三区在线观看 | 久久99精品久久只有精品| 久99久精品视频免费观看| 国产精品亚洲一区二区三区在线 | 成人免费一区二区三区视频| 亚洲天堂久久久久久久| 午夜精品久久一牛影视| 久久99国产精品尤物| 国产伦精品一区二区三区免费迷 | 国产美女精品在线| av电影在线观看一区| 欧美日韩一级片在线观看| 久久影院电视剧免费观看| 亚洲人成人一区二区在线观看| 亚洲成人在线观看视频| 国产精品66部| 欧美综合亚洲图片综合区| 制服丝袜日韩国产| 国产三级精品视频| 亚洲成人av福利| 成人综合日日夜夜| 91精品国产综合久久蜜臀| 国产日韩欧美在线一区| 性欧美大战久久久久久久久| 成人做爰69片免费看网站| 91精品国产综合久久精品图片| 国产午夜精品一区二区三区四区| 亚洲国产成人tv| 粉嫩一区二区三区性色av| 欧美三级日本三级少妇99| 国产三级精品视频| 美国十次了思思久久精品导航| 99精品欧美一区| 久久色在线观看| 丝袜美腿亚洲一区| 成人免费高清视频在线观看| 欧美视频第二页| 亚洲人成人一区二区在线观看 | 国内精品国产三级国产a久久| 欧美在线免费观看亚洲| 国产精品视频麻豆| 激情亚洲综合在线| 91麻豆精品国产无毒不卡在线观看| 中文字幕色av一区二区三区| 国产综合成人久久大片91| 欧美一区二区视频免费观看| 亚洲一区二区五区| 99久久夜色精品国产网站| 日本一区二区免费在线 | 日本高清不卡aⅴ免费网站| 久久一留热品黄| 九九精品一区二区| 日韩精品一区二区三区在线| 亚洲成av人片一区二区梦乃| 91丨porny丨国产入口| 亚洲欧美在线观看| voyeur盗摄精品| 日本一区二区综合亚洲| 国产精品一卡二卡| 26uuu亚洲| 国产大陆精品国产| 中文字幕 久热精品 视频在线| 国产成人免费视频一区| 国产亚洲精品超碰| 成人av电影观看|