Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.97 KB | None | 0 0
  1.  
  2.  
  3. struct     Graph_OUT      //-------------------------------------------------------------------------------------------
  4. {
  5.     int           x, x2,   //   Коородината для TextOut
  6.                   y, y2,   //   Коородината для TextOut
  7.                   L,       //   Кол-во символом
  8.              status;                     
  9.     char      *addr;       
  10.                  
  11.     static char *Last_addr;        
  12.     static int  Last_Slovo;      
  13.     static int           i;  
  14.     static char base[2048];
  15.    
  16.     static RECT rect;  
  17.  
  18.     static int  Chek(int, int, int);  
  19.    
  20.  
  21.     int  add(char *buf)  //-----------------------------------------------    int X, int Y,const char *bufik, int F
  22.     {
  23.          L = strlen(buf);
  24.          addr = Last_addr; 
  25.          Last_addr += L;   
  26.          memcpy(addr, buf, L);
  27.                  
  28.          status = 1;                                                                     //  1 - выводить на экран
  29.  
  30.          GetTextExtentPoint32(hdc, buf, lstrlen(buf), &sz); //  -----------------   ----  Отобразить строку на экране
  31.          x2 = x + sz.cx;
  32.          y2 = y + sz.cy;
  33.          Chek(x, y, x2);   
  34.          SetRect( &rect, x,
  35.                          y,
  36.                          x2,                                                    // ширина надписи в пикселях
  37.                          y2);                                                   // Высота строки
  38.                                                                            
  39.          InvalidateRect(hWnd, &rect, 1); //---------------------------------------------------------------------------
  40.          Last_Slovo++;
  41.          return 0;
  42.     }    
  43.  
  44.  
  45.  
  46.    
  47. } Slovo[150];             //-------------------------------------------------------------------------------------------
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. int _Print(int x, int y,const char *bufik, int F)
  56. {
  57.    
  58.          char      buf[170],
  59.                     bug[11];
  60.                  
  61.          itoa(F, bug, 10);
  62.        
  63.          strcpy(buf, bufik);
  64.          strcat(buf, bug);       //  ___________________________________________   Склеили всё в одну мтроку: "buf"   
  65.          
  66.          int i = Graph_OUT::Last_Slovo;
  67.          
  68.          Slovo[i].x = x;
  69.          Slovo[i].y = y;
  70.          Slovo[i].add(buf);
  71.    
  72.     return 0;
  73. }
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107. //---------------------------------------------------------------------
  108. //    Если новая строка перекрывает старую, то старую строку стираем
  109. //---------------------------------------------------------------------
  110.  
  111. int Graph_OUT::Chek(int x, int y, int x2)
  112. {
  113.   L_x1:  int _L = 0;  // в этой переменной будет накапливаться смещение адреса начала слов
  114.    
  115.          for(i = 0; i < Last_Slovo; i++)
  116.          {         
  117.             if(Slovo[i].status == 1)
  118.             {  
  119.                 Slovo[i].addr -= _L;                                   
  120.                 if(!_L)
  121.                 {
  122.                     if(abs(y - Slovo[i].y) < 13)
  123.                     {
  124.                         if(x  >= Slovo[i].x && x  <= Slovo[i].x2) goto L_01;
  125.                         if(x2 >= Slovo[i].x && x2 <= Slovo[i].x2)
  126.                         {
  127.       L_01:                  Slovo[i].status = 5;       //  5 - (ожидание) стереть надпись    || (x  >= Slovo[i].x && x  <= Slovo[i].x2))
  128.                              SetRect( &rect, Slovo[i].x,
  129.                                              Slovo[i].y,
  130.                                              Slovo[i].x2,                               // ширина надписи в пикселях
  131.                                              Slovo[i].y2);                              // Высота строки                                                                   
  132.                              InvalidateRect(hWnd, &rect, 1);
  133.                              //---------------------------------------------------------------------------------------------                         
  134.                              _L += Slovo[i].L;
  135.                                                                      
  136.                               memcpy(Slovo[i].addr, Slovo[i+1].addr, Last_addr - Slovo[i+1].addr);
  137.                              
  138.                               Last_addr -= Slovo[i].L; 
  139.                               Slovo[Last_Slovo].addr -= Slovo[i].L;                                                            
  140.                         }                  
  141.                     }
  142.                 }
  143.             }
  144.          }   if(_L) goto L_x1; 
  145. }
  146.  
  147. //-------------------------------------------------------------------------------------------
  148.  
  149. int  Graph_OUT::Last_Slovo = 0;  
  150. int  Graph_OUT::         i = 0;
  151.  
  152. char Graph_OUT::base[2048];                                                                          
  153.  
  154. char *Graph_OUT::Last_addr = base;
  155.  
  156.  
  157. RECT Graph_OUT::rect;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement