Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задание величины курсора

12K
27 марта 2007 года
Lyalya_ua
25 / / 24.11.2006
Добрый день!
У меня такой вопрос - возможно ли устанавливать величину курсора в процессе выполения программы или величина курсора должна быть преопеределена в программе и менять эту величину можно только по средствам изменения програмнного кода?
Моя программа использует функции из ДЛЛ и одно из заданий - вычислить величину курсора - это я сделала, но возможно ли сделать так, що бы user сам решал какая величина курсора ему нужна?
Код:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void DrawMenu(int); // выделение пункта меню
void (*pF)(); // указатель на функции из dll
void SetCursorPosition(int,int);// установка курсоа
void HideCursor(); //курсор не отображается
void ShowCursor(); //курсор отображается

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE),
       hStdIn  = GetStdHandle(STD_INPUT_HANDLE);

DWORD num;

LPSTR menu[5]=
 {
    "         MENU        ",
    "  1. GetFileType     ",
    "  2. GetCursorSize   ",
    "  3. Developer       ",
    "  4. Exit            "
 };


int main()
{
 HINSTANCE hDll;
 FARPROC pDll;
 hDll = LoadLibrary("end.dll\0"); // загрузка библиотеки

 COORD dwSize = {80,25};
 SetConsoleScreenBufferSize(hStdOut,dwSize);

 INPUT_RECORD input_record;
 short ch, cur_menu=1;
 DrawMenu(cur_menu);
 while(true) // цикл обработки нажатий от клавиатуры
 {
  BOOL isGetKeySymbol = false;
  while(!isGetKeySymbol)
  {
  ReadConsoleInput(hStdIn,&input_record,1,&num);
  if(input_record.EventType == KEY_EVENT)
  {
    if(input_record.Event.KeyEvent.bKeyDown == TRUE)
     {
      isGetKeySymbol = true;
      ch = input_record.Event.KeyEvent.wVirtualKeyCode;
     }
  }

  switch(ch)
  {
  case 38: // если нажатак клавиша вверх
      if (cur_menu==1) cur_menu = 4; else
      cur_menu--;
      DrawMenu(cur_menu);
    break;
  case 40: // если нажата клавиша вниз
      if (cur_menu==4) cur_menu = 1; else
      cur_menu++;
      DrawMenu(cur_menu);
    break;
  case 13: // если нажата клавиша "Enter"
      switch(cur_menu)
      {
       case 1:SetCursorPosition(0,0); // выбран первый пункт меню
              pDll = GetProcAddress(hDll,MAKEINTRESOURCE(2));
              pF = (void (*)())pDll;
              ShowCursor();
              pF();DrawMenu(1);break;
       case 2: pDll = GetProcAddress(hDll,MAKEINTRESOURCE(1)); // выбран второй пункт меню
               ShowCursor();
               pF = (void (*)())pDll; pF();break;
               HideCursor();
       case 3: HideCursor();MessageBox(NULL,"Babaryka Anya, FCS 207, 25th March 2007","Developer",MB_OK);break; // выбран 3-тий пункт меню
       case 4: HideCursor();FreeLibrary(hDll); exit(1);break; // выбран 4-тый пункт меню
      }
  default:
    break;
  }
  ch = 0;
  }
 }
}

void HideCursor()
{
 CONSOLE_CURSOR_INFO lpConsoleCursorInfo;
 GetConsoleCursorInfo(hStdOut,&lpConsoleCursorInfo);
 lpConsoleCursorInfo.bVisible = FALSE;
 SetConsoleCursorInfo(hStdOut,&lpConsoleCursorInfo);
}

void ShowCursor()
{
 CONSOLE_CURSOR_INFO lpConsoleCursorInfo;
 GetConsoleCursorInfo(hStdOut,&lpConsoleCursorInfo);
 lpConsoleCursorInfo.bVisible = TRUE;
 SetConsoleCursorInfo(hStdOut,&lpConsoleCursorInfo);

}


void DrawMenu(int i) // функция рисования меню, i - № пункта меню, который нужно выделить
{
 COORD coord={31,9};

 for (int j = 0; j < 5; j++)
 {
  if (j==i)
  {
    FillConsoleOutputAttribute(hStdOut,FOREGROUND_GREEN|FOREGROUND_INTENSITY,\
                               strlen(menu[j]),coord,&num);
  }
  else
    FillConsoleOutputAttribute(hStdOut,FOREGROUND_GREEN,strlen(menu[j]),coord,&num);

    WriteConsoleOutputCharacter(hStdOut,menu[j],strlen(menu[j]),coord,&num);
    coord.Y++;
 }
}

void SetCursorPosition(int x, int y) // установка курсора на экране
{
 COORD dwCursorPosition;
 dwCursorPosition.X = x;
 dwCursorPosition.Y = y;
 SetConsoleCursorPosition(hStdOut,dwCursorPosition);
}


DLL
Код:
#include <windows.h>
#include <conio.h>
#include <stdlib.h>

__declspec(dllexport) void FileTypeInfo ();
void FileTypeInfo (void)
{
    COORD coord;
    CONSOLE_SCREEN_BUFFER_INFO buffer;
    char buf[60],fName[100];
    DWORD result, num;
    HANDLE hFile, hStdOut, hStdIn;
    hStdOut = GetStdHandle (STD_OUTPUT_HANDLE);
    hStdIn = GetStdHandle (STD_INPUT_HANDLE);
   
 GetConsoleScreenBufferInfo(hStdOut,&buffer);
 for(int height=0;height<=buffer.dwSize.Y;height++)    
      for(int width=0;width<=buffer.dwSize.X;width++)
        {
            coord.Y=height;
            coord.X=width;
            FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),' ',1,coord,&num);
        }
 WriteConsole(hStdOut,"Input here filepath:",strlen("Input here filepath:"),&num,NULL);
 ReadConsole(hStdIn,LPSTR(buf),strlen(buf),&num,NULL);
 buf[num-2]=0;

hFile = CreateFile(buf,0,NULL,NULL,OPEN_EXISTING,NULL,NULL);

 if (hFile == INVALID_HANDLE_VALUE)
 {
  MessageBox(NULL,"File not opened","ERROR",MB_OK);
  GetConsoleScreenBufferInfo(hStdOut,&buffer);
  for(int height=0;height<=buffer.dwSize.Y;height++)       
   for(int width=0;width<=buffer.dwSize.X;width++)
    {
    coord.Y=height;
    coord.X=width;
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),' ',1,coord,&num);
    }
  return;
 }

 result = GetFileType(hFile);
 CloseHandle(hFile);

 if (result == FILE_TYPE_CHAR)
 {
  WriteConsole(hStdOut,"The specified file is a character file, typically an LPT device or a console.",strlen("The specified file is a character file, typically an LPT device or a console."),&num,NULL);
 }
 else
 if (result == FILE_TYPE_DISK)
 {
  WriteConsole(hStdOut,"The specified file is a disk file.",strlen("The specified file is a disk file."),&num,NULL);
 }
 else
 if (result == FILE_TYPE_PIPE)
 {
  WriteConsole(hStdOut,"The specified file is a socket, a named pipe, or an anonymous pipe.",strlen("The specified file is a socket, a named pipe, or an anonymous pipe."),&num,NULL);
 }
 else
 if (result == FILE_TYPE_REMOTE)
 {
  WriteConsole(hStdOut,"Unused.",strlen("Unused."),&num,NULL);
 }
 else
  WriteConsole(hStdOut,"Either the type of the specified file is unknown, or the function failed.",strlen("Either the type of the specified file is unknown, or the function failed."),&num,NULL);


_getch();
GetConsoleScreenBufferInfo(hStdOut,&buffer);
for (height=0;height<=buffer.dwSize.X;height++)
for (int width=0;width<=buffer.dwSize.X;width++)
{
    coord.Y = height;
    coord.X = width;
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),' ',1,coord,&num);
}
}
__declspec(dllexport)void CursorSizeInfo ();
void CursorSizeInfo ()
{
    char buf1[60] = "The size of the cursor is ";
    char size[10];
    HANDLE hStdOut;
    hStdOut = GetStdHandle (STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO lpCursorInfo;
    GetConsoleCursorInfo (hStdOut,&lpCursorInfo);
    _itoa(lpCursorInfo.dwSize,size,10);
    strcat(buf1,size);
    MessageBox(NULL,buf1,"Cursor Size",MB_OK);
    return;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог