Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Клас CWinApp




Функція WinMain() та клас CWinApp

При створенні проекту за допомогою “майстра” проектів, функція WinMain() явно не створюється. Вона захована в типовий об’єктний код заготовки програми. Такий підхід звільняє розробника від написання багатьох рядків рутинного додаткового коду для виконання стандартних кроків ініціалізації програми. Основні моменти в реалізації цієї функції розглядалися в попередніх лекціях. Тут слід зауважити, що у файлі реалізації основного класу програми CWinApp, створюється єдиний глобальний об’єкт цього класу з фіксованим іменем theApp, який і служить точкою входу в програму, а оболонка використовує це наперед визначене ім’я для запуску програми. В бібліотеці реалізовано функція, яка повертає вказівник на цей глобальний об’єкт.

 

CWinApp* pApp = AfxGetApp();

 

Клас CWinApp є базовим класом від якого утворюється обов’язковий об’єкт-програма для Windows на основі MFC, його ієрархія показана на рис. __.

 

 

Рис. __. Ієрархія класу CWinApp

 

Основними задачами цього класу є:

- ініціалізація основного вікна програми;

- створення та опитування черги повідомлень;

- ініціалізація основних змінних, відновлення та збереження налаштувань і оточення програми.

Розглянемо основні змінні- та функції-члени класу CWinApp.

Змінні-члени класу:

LPSTR m_pszAppName – назва програми (загальнодоступна).

HINSTANCE m_hInstance – копія логічного номеру (дескриптора) програми (загальнодоступна).

LPSTR m_lpCmdLine – копія вказівника на командний рядок програми (загальнодоступна).

int m_nCmdShow – копія параметру, що визначає первинне відображення вікна програми на екрані (загальнодоступна).

LPSTR m_pszExeName – назва завантажувального модуля програми без розширення (загальнодоступна).

LPSTR m_pszProfileName – назва INI-файлу програми (загальнодоступна).

LPCSTR m_pszRegistryKey – визначає повний ключ реєстру, де зберігається профіль налаштувань програми (загальнодоступна).

Додатково клас CWinApp на слідує від класу CWinThread змінну m_pMainWnd типу CWnd, яка зберігає вказівник на об’єкт основного вікна біжучого потоку. Windows автоматично завершує програму, якщо закривається основне вікно.

Функції ініціалізації програми:

void LoadStdProfileSetting(UINT nMaxNRU = _AFX_MRU_COUNT) – завантажує список останніх файлів, що використовувалися (_AFX_MRU_COUNT=4).

void SetRegistryKey(LPCSTR lpszRegistryKey) – заставляє програму зберігати первинні на лаштування в реєстрі Windows а не в INI-файлі. Ключ lpszRegistryKey, за яким зберігаються ініціалізаційні дані програми в реєстрі має формат:

 

HKEY_CURENT_USER\Software\<НазваОрганізації>\<Програма>\<Секція>\<Змінна>

 

void EnableShellOpen() – дозволяє запускати програму подвійним клацанням миші на файлі, що асоціюється з програмою.

void RegistryShellFileTypes() – реєструє в реєстрі Windows типи файлів, що асоціюється з програмою.

void ParseCommandLine(CCommandLineInfo& rCmdInfo) – здійснює синтаксичний та семантичний аналіз командного рядка, що передається програмі та поміщає результати в об’єкт rCmdInfo.

BOOL ProcessShellCommand(CCommandLineInfo& rCmdInfo) – обробляє дані (аргументи) командного рядка.

UINT GetProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int Def) – при успішному пошуку - повертає ціле число, що міститься полі lpszEntry секції lpszSection реєстру чи INI-файлу, інакше значення за замовчуванням (Def).

BOOL WriteProfileInt(LPCTSTR lpszSection,LPCTSTR lpszEntry,int nVal) – записує ціле число (nVal) у відповідне поле секції реєстру чи INI-файлу. Якщо ключова запис відсутня то вона створюється.

CString GetProfileString(…), BOOL WriteProfileString(…) – читання, запис символьного рядка.

BOOL GetProfileBinary(…), BOOL WriteProfileBinary(…) – читання, запис двійкового масиву даних.

Основні віртуальні функції керування програмою:

virtual BOOL InitInstance() – викликається кожен раз при ініціалізації нового (додаткового) екземпляру програми. Ії наповнення повністю визначається розробником (в базовому класі, вона порожня). У ній зчитуються ініціалізаційні дані, реєструється та створюється основне вікно програми та інше.

virtual BOOL ExitInstance() – викликається з методу Run() для завершення біжучого екземпляру програми. У ній реалізовується збереження налаштувань програми в реєстрі чи INI-файлі, звільняються виділені програмі ресурси (ресурси стандартних елементів створених MFC звільняється автоматично).

virtual BOOL Run() – запускає та обслуговує основний цикл повідомлень програми, доки не отримає повідомлення WM_QUIT. Якщо черга повідомлень порожня, то запускає віртуальну функцію OnIdle() для фонової обробки.

virtual BOOL OnIdle(LONG lCount) – викликається в циклі обробки повідомлень, коли черга повідомлень порожня. Вона обновлює команди користувацького інтерфейсу, перемальовує елементи керування та інше. При пере визначення цієї функції обов’язково необхідно викликати функцію CwinnApp::OnIdle() базового класу. lCount – лічильник вкладених викликів.

 




Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 400; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.