⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btn.cpp

📁 一个嵌入式系统的C代码
💻 CPP
字号:
/**************************************************************************  MODULE : Btn - Class Body						 **  AUTHOR : Ron Chernich						 **  PURPOSE: Class actions used to build "button" like objects used in	 **	     RCOS system.  These actions support button construction and **	     activation only.  All visual aspects are handled by a class **	     based on this class.					 **  HISTORY:								 **   18-JAN-93  First (MSC/C++ 7.00) version				 **   04-JUN-93  Allocation of button label made conditional		 **   29-MAR-94  Button class being deleted twice (allow to DblList do it) **************************************************************************/#include "btn.hpp"/////////////////// table used to lookup the raw key values returned by ALT keys//static unsigned char RawKey[] = {  ALT_A, ALT_B, ALT_C, ALT_D, ALT_E, ALT_F, ALT_G, ALT_H, ALT_I,  ALT_J, ALT_K, ALT_L, ALT_M, ALT_N, ALT_O, ALT_P, ALT_Q, ALT_R,  ALT_S, ALT_T, ALT_U, ALT_V, ALT_W, ALT_X, ALT_Y, ALT_Z, ALT_0,  ALT_1, ALT_2, ALT_3, ALT_4, ALT_5, ALT_6, ALT_7, ALT_8, ALT_9};//////////////////////////////////////////////////////////////////////////// Class destructor:  Kills off all buttons in a linked list,// and then the list itself//Btn::~Btn(){  pb = (btn*)DblGetHead();  while (pb) {    if (pb->pst)      delete pb->pst;    pb = (btn*)DblGetNext();  }  DblDrop();  pb = NULL;};/////////////////// Add a new button to the linked list.  The params decode as://     n .. the ID to be returned when the button is activated//   str .. Button label (with optional hot key char prefixed by "&")// x1,y1 .. Upper-Left boundary for "hot reigon"// x2,y2 .. width and height of hot area from upper-left reference// RETURNS: TRUE  .. action complete (Btn::pb references new data object)//	    FALSE .. unable to allocate storage for item//BOOL Btn::BtnNew(const UINT16 n, char *str, rect &r){  btn  *p;  int  idx;  char *cp;  BOOL bOk = FALSE;  if (p = new btn) {    p->r  = r;    p->Id = n;    p->status = 0;    if (strlen(str) == 0)      p->pst = NULL;    else {      p->pst = new Str(str);      if (cp = strchr(str, '&')) {	++cp;	idx = (((*cp >= 'a') && (*cp <= 'z')) ? (int)(*cp - 'a') :	      ((*cp >= 'A') && (*cp <= 'Z')) ? (int)(*cp - 'A') :	      ((*cp >= '0') && (*cp <= '9')) ? (26 + (int)(*cp - '0')) : -1);	p->HotKey = ((idx >= 0) ? RawKey[idx] : 0);      }    }    if (DblAppend((void*)p, (UINT16)sizeof(btn)))      bOk = TRUE;    else      delete p->pst;  }  if (pb = p)  // bit naughty: combined assignment and test (not comparison!)    delete p;  return bOk;}///////////////// See if a member button has the passed Hot Key code// RETURNS:  button reference (or NULL if Hot Key unsegistered)//btn *Btn::BtnHit (const char ch){  pb = (btn*)DblGetHead();  while (pb) {    if (ch == pb->HotKey)      break;    pb = (btn*)DblGetNext();  }  return pb;}///////////////// See if the passed point lies in a member button Hot Zone// RETURNS:  button reference (or NULL if point unsegistered)//btn *Btn::BtnHit (point &pt){  pb = (btn*)DblGetHead();  while (pb) {    if (pb->r.InRect(pt))      break;    pb = (btn*)DblGetNext();  }  return pb;}/////////////// Locate button by ID// RETURNS: TRUE  .. ID found, pb -> data//	    FALSE .. unknown ID//BOOL Btn::BtnFind (const UINT16 id){  pb = (btn*)DblGetHead();  while (pb) {    if (pb->Id == id)      return TRUE;    pb = (btn*)DblGetNext();  }  return FALSE;}/////////////// Delete string label of button with passed ID from list, then allow// the linked list class to free the rest.  If the passed ID is ZERO// (an illegal ID), kill off all controls in the list.//void Btn::BtnKill (const UINT16 nTarg){  pb = (btn*)DblGetHead();  while (pb) {    if (!nTarg || (pb->Id == nTarg)) {      if (pb->pst)        delete pb->pst;      DblDelete();      break;    }    pb = (btn*)DblGetNext();  }}/************************************ EOF ********************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -