// Устанавливает цвет символов и фона void SetColor(ConsoleColor text, ConsoleColor background) { SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text)); }
// Перемещает курсор в заданную позицию void GotoXY(int X, int Y) { COORD coord = { X, Y }; SetConsoleCursorPosition(hStdOut, coord); }
// Выводит заданную строку в заданную позицию void WriteStr(int X, int Y, const char *Str) { GotoXY(X, Y); cout << Str << flush; }
// Выводит заданный символ начиная с заданной позиции void WriteChar(int X, int Y, char Ch) { GotoXY(X, Y); cout << Ch; }
// Выводит указанное количество заданных символов начиная с заданной позиции void WriteChars(int X, int Y, char Ch, int Len) { GotoXY(X, Y); for (int i = 0; i < Len; i++) cout << Ch; }
// Меняет текстовые аттрибуты, начиная с заданной позиции void ChangeTextAttr(int X, int Y, ConsoleColor text, ConsoleColor background, unsigned len) { COORD coord = { X, Y }; DWORD dwDummy; FillConsoleOutputAttribute(hStdOut, (WORD)((background << 4) | text), len, coord, &dwDummy); }
ConsoleLib.h(Показать/Скрыть)
#ifndef __CONSOLELIB_H__ #define __CONSOLELIB_H__
#include <windows.h>
// Хендл консоли extern HANDLE hStdOut;
// Цвета enum ConsoleColor { Black = 0, Blue = 1, Green = 2, Cyan = 3, Red = 4, Magenta = 5, Brown = 6, LightGray = 7, DarkGray = 8, LightBlue = 9, LightGreen = 10, LightCyan = 11, LightRed = 12, LightMagenta = 13, Yellow = 14, White = 15 };
// Устанавливает цвет символов и фона void SetColor(ConsoleColor text, ConsoleColor background);
// Перемещает курсор в заданную позицию void GotoXY(int X, int Y);
// Выводит заданную строку в заданную позицию void WriteStr(int X, int Y, const char *Str);
// Выводит заданный символ начиная с заданной позиции void WriteChar(int X, int Y, char Ch);
// Выводит указанное количество заданных символов начиная с заданной позиции void WriteChars(int X, int Y, char Ch, int Len);
// Меняет текстовые аттрибуты, начиная с заданной позиции void ChangeTextAttr(int X, int Y, ConsoleColor text, ConsoleColor background, unsigned len);
#endif // __CONSOLELIB_H__
Автор: volvo 26.07.2010 2:22
Ну, описал, в смысле, добавил H-файл, дальше что? Хидер - он на то и хидер, что там хранятся только заголовки подпрограмм обычно (а сама библиотека может идти не в исходниках а в виде LIB-файла, например). То есть, ты сделал то, что необходимо компилятору, чтоб откомпилировать твой код, потому как из хидера компилятор знает, каковы прототипы функций, какие параметры должны передаваться в функцию, можно проверить, правильно ли ты передаешь, или нет. Слинковать программу без подключения cpp/lib или еще какого файла будет невозможно - линкер не найдет реализации функции, то есть, EXE-файл ты не получишь...
Автор: sheka 26.07.2010 3:58
Прочел какую-то странную книжечку http://lib.ru/CPPHB/cpptut.txt в которой куча ответов на разные мои вопросы . До этого их книгу я только по чистому си видел. Так вот, я понял, что #include просто "включает С++ный текст в программу", а *.h помогает определить совместимость типов. Т.е. в программу надо добавить 2 такие строчки:
#include "ConsoleLib.h" #include "ConsoleLib.cpp"
Но так как подключаемый файл срр один, то можно файл h и не подключать. Правильно?
Автор: volvo 26.07.2010 4:35
Цитата
Так вот, я понял, что #include просто "включает С++ный текст в программу", а *.h помогает определить совместимость типов.
Неправильно понял. Вот еще "грабли" С/С++ (это в продолжение темы об олимпиадах по программированию).
#include в любом случае вставляет содержимое файла в текст программы (т.е., считай, что вместо директивы #include <имя> у тебя стоит содержимое файла <имя>). А вот о том, что можно, а что нельзя подключать таким образом - разговор особый. Так подключаются только заголовочные *.H/*.HPP файлы. Ни в коем случае не подключай *.C/*.CPP файлы через #include.. Это может привести к совершенно непредсказуемым последствиям. Прими себе за правило: есть *.H/*.HPP - подключай include-ом. Есть *.C/*.CPP - добавляй в проект (в смысле, "Add to Project"). Разные C/CPP файлы должны компилироваться отдельно. А ты заставляешь компилятор считать, что у тебя есть один больщой CPP-файл. А внесешь в него исправления - что будет? Будет перекомпилироваться ВСЁ сразу. А если подключить к проекту два файла-исходника, то перекомпилируется только тот исходник, который изменялся, экономишь время компиляции. Да и вообще - дело не в экономии времени. Дело - в том, что нельзя делать балаган в программах - они не для этого написаны. Если в данном конкретном случае у тебя подключение обоих файлов решает проблему - это не значит, что такое решение правильное. Это плохой способ.
P.S. Страуструп - это, конечно, хорошо, но не для начинающего...
Автор: sheka 27.07.2010 3:23
Прикольно, впервые создал проэкт) Вроде само файлы *.о посоздавало и подключило.