Страница 1 из 1

Текстовый курсор в Win32-консоли, изменение параметров

Добавлено: 15 сен 2004, 16:59
BreakPointMAN
Есть такая функция под C++, называется она _setcursortype:
Syntax

#include <conio.h>
void _setcursortype(int cur_t);

Description

Selects cursor appearance.
Sets the cursor type to

_NOCURSOR Turns off the cursor
_NORMALCURSOR Normal underscore cursor
_SOLIDCURSOR Solid block cursor

Note: Do not use this function for Win32s or Win32 GUI applications.

Return Value

None.
Всё было бы прекрасно, если бы она работала... вернее, если работала бы корректно. В оконном режиме все замечательно: курсор меняет свой внешний вид, как положено, или отключается вовсе... Но при переходе в полноэкранный режим _setcursortype(_NOCURSOR) не срабатывает ВООБЩЕ: текстовый курсор никуда не исчезает, а остается таким же, каким был до вызова данной функции.

Протестировано на нескольких платформах (MS Win2k SP4/ MS WinXP SP1/ MS Win98 SE), под несколькими компиляторами (Borland Turbo C++ 3.0 / Borland C++ 5.02 / Borland C++ Builder 6.0) и с разными видеокарточками (S3 Savage 4 32MB/GeForce 2 MX 400 32MB). Результаты получаются интересные: при компиляции под DOS все работает корректно в любых комбинациях платформа/компилятор/видеокарта... при компиляции в Win32-console под всеми NT-подобными системами _setcursortype(_NOCURSOR) не имеет никакого эффекта, а под Win9x начинается другой глюк: так называемый normal cursor приподнимается и показывается не в нижней, а в верхней позиции знакоместа.

Быть может, кто-нибудь сталкивался с подобным???

Вот, например, текст программки для экспериментов:

Код: Выделить всё

#include <conio.h>

void main()
   {
    textmode(C80); window(1,1,80,25); clrscr();
    cprintf("*****");
    while(1)
       {
        _setcursortype(_NORMALCURSOR);
        getch();
        _setcursortype(_SOLIDCURSOR);
        getch();
        _setcursortype(_NOCURSOR);
        getch();
       }
   }

Добавлено: 15 сен 2004, 17:34
Eugie
Note: Do not use this function for Win32s or Win32 GUI applications.
Внимательнее читайте документацию :)

Добавлено: 15 сен 2004, 17:48
BreakPointMAN
Eugie писал(а):
Note: Do not use this function for Win32s or Win32 GUI applications.
Внимательнее читайте документацию :)
Я внимательно читаю документацию.
:arrow: Win32s - это интерфейс, свободно распространяемое подмножество API Win32, работающее под ОС Windows 3.x на процессорах 80386 и старше.
:arrow: Win32 GUI - это Win32-приложения с ГРАФИЧЕСКИМ интерфейсом пользователя (Graphic User Interface).

:!: а у меня Win32-консоль. Так что... внимательнее читайте вопрос... :wink:

Добавлено: 15 сен 2004, 17:58
Eugie
Согласен, но подозреваю, что и на Win32 Console это замечание распространяется, по факту ;)