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

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

?? memoryeditorlist.cpp

?? 用于開發(fā)Modbus工業(yè)級通信
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
   GetCursorPos(&pt);
   // convert point to client area co-ordinates
   rect.top = pt.y;
   rect.bottom = pt.y;
   rect.left = pt.x;
   rect.right = pt.x;
   ScreenToClient(&rect);
   // do a hit test
   htInfo.pt.x = rect.left;
   htInfo.pt.y = rect.top;
   SubItemHitTest(&htInfo);   // this will return the Item

   //**** 20021101 add by HF
   if(htInfo.iSubItem == 0) return;
   //**** 20021101 end

   if (htInfo.flags & LVHT_ONITEMLABEL)
   {
   CString description, descrFormat;
   WORD memPrefix;
   CString registerName;

#ifdef _UI_DEBUGGING
      sprintf(position, "\nEditable data columns =%d |", m_displayableWidth);
      OutputDebugString(position);
      sprintf(position, "Selected at %d, %d (%d,%d)\n", rect.left, rect.top, htInfo.iItem, htInfo.iSubItem);
      OutputDebugString(position);
#endif
//      absItemNumber = (htInfo.iItem * m_displayableWidth) + htInfo.iSubItem-1;// work out a zero-based index
//      absItemNumber = (htInfo.iItem * (NUMBER_LISTCOLS-1)) + htInfo.iSubItem-1;
// **** 20021101 mod by HF start
      absItemNumber = (htInfo.iItem * (m_displayableWidth)) + htInfo.iSubItem-1;
//      absItemNumber = (htInfo.iItem * (BITS_IN_WORD-1)) + htInfo.iSubItem-1;
// **** 20021101 mod by HF end
      memPrefix = PLCMemPrefixes[m_memAreaDisplayed];
      descrFormat.Format("Edit %s value at %s", GetFormatName(), GetAddressFormat());
      description.Format(descrFormat, (IsAddressFormatHex()?0:memPrefix*10000) + absItemNumber+1);
      if (pGlobalDialog->InPlantSimulation()) 
         pGlobalDialog->GetRegisterName(m_memAreaDisplayed, absItemNumber, registerName);

      if (htInfo.iSubItem)
      {
         // if U double-click on a digital, we just toggle it for U quickly
         if (pGlobalDialog->PLCIsBitMemory(m_memAreaDisplayed))
         {
            if (17 == htInfo.iSubItem)
            {
            DWORD registerValue;
            
               absItemNumber = (htInfo.iItem * (BITS_IN_WORD)) + 0;
               registerValue = pGlobalDialog->GetWordValue(m_memAreaDisplayed, 
                                                           absItemNumber, 
                                                           BITS_IN_WORD);
               descrFormat.Format("Edit %s value at %s", ViewerFormatNames[VIEWFORMAT_HEX], GetAddressFormat());
               description.Format(descrFormat, memPrefix*10000 + absItemNumber);

#ifdef _UI_DEBUGGING
      OutputDebugString(description);
#endif
               {
               // construct the "value editor" dialog to edit "16-bits" of I/O
               CEditMemoryDlg memEditor(PLCViewerFormats[VIEWFORMAT_HEX], registerName, registerValue, VIEWFORMAT_HEX, description);
         
                  if (IDOK==memEditor.DoModal())
                  {
                     // unpack the value again into bits
                     registerValue = (DWORD)memEditor.m_value;
                     pGlobalDialog->SetWordValue(m_memAreaDisplayed, 
                                                 absItemNumber, 
                                                 registerValue, 
                                                 BITS_IN_WORD);
                  }
               }
               // re-paint the row of digitals
               RedrawItems(htInfo.iItem, htInfo.iItem);
            }
            else
            {
               descrFormat.Format("Toggle digital at %s",  GetAddressFormat());
               description.Format(descrFormat, (IsAddressFormatHex()? 0 : memPrefix*10000) + absItemNumber);

#ifdef _UI_DEBUGGING
      OutputDebugString(description);
#endif
               if (PLCMemory[m_memAreaDisplayed][absItemNumber])
                  PLCMemory.SetAt(m_memAreaDisplayed, absItemNumber, 0);
               else
                  PLCMemory.SetAt(m_memAreaDisplayed, absItemNumber, 1);
               // re-paint the digital
               RedrawItems(htInfo.iItem, htInfo.iItem);
            }
         }
         else  // Edit the item in a dialog
         {
         DWORD    maximumOffset = pGlobalDialog->GetPLCMemoryLimit(m_memAreaDisplayed);

            if (absItemNumber < (LONG)maximumOffset/*MAX_MOD_MEMWORDS*/)
            {
            CEditMemoryDlg memEditor(GetViewFormatString(), 
                                     registerName, 
                                     pGlobalDialog->GetPLCMemoryValue(m_memAreaDisplayed, absItemNumber, GetViewFormat()), 
                                     GetViewFormat(), 
                                     description);
         
#ifdef _UI_DEBUGGING
      OutputDebugString(description);
#endif
               if (IDOK==memEditor.DoModal())
               {
                  // fetch the item based on it's display formatting
                  PLCMemory.SetAt(m_memAreaDisplayed,
                                  absItemNumber, 
                                  (WORD)memEditor.m_value);
                  // invalidate the item itself
                  RedrawItems(htInfo.iItem, htInfo.iItem);
               }
            }
         }
      }
      else
      {
         // User clicked in the addresses column.
         if (pGlobalDialog->IsAddressFormatHex())
            pGlobalDialog->OnViewdec();
         else
            pGlobalDialog->OnViewhex();
      }
   }
   else
      sprintf(position, "Clicked at %d, %d", rect.left, rect.top);
   //MessageBox(position);	

	*pResult = 0;
} // OnDblclk

// ---------------------------------- GetDataColumnCount ------------------------------
int CMemoryEditorList::GetDataColumnCount() 
{
int memoryViewWidth = m_displayableWidth;

   return(memoryViewWidth);
}

// ------------------------------------ OnGetdispinfo ---------------------------------
void CMemoryEditorList::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here
	
   // call my internal function
	*pResult = GetListViewDISPINFO((LPARAM)pNMHDR);
} // OnGetdispinfo


// --------------------------- GetListViewDISPINFO -------------------------
//
LRESULT CMemoryEditorList::GetListViewDISPINFO(LPARAM lParam)
{
LPNMHDR  lpnmh = (LPNMHDR) lParam;
HWND     hwndListView = m_hWnd;
DWORD    absItemNumber;
DWORD    memoryViewWidth;
DWORD    registerValue = 0;
CString  valueFormat;
float    *pFloat32value;
int      viewDataFormat = GetViewFormat();  // fetch user selection
DWORD    maximumOffset = pGlobalDialog->GetPLCMemoryLimit(m_memAreaDisplayed);

LV_DISPINFO *lpdi = (LV_DISPINFO *)lParam;
TCHAR szString[MAX_PATH];

   

   if(lpdi->item.iSubItem)
   {
      // return a sub-item (the data values)
      if(lpdi->item.mask & LVIF_TEXT)
      {
         memoryViewWidth = m_displayableWidth;
         if (pGlobalDialog->PLCIsBitMemory(m_memAreaDisplayed))
         {
            memoryViewWidth--;
            // determine the bit #
            if (17 == lpdi->item.iSubItem)
            {  // the totals column
               viewDataFormat = VIEWFORMAT_WORD;// always display in HEX

               absItemNumber = (lpdi->item.iItem * (BITS_IN_WORD)) + 0;
               registerValue = pGlobalDialog->GetWordValue(m_memAreaDisplayed, 
                                                           absItemNumber, 
                                                           BITS_IN_WORD);
               valueFormat = PLCViewerFormats[VIEWFORMAT_HEX];       // BIT totals in HEX
            }
            else
            { // individual bit #
               absItemNumber = (lpdi->item.iItem * BITS_IN_WORD) + lpdi->item.iSubItem-1;
               registerValue = PLCMemory[m_memAreaDisplayed][absItemNumber];
               valueFormat = PLCViewerFormats[VIEWFORMAT_DECIMAL];   // bits are 0 or 1
            }
         }
         else
         {
            valueFormat = GetViewFormatString();
            // determine the register #
            absItemNumber = (lpdi->item.iItem * (memoryViewWidth)) + lpdi->item.iSubItem-1;
            if (absItemNumber < maximumOffset/*MAX_MOD_MEMWORDS*/)
               registerValue = pGlobalDialog->GetPLCMemoryValue(m_memAreaDisplayed, absItemNumber, GetViewFormat());
            if ((m_cloneAddressing)&&(GetViewFormat() == VIEWFORMAT_FLOAT))
               SwopWords(&registerValue);
         }
         
         if (absItemNumber < maximumOffset/*MAX_MOD_MEMWORDS*/)
         {
            
            // print the contents
            switch (viewDataFormat)
            {
            case VIEWFORMAT_DECIMAL:
               sprintf(szString, valueFormat, (short)registerValue);
               break;
            case VIEWFORMAT_HEX: 
            case VIEWFORMAT_WORD: 
               sprintf(szString, valueFormat, registerValue);
               break;
            case VIEWFORMAT_DWORD:
               sprintf(szString, valueFormat, registerValue);
               break;
            case VIEWFORMAT_LONG:
               sprintf(szString, valueFormat, (LONG)registerValue);
               break;
            case VIEWFORMAT_FLOAT:
               pFloat32value = (float*)&registerValue;
               sprintf(szString, valueFormat, *pFloat32value);
               break;
            default:
               ASSERT(0);
               break;
            }
            lstrcpyn(lpdi->item.pszText, szString, lpdi->item.cchTextMax);
         }
         else
         {
            lstrcpyn(lpdi->item.pszText, "--", lpdi->item.cchTextMax);
         }
      }
   }
   else
   {
   CString addrFormat;
      
      // return address column values
      if(lpdi->item.mask & LVIF_TEXT)
      {
      DWORD addrEndItem, offset = 0;

         absItemNumber = lpdi->item.iItem * (m_displayableWidth) +1 ;//modbus addresses start at 1 not zero
         if ((PROTOCOL_SELJOY232 == pGlobalDialog->m_selectedProtocol) ||
             (PROTOCOL_SELAB232 == pGlobalDialog->m_selectedProtocol))
         { // Allen-Bradley
            offset = 0;
         }
         else
         { // modbus
            if (!IsAddressFormatHex()) // decimal address format
            {
               if (absItemNumber>9999) //5-digit offset
                  offset = PLCMemPrefixes[m_memAreaDisplayed]*100000;
               else
                  offset = PLCMemPrefixes[m_memAreaDisplayed]*10000;
            }
         }
         addrFormat.Format("%s-%s", GetAddressFormat(), GetAddressFormat());

         // work out the last address on this line/row
         addrEndItem = absItemNumber + m_displayableWidth-1;
         if (addrEndItem > maximumOffset/*MAX_MOD_MEMWORDS*/)
             addrEndItem = maximumOffset/*MAX_MOD_MEMWORDS*/; //range check it
         
         sprintf(szString, addrFormat, offset+absItemNumber, offset+addrEndItem);
         lstrcpyn(lpdi->item.pszText, szString, lpdi->item.cchTextMax);
      }

      if(lpdi->item.mask & LVIF_IMAGE)
      {
         lpdi->item.iImage = 0;
      }

      if(lpdi->item.mask & LVIF_INDENT)
      {
         lpdi->item.iIndent = 0;
      }
   }
   
   return 0;
} // GetListViewDISPINFO

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产一级二级| 91丨porny丨最新| 国产精品卡一卡二卡三| 欧美午夜影院一区| 高清不卡在线观看| 男男成人高潮片免费网站| 中文字幕制服丝袜一区二区三区| 91精品国产品国语在线不卡| 成人免费三级在线| 麻豆免费看一区二区三区| 亚洲精品中文在线影院| 久久精品亚洲一区二区三区浴池| 欧美精品一级二级三级| 99久久99久久精品免费观看| 国产一区免费电影| 日本成人在线不卡视频| 亚洲一区二区视频| 亚洲天堂2016| 国产精品视频一二| 久久这里只精品最新地址| 91麻豆精品国产91久久久更新时间 | 99久久伊人久久99| 国产精品99久久久| 麻豆精品在线播放| 日日嗨av一区二区三区四区| 亚洲另类中文字| 亚洲欧洲日韩av| 中文在线资源观看网站视频免费不卡 | 国产成人丝袜美腿| 美女被吸乳得到大胸91| 亚洲二区在线视频| 亚洲另类在线视频| 国产精品成人午夜| 中文字幕一区二区不卡| 中文字幕不卡在线观看| 久久久久久久综合日本| 久久亚洲综合av| 久久久蜜桃精品| 久久精品日产第一区二区三区高清版| 欧美福利视频一区| 欧美精品日日鲁夜夜添| 777a∨成人精品桃花网| 欧美一卡2卡3卡4卡| 欧美一级久久久| 欧美成人免费网站| 精品1区2区在线观看| 精品美女一区二区| 国产婷婷色一区二区三区在线| 国产欧美一区二区精品性色| 国产欧美日韩在线看| 国产精品萝li| 亚洲最大成人综合| 亚洲专区一二三| 首页国产欧美久久| 久久91精品久久久久久秒播| 久久99国产精品久久99| 国产成a人亚洲精品| 99riav一区二区三区| 欧美艳星brazzers| 欧美一区二区福利视频| 亚洲精品一区二区三区四区高清| 国产日韩欧美精品综合| 亚洲欧美综合色| 五月天激情综合网| 经典一区二区三区| 99久久婷婷国产综合精品| 91久久精品一区二区| 欧美高清hd18日本| 久久久天堂av| 亚洲欧美视频一区| 亚洲v日本v欧美v久久精品| 麻豆免费精品视频| 99国产一区二区三精品乱码| 欧美精品丝袜中出| 国产三级精品视频| 亚洲精品视频在线观看免费 | 国产aⅴ综合色| 日本精品一级二级| 日韩一区二区影院| 国产精品第四页| 日本 国产 欧美色综合| 成人深夜福利app| 欧美精品1区2区3区| 久久一区二区视频| 亚洲狠狠丁香婷婷综合久久久| 日本成人在线视频网站| 波多野结衣视频一区| 欧美日韩视频一区二区| 国产亚洲欧美在线| 亚洲最大成人网4388xx| 国产麻豆日韩欧美久久| 91高清视频在线| 日韩午夜av一区| 亚洲欧美日韩在线| 韩国成人精品a∨在线观看| 91精品福利视频| 国产日韩欧美精品综合| 蜜臂av日日欢夜夜爽一区| 97精品久久久午夜一区二区三区| 欧美岛国在线观看| 亚洲一区在线视频观看| 粉嫩欧美一区二区三区高清影视| 在线成人av网站| 亚洲欧美一区二区三区极速播放 | 96av麻豆蜜桃一区二区| 日韩欧美国产一区二区三区| 亚洲精品久久嫩草网站秘色| 国产91清纯白嫩初高中在线观看| 91精品国产91久久综合桃花 | 日本欧美在线看| 91视频免费看| 欧美激情综合五月色丁香小说| 日韩成人一级大片| 欧美唯美清纯偷拍| 亚洲人成人一区二区在线观看| 国产精品一区二区三区网站| 日韩三级av在线播放| 亚洲国产精品久久人人爱| 91美女在线观看| 亚洲欧洲另类国产综合| 国产福利精品一区| 精品国产乱码久久久久久图片| 视频一区视频二区在线观看| 欧美色精品天天在线观看视频| 国产精品国产馆在线真实露脸 | 久久久久久免费毛片精品| 免费成人av在线| 日韩一区二区三区高清免费看看| 亚洲图片欧美视频| 在线观看亚洲一区| 伊人夜夜躁av伊人久久| 色综合久久66| 一级日本不卡的影视| 色8久久人人97超碰香蕉987| 亚洲美女免费在线| 色哟哟国产精品免费观看| 亚洲免费成人av| 欧美综合一区二区| 亚洲国产中文字幕在线视频综合| 欧美视频一区二区三区| 午夜国产精品影院在线观看| 欧美福利视频导航| 蜜臀av性久久久久蜜臀aⅴ | 亚洲免费毛片网站| 色综合欧美在线| 一区二区三区日韩| 在线视频中文字幕一区二区| 亚洲成人综合在线| 91精品在线麻豆| 国产一区啦啦啦在线观看| 国产精品网站在线| 一本一道久久a久久精品综合蜜臀| 亚洲摸摸操操av| 欧洲一区二区av| 秋霞影院一区二区| 久久精品视频一区二区三区| 成人免费黄色在线| 亚洲精品ww久久久久久p站| 欧美色综合天天久久综合精品| 视频在线观看一区| 久久伊99综合婷婷久久伊| 9久草视频在线视频精品| 亚洲影视在线播放| 欧美一区二区三级| 国产精品一区二区你懂的| 国产精品久久久久永久免费观看| 一本色道久久加勒比精品| 亚洲福利电影网| 久久久久久夜精品精品免费| 91麻豆免费观看| 偷拍一区二区三区四区| 久久久亚洲精品一区二区三区| 91小视频在线免费看| 午夜伦欧美伦电影理论片| 久久精品视频一区二区| 欧美性大战久久久久久久| 精品亚洲aⅴ乱码一区二区三区| 亚洲欧洲成人自拍| 91精品国产入口| 99国产一区二区三精品乱码| 日韩精品亚洲一区| 国产精品人妖ts系列视频| 欧美剧情片在线观看| 风间由美中文字幕在线看视频国产欧美| 成人欧美一区二区三区黑人麻豆| 在线不卡欧美精品一区二区三区| 国产露脸91国语对白| 亚洲va国产天堂va久久en| 欧美激情艳妇裸体舞| 欧美日韩久久不卡| 成人禁用看黄a在线| 青青草国产精品97视觉盛宴| 亚洲视频一区二区在线观看| 欧美r级在线观看| 91国偷自产一区二区三区成为亚洲经典 | 日韩黄色免费电影| 亚洲日本丝袜连裤袜办公室| 久久免费午夜影院| 欧美精品在线观看一区二区| 99国产欧美另类久久久精品|