Страница 9 из 10 4. Я пытаюсь вызвать Windows API, но компилятор выдаёт undeclared identifier error (C2065). Почему? Заголовочные файлы Windows могут использоваться создания приложения для различных версий Windows начиная с Windows 95 и NT 3.51. Так получилось, что не все функции API присутствуют во всех версиях Windows. Так вот, чтобы компилятор не ругался а, соответственно и не ипытался использовать несуществующие в данной версии Windows функции API, необходимо использовать следующую систему деректив препроцессора. Директивы позволяют выборочно включать прототипы API: - WINVER: версия Windows (в добавление к 9x/Me и NT)
- _WIN32_WINDOWS: для Windows 9x/Me
- _WIN32_WINNT: для Windows NT
- _WIN32_IE: Общие элементы управления
По умолчанию Вы можете использовать только функции присутствующие в Windows 95, NT 3.51, и pre-IE3 common controls. Чтобы использовать API в более поздних версиях Windows, необходимо #define вышеописанные директивы перед включением различных Windows заголовков. Здесь полный список значений для данных макросов. 6. Я добавляю исходные файлы к проекту, а компилятор выдаёт ошибку "C1010: unexpected end of file while looking for precompiled header directive." Почему? По умолчанию, поекты Visual C++ используют прекомпилированные заголовки. Данная система компилирует большие заголовки только один раз при создании stdafx.cpp. В любом другом файле .CPP Вашего проекта необходимо добавить #include "stdafx.h" в самом начале. Компилятор ищет имя "stdafx.h", чтобы знать, где вставить прекомпилированную заголовочную информацию. Если возникает такая ошибка, то необходимо отключить прекомпилированные заголовки (precompiled headers). В опциях проекта, в закладке C/C++ выберите категорию Precompiled headers. Кликните радио кнопку Not using precompiled headers, а затем нажмите OK. 11. Как изменить курсор, когда он находится на моём окне? Обработайте сообщение WM_SETCURSOR , и вызовите функцию SetCursor() для изменения курсора. Обратите внимание, что когда окно принимает это сообщение, при каждом движении мышки, поэтому позаботьтесь, чтобы обработчик WM_SETCURSOR работает довольно быстро. 12. Как я могу скрыть или показать окно? Чтобы показать окно: ShowWindow ( hwndYourWindow, SW_SHOW ); Чтобы скрыть его: ShowWindow ( hwndYourWindow, SW_HIDE ); Так же существуют и другие флаги, которые позволяют максимизировать и минимизировать окна. Смотрите страницу ShowWindow() в MSDN. 13. Как разрешить или запретить элементы управления диалога (кнопки, окна редактирования, и т.д.)? Чтобы разрешить элемент управления: EnableWindow ( hwndYourControl, TRUE ); Чтобы запретить его: EnableWindow ( hwndYourControl, FALSE ); 14. Как заставить окно быть всегда на переднем плане? Выводим окно на передний план: SetWindowPos ( hwndYourWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); Возвращаем в обратное состояние: SetWindowPos ( hwndYourWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE ); 17. Как вывести текст в консольном приложении различными цветами? Каждый символ сонсольного приложения имеет свои аттрибуты, и Win32 консольные функции могут работать с аттрибутами двумя способами. SetConsoleTextAttribute() работает с символами, записанными в буфере, в то время как FillConsoleOutputAttribute() напрямую изменяет атрибуты символов. Следующие функции можно использовать для нормального, жирного и обратного текста (предполагается, что класс имеет обработчик консоли через вызов GetStdHandle()): void CMyConsoleClass::SetTextNormal() { SetConsoleTextAttribute ( m_hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); }
void CMyConsoleClass::SetTextBold() { SetConsoleTextAttribute ( m_hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); }
void CMyConsoleClass::SetTextReverse() { SetConsoleTextAttribute ( m_hConsole, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE ); } Обратите внимание, что нет никаких установок для мерцания и подчёркивания, так что Вам прийдётся проявить немного изобратательности, если Вы хотите полностью съэмулировать текстовые режимы ANSI или VT100 данным методом. |