2012г.
посвящена программированию в среде Visual Studio 2010 на языке программирования C++/CLI. Автор выделил наиболее типичные и актуальные задачи, которые обычно стоят перед программистами, и представил их готовые решения. Разобрано более сотни конкретных примеров и алгоритмов. Рассмотрены программы с экранной формой и элементами управления в форме. Приведены примеры чтения и записи файлов в долговременную память. Описана работа с графикой и буфером обмена. Приведено несколько подходов к выводу диаграмм. Рассмотрены манипуляции табличными данными, в том числе организация связанных таблиц. Показан принцип использования элемента управления WebBrowser для отображения различных данных, а также для программного заполнения веб-форм. Обсуждены примеры программирования с применением функций объектных библиотек систем MS Excel, MS Word, AutoCAD и MATLAB. Описано создание PDF-файлов. Разобраны вопросы обработки баз данных SQL Server и MS Access с помощью технологии ADO.NET. Представлено много различных авторских оригинальных решений задач программирования, которых читатель не сможет найти в интернете. Издание предназначено для начинающих программистов, программистов среднего уровня, а также для программистов, имеющих опыт разработки на других языках и желающих ускоренными темпами освоить новый для себя язык MS Visual C++/CLI.
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Что такое «хороший стиль программирования»? . . . . . . . . . . . . . . . . . . . . . . 12
Глава 1. Простейшие программы с экранной формой и элементами
управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Пример 1. Форма, кнопка, метка и диалоговое окно . . . . . . . . . . . . . . . . . . . . . 15
Пример 2. Событие MouseHover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Пример 3. Выбор нужной даты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Пример 4. Ввод данных через текстовое поле TextBox с проверкой типа
методом TryParse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Пример 5. Ввод пароля в текстовое поле и изменение шрифта . . . . . . . . . . . . . 29
Пример 6. Управление стилем шрифта с помощью элемента управления
CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Пример 7. Побитовый оператор «исключающее ИЛИ» . . . . . . . . . . . . . . . . . . . 32
Пример 8. Вкладки TabControl и переключатели RadioButton . . . . . . . . . . . . . . . 34
Пример 9. Свойство Visible и всплывающая подсказка ToolTip в стиле Balloon . . 37
Пример 10. Калькулятор на основе комбинированного списка ComboBox . . . . . . 40
Пример 11. Вывод греческих букв, символов математических операторов.
Кодовая таблица Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Глава 2. Программирование консольных приложений . . . . . . . . . . . . . . . . . . 47
Пример 12. Ввод и вывод в консольном приложении . . . . . . . . . . . . . . . . . . . . . 47
Пример 13. Вывод на консоль таблицы чисел с помощью
форматирования строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Пример 14. Вызов метода MessageBox::Show в консольном приложении.
Формат даты и времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Пример 15. Вызов функций Visual Basic из программы C++ . . . . . . . . . . . . . . . . 52
Пример 16. Замечательной структурой данных является словарь Dictionary . . . . 55
Глава 3. Инициирование и обработка событий мыши и клавиатуры . . . . . . 57
Пример 17. Координаты курсора мыши относительно экрана и элемента
управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Пример 18. Создание элемента управления Button «программным» способом
и подключение события для него . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Пример 19. Обработка нескольких событий одной процедурой . . . . . . . . . . . . . . 61
Пример 20. Калькулятор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Пример 21. Ссылка на другие ресурсы LinkLabel . . . . . . . . . . . . . . . . . . . . . . . . . 67
Пример 22. Обработка событий клавиатуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Пример 23. Разрешаем вводить в текстовое поле только цифры . . . . . . . . . . . . 71
Пример 24. Разрешаем вводить в текстовое поле цифры, а также разделитель
целой и дробной части числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Пример 25. Программно вызываем событие «щелчок на кнопке» . . . . . . . . . . . . 75
Глава 4. Чтение, запись текстовых и бинарных файлов,
текстовый редактор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Пример 26. Чтение/запись текстового файла в кодировке Unicode.
Обработка исключений try...catch . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Пример 27. Чтение/запись текстового файла в кодировке Windows 1251 . . . . . . 81
Пример 28. Простой текстовый редактор. Открытие и сохранение файла.
Событие формы Closing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Пример 29. Программа тестирования знаний студента по какому-либо
предмету . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Пример 30. Простой RTF-редактор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Пример 31. Программа ввода каталога координат (числовых данных)
из текстового файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Пример 32. Печать текстового документа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Пример 33. Чтение/запись бинарных файлов с использованием
потока данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Глава 5. Редактирование графических данных . . . . . . . . . . . . . . . . . . . . . . . 110
Пример 34. Простейший вывод отображения графического файла в форму . . . 110
Пример 35. Использование элемента PictureBox для отображения растрового
файла с возможностью прокрутки . . . . . . . . . . . . . . . . . . . . . . . . . 113
Пример 36. Рисование в форме графических примитивов (фигур) . . . . . . . . . . 115
Пример 37. Выбор цвета с использованием ListBox . . . . . . . . . . . . . . . . . . . . . . 116
Пример 38. Экранная форма с треугольником прозрачности . . . . . . . . . . . . . . . 120
Пример 39. Печать графических примитивов . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Пример 40. Печать BMP-файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Пример 41. Создание JPG-файла «на лету» и вывод его отображения
в форму . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Пример 42. Смена выведенного изображения с помощью обновления формы . . 125
Пример 43. Рисование в форме указателем мыши . . . . . . . . . . . . . . . . . . . . . . 127
Пример 44. Управление сплайном Безье . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Пример 45. Построение графика методами класса Graphics . . . . . . . . . . . . . . . 133
Глава 6. Управление буфером обмена с данными в текстовом
и графическом форматах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Пример 46. Буфер обмена с данными в текстовом формате . . . . . . . . . . . . . . . 138
Пример 47. Элемент управления PictureBox. Буфер обмена с растровыми
данными . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Пример 48. Имитация нажатия комбинации клавиш Alt+PrintScreen . . . . . . . . . 142
Пример 49. Запись содержимого буфера обмена в BMP-файл . . . . . . . . . . . . . . 143
Пример 50. Использование таймера Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Пример 51. Запись в файлы текущих состояний экрана каждые пять секунд . . . 146
Глава 7. Ввод и вывод табличных данных. Решение системы уравнений 149
Пример 52. Формирование таблицы. Функция String::Format . . . . . . . . . . . . . . 149
Пример 53. Форматирование Double-переменных в виде таблицы.
Вывод таблицы на печать. Поток StringReader . . . . . . . . . . . . . . . . 152
Пример 54. Вывод таблицы в Internet Explorer . . . . . . . . . . . . . . . . . . . . . . . . . 155
Пример 55. Формирование таблицы с помощью элемента управления
DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Пример 56. Отображение данных в форме хэш-таблицы с помощью элемента
DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Пример 57. Табличный ввод данных. DataGridView. DataTable. DataSet.
Инструмент для создания файла XML . . . . . . . . . . . . . . . . . . . . . . . 162
Пример 58. Решение системы линейных уравнений. Ввод коэффициентов
через DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Пример 59. Организация связанных таблиц . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Пример 60. Построение графика по табличным данным с использованием
элемента Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Глава 8. Элемент управления WebBrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Пример 61. Отображение HTML-таблиц в элементе WebBrowser . . . . . . . . . . . . 178
Пример 62. Отображение Flash-файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Пример 63. Отображение веб-страницы и ее HTML-кода . . . . . . . . . . . . . . . . . . 181
Пример 64. Программное заполнение веб-формы . . . . . . . . . . . . . . . . . . . . . . . 183
Пример 65. Синтаксический разбор веб-страницы без использования
элемента WebBrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Глава 9. Использование функций MS Word, MS Excel, AutoCAD
и MATLAB, а также создание PDF-файла . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Пример 66. Проверка правописания в текстовом поле с помощью
обращения к MS Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Пример 67. Вывод таблицы средствами MS Word . . . . . . . . . . . . . . . . . . . . . . . 194
Пример 68. Обращение к функциям MS Excel из Visual C++ 2010 . . . . . . . . . . . 197
Пример 69. Использование финансовой функции MS Excel . . . . . . . . . . . . . . . . 199
Пример 70. Решение системы уравнений с помощью функций MS Excel . . . . . . 202
Пример 71. Построение диаграммы средствами MS Excel . . . . . . . . . . . . . . . . . 205
Пример 72. Управление функциями AutoCAD из программы
на Visual C++ 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Пример 73. Вызов MATLAB из вашей программы на Visual C++ 2010 . . . . . . . . . 211
Пример 74. Решение системы уравнений путем обращения к MATLAB . . . . . . . . 213
Пример 75. Создание PDF-файла «на лету» с возможностью вывода
кириллических символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Пример 76. Вывод таблицы в PDF-документ . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Пример 77. Вывод графических данных в PDF-документ . . . . . . . . . . . . . . . . . . 224
Глава 10. Обработка баз данных с использованием технологии ADO.NET 229
Пример 78. Создание базы данных SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . 229
Пример 79. Отображение таблицы базы данных SQL Server на консоли . . . . . . 231
Пример 80. Редактирование таблицы базы данных MS Access в среде
Visual Studio без написания программного кода . . . . . . . . . . . . . . . 234
Пример 81. Чтение всех записей из таблицы БД MS Access на консоль
с помощью объектов классов Command и DataReader . . . . . . . . . . . 235
Пример 82. Создание базы данных MS Access в программном коде . . . . . . . . . . 237
Пример 83. Запись структуры таблицы в пустую базу данных MS Access.
Программная реализация подключения к БД . . . . . . . . . . . . . . . . . 239
Пример 84. Добавление записей в таблицу базы данных MS Access . . . . . . . . . 241
Пример 85. Чтение всех записей из таблицы базы данных c помощью
объектов классов Command, DataReader и элемента управления
DataGridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Пример 86. Чтение данных из БД в сетку данных DataGridView
с использованием объектов классов Command, Adapter и DataSet . . 245
Пример 87. Обновление записей в таблице базы данных MS Access . . . . . . . . . 247
Пример 88. Удаление записей из таблицы базы данных с использованием
SQL-запроса и объекта класса Command . . . . . . . . . . . . . . . . . . . . 250
Глава 11. Использование технологии LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Пример 89. Манипулирование массивом данных методами класса
Linq::Enumerable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Пример 90. Запрос к коллекции (списку) данных методами LINQ . . . . . . . . . . . 255
Пример 91. Группировка данных методом GroupBy . . . . . . . . . . . . . . . . . . . . . . 259
Пример 92. Создание XML-документа методами классов пространства имен
System::Xml::Linq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Пример 93. Извлечение значения элемента из XML-документа . . . . . . . . . . . . . 266
Пример 94. Поиск строк (записей) в XML-данных . . . . . . . . . . . . . . . . . . . . . . . 271
Пример 95. Получение производных XML-данных от XML-источника . . . . . . . . . 274
Пример 96. Организация поиска в наборе данных DataSet . . . . . . . . . . . . . . . . 276
Глава 12. Другие задачи, решаемые с помощью Windows Application . . . . 280
Пример 97. Проверка вводимых данных с помощью регулярных выражений . . . 280
Пример 98. Управление прозрачностью формы . . . . . . . . . . . . . . . . . . . . . . . . 283
Пример 99. Время по Гринвичу в полупрозрачной форме . . . . . . . . . . . . . . . . 284
Пример 100. Ссылка на процесс, работающий в фоновом режиме, в форме
значка в области уведомлений . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Пример 101. Нестандартная форма. Перемещение формы мышью . . . . . . . . . . 290
Пример 102. Воспроизведение звуков операционной системы . . . . . . . . . . . . . . 292
Пример 103. Проигрыватель Windows Media Player 11 . . . . . . . . . . . . . . . . . . . . 294
Пример 104. Воспроизведение только звуковых файлов . . . . . . . . . . . . . . . . . . 298
Создание инсталляционного пакета для распространения программы . . . . . . . . 302
Приложение. Описание архива с файлами примеров . . . . . . . . . . . . . . . . . . 303