|
|
1.1 root 1: #include <windows.h>
2: #include <stdio.h>
3: #include "console.h"
4:
5: /*********************************************************************
6: * FUNCTION: demoCursor(HANDLE hConOut) *
7: * *
8: * PURPOSE: demonstrate GetConsoleCursorInfo, SetConsoleCursorInfo, *
9: * and SetConsoleCursorPosition. Show the current cursor *
10: * information, then have the cursor follow the mouse around *
11: * the screen. Shrink the cursor size when the user clicks *
12: * one button, and grow the cursor when he clicks the other. *
13: * *
14: * INPUT: the console output handle to write to and manipulate the *
15: * cursor for. *
16: *********************************************************************/
17:
18: void demoCursor(HANDLE hConOut)
19: {
20: BOOL bSuccess;
21: /* to set initial size and visibility of cursor */
22: CONSOLE_CURSOR_INFO cci;
23: INPUT_RECORD inputBuffer;
24: DWORD dwInputEvents;
25: HANDLE hStdIn;
26: CHAR szTemp[128];
27:
28: setConTitle(__FILE__);
29: myPuts(hConOut, "Current cursor information, as reported by\n"
30: "GetConsoleCursorInfo:\n");
31: bSuccess = GetConsoleCursorInfo(hConOut, &cci);
32: PERR(bSuccess, "GetConsoleCursorInfo");
33: sprintf(szTemp, "Cursor size (in percent maximum): %d", cci.dwSize);
34: myPuts(hConOut, szTemp);
35: sprintf(szTemp, "Cursor visible: %s", cci.bVisible ? "TRUE" : "FALSE");
36: myPuts(hConOut, szTemp);
37: myPuts(hConOut, "\nLet's use SetConsoleCursorPosition to have the console\n"
38: "cursor follow the mouse pointer around on the screen.\n"
39: "When the left mouse button is clicked, we'll use \n"
40: "SetConsoleCursorInfo to increase the cursor size by 10%.\n"
41: "When the right mouse button is clicked, the cursor size\n"
42: "will be decreased by 10%. To return, hit ESC.");
43: hStdIn = GetStdHandle(STD_INPUT_HANDLE);
44: for(;;)
45: {
46: /* get an input event */
47: bSuccess = ReadConsoleInput(hStdIn, &inputBuffer, 1, &dwInputEvents);
48: PERR(bSuccess, "ReadConsoleInput");
49: switch (inputBuffer.EventType)
50: {
51: case KEY_EVENT:
52: /* is it a key-down event? Is it an ESC char? If so return */
53: if (inputBuffer.Event.KeyEvent.bKeyDown &&
54: inputBuffer.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE)
55: return;
56: break;
57: case MOUSE_EVENT:
58: /* if the mouse moved draw the cursor at the mouse position */
59: if (inputBuffer.Event.MouseEvent.dwEventFlags == MOUSE_MOVED)
60: {
61: bSuccess = SetConsoleCursorPosition(hConOut,
62: inputBuffer.Event.MouseEvent.dwMousePosition);
63: PERR(bSuccess, "SetConsoleCursorPosition");
64: }
65: /* if the mouse is clicked, increase/decrease cursor size. */
66: /* Consider a double click a single click for this sample */
67: if (!inputBuffer.Event.MouseEvent.dwEventFlags || /* a click */
68: inputBuffer.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
69: {
70: /* is the leftmost mouse button is down? If so, increase cursor */
71: if (inputBuffer.Event.MouseEvent.dwButtonState ==
72: FROM_LEFT_1ST_BUTTON_PRESSED)
73: {
74: /* if cursor size grows > 100, wrap around to small size */
75: cci.dwSize = (cci.dwSize + 10) % 100 + 1;
76: bSuccess = SetConsoleCursorInfo(hConOut, &cci);
77: PERR(bSuccess, "SetConsoleCursorInfo");
78: }
79: /* is the rightmost button is down? */
80: if (inputBuffer.Event.MouseEvent.dwButtonState ==
81: RIGHTMOST_BUTTON_PRESSED)
82: {
83: /* if cursor size < 0, wrap around to large size */
84: cci.dwSize -= 10;
85: if ((int) cci.dwSize < 1)
86: cci.dwSize = 100;
87: bSuccess = SetConsoleCursorInfo(hConOut, &cci);
88: PERR(bSuccess, "SetConsoleCursorInfo");
89: }
90: /* other buttons will be ignored */
91: }
92: break;
93: } /* switch */
94: } /* while */
95: return;
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.