Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: API или MFC  (Прочитано 7621 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zay
Гость
« : 13-05-2005 04:19 » 

Я начинающий в визуал С++
Писал QB и BORLAND 3.1  под DOS  VB под WIN
Не понятно с чего начинать  с  API или MFC
Вероятно и там и там есть свои прймушества.

Растолкуйте кому не в лом !

Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 13-05-2005 09:07 » 

zay, у нас на форуме "в лом" не бывает. Бывает только - нет времени. Поэтому извиняй за краткость.

MFC это просто враппер (ООП оболочка) для API. Те MFC без API существовать не может.
Поэтому если хочешь серъёзно этим заниматься, то без API не обойдёшься. если есть время начинай с него. А потом перейдёшь на MFC. С MFC просто быстрее и удобнее добиваться результатов. Так же хороший помошник в больших проектах, где используется большое количество элементов управления, окон. Ну в общем если знаешь разницу между ООП и прцедуральным программированием, то MFC предлагает тебе все прелести работы с объектами.

Приведу простой пример - это не весь класс, который имплементирован в MFC, а только идея (параметры ф-ций я тоже опускаю, где это не существенно):

Для создания окна в API используется ф-я CreateWindow(), которя возвращает хэндл созданного ею окна.
HWND hwnd = ::CreateWindow();
этот хэндл испльзуется потом в ф-ях доступа к окну - например ::SetWindowText(hwnd,"");

Те мне надо постоянно "помнить" этот хендл. Например делать его глобальным.

Теперь я воспользуюсь MFC:
Код:
class CWnd
{
public:
CWnd();
~CWnd();

void CreateWindow()
{
m_hwnd = ::CreateWindow();
}

void SetWindowText(CString stTitle)
{
::SetWindowText(m_hwnd, stTitle);
}

private:
HWND m_hwnd;
};

использование класса

Код:
CWnd wndMyFirstWnd;
wndMyFirstWnd.Create();
wndMyFirstWnd.SetWindowText("MyFirstWnd");

Знание API поможет легче понять, что происходит в глубинах MFC, как работает та или иная ф-я, класс. К тому же в случае необходимости, можно запросто использовать вызов API функций в MFC проектах.
Ну и самое главное - программирование под виндой - это программирование API - те использование ф-ций винды находящихся в системных длл - kernel, user, comctl, comdlg и тд. Другого не дано. Всё остальное (WTL, ATL) - оболочки призванные облегчить жизнь программиста. Пользователю в конечном итоге до лампочки на чём и как ты программишь.

И ещё одно - все исходники MFC открыты и поставляются в пакете VS. Те всегда можно посмотреть, что там происходит.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zay
Гость
« Ответ #2 : 14-05-2005 04:47 » 

Спасибо. Все ясно! Я очень долго не мог добиться ответа на этот вопрос.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines