82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <ncursesw/curses.h>
 | |
| 
 | |
| #include <cstdio>
 | |
| #include <iostream>
 | |
| #include <string>
 | |
| 
 | |
| #define KEY_ESCAPE 0033
 | |
| 
 | |
| using namespace std;
 | |
| 
 | |
| /*
 | |
| | ╔ | WACS_D_ULCORNER | WACS_BDDB |
 | |
| | ╚ | WACS_D_LLCORNER | WACS_DDBB |
 | |
| | ╗ | WACS_D_URCORNER | WACS_BBDD |
 | |
| | ╝ | WACS_D_LRCORNER | WACS_DBBD |
 | |
| | ╣ | WACS_D_RTEE     | WACS_DBDD |
 | |
| | ╠ | WACS_D_LTEE     | WACS_DDDB |
 | |
| | ╩ | WACS_D_BTEE     | WACS_DDBD |
 | |
| | ╦ | WACS_D_TTEE     | WACS_BDDD |
 | |
| | ═ | WACS_D_HLINE    | WACS_BDBD |
 | |
| | ║ | WACS_D_VLINE    | WACS_DBDB |
 | |
| | ╬ | WACS_D_PLUS     | WACS_DDDD |
 | |
| */
 | |
| 
 | |
| int set_double_border(WINDOW* screen) {
 | |
|   return wborder_set(screen,
 | |
|                      WACS_D_VLINE /*left side*/,
 | |
|                      WACS_D_VLINE /*right side*/,
 | |
|                      WACS_D_HLINE /*top side*/,
 | |
|                      WACS_D_HLINE /*bottom side*/,
 | |
|                      WACS_D_ULCORNER /*top left corner*/,
 | |
|                      WACS_D_URCORNER /*top right corner*/,
 | |
|                      WACS_D_LLCORNER /*bottom left corner*/,
 | |
|                      WACS_D_LRCORNER /*bottom right corner*/);
 | |
| }
 | |
| 
 | |
| int main(int argc, char* argv[]) {
 | |
|   setlocale(LC_ALL, "");
 | |
|   char buffer[255] = {0};
 | |
|   WINDOW* pWindow = nullptr;
 | |
|   // Load ncurses and initialize stdscr.
 | |
|   initscr();
 | |
|   pWindow = stdscr;
 | |
|   // Enable raw mode to give us direct access to extra keys.
 | |
|   raw();
 | |
|   // Disable echoing characters as they are typed.
 | |
|   noecho();
 | |
|   // Enable keypad characters. (function keys, arrow keys, and numpad keys.)
 | |
|   keypad(pWindow, true);
 | |
|   // Remove the delay when pressing esc.
 | |
|   set_escdelay(0);
 | |
| 
 | |
|   int key = KEY_RESIZE;
 | |
|   while (key != KEY_ESCAPE) {
 | |
|     if (key == KEY_RESIZE) {
 | |
|       // Clear the screen.
 | |
|       werase(pWindow);
 | |
|       // Draw a box around the window with default chars.
 | |
|       set_double_border(pWindow);
 | |
|       // Display the event
 | |
|       mvwaddstr(pWindow, 2, 2, "Resized");
 | |
|       // Get the window width and height.
 | |
|       int width;
 | |
|       int height;
 | |
|       getmaxyx(pWindow, height, width);
 | |
|       // Display the width and height.
 | |
|       snprintf(buffer, sizeof(buffer), "width: %i, height: %i", width, height);
 | |
|       mvwaddstr(pWindow, 1, 2, buffer);
 | |
|     } else {
 | |
|       // Display the keycode of the key that was pressed in hex and octal.
 | |
|       snprintf(buffer, sizeof(buffer), "0x%04X %04o pressed", key, key);
 | |
|       mvwaddstr(pWindow, 2, 2, buffer);
 | |
|     }
 | |
|     wrefresh(pWindow);
 | |
|     key = wgetch(pWindow);
 | |
|   }
 | |
|   endwin();
 | |
| 
 | |
|   return 0;
 | |
| }
 |