#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);
}
Задание величины курсора
У меня такой вопрос - возможно ли устанавливать величину курсора в процессе выполения программы или величина курсора должна быть преопеределена в программе и менять эту величину можно только по средствам изменения програмнного кода?
Моя программа использует функции из ДЛЛ и одно из заданий - вычислить величину курсора - это я сделала, но возможно ли сделать так, що бы user сам решал какая величина курсора ему нужна?
Код:
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;
}
#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;
}