Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Rybis
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 16
#1

MFC WinApi для создания интерфейса - C++

10.07.2014, 20:11. Просмотров 2203. Ответов 51
Метки нет (Все метки)

В общем я хочу научиться делать приложения простым языком форма с кнопочками и это приложение должно обращаться к винде залазить в файлы и тд. Слышал о функциях WinApi Как бы они решают мою проблему с обращением к винде а вот форму тоже в Api Делать? Да и в общем MFC Это упрощение winapi?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MFC WinApi для создания интерфейса (C++):

Реализация графического интерфейса пользователя в приложениях WinAPI. Ошибка default - C++
Сама программа: // фывфвфыв.cpp: определяет точку входа для приложения. // #include "stdafx.h" #include <windows.h> #include...

Какие еще есть способы создания визуальных приложений кроме WinApi? - C++
Здравствуйте, я так понимаю под Windows оконные приложения создаются на WinAPI. Хотел спросить есть ли другие инструменты для создания окон...

Получение атрибутов файла (а именно дату создания файла) без WinApi - C++
Здравствуйте, есть задача "получить дату создания файла", как это реализовать без WinApi с использованием консольного приложения на...

Литература для графического интерфейса - C++
Здравствуйте, у меня есть вопрос. Вот объясните, например я изучаю С++, но там консольные приложения, а как потом писать оконные? Как можно...

Подскажите библиотеку для создание графического интерфейса - C++
Погуглил .. много разных библиотек нагуглил. Сам никогда не использовал ничего, кроме стандартных тулкитов MSVS ... Нужна библиотека .. для...

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2014, 20:13 #2
Цитата Сообщение от Rybis Посмотреть сообщение
Да и в общем MFC Это упрощение winapi?
- MFC это высокоуровневая надстройка над АПИ, позвоялет экономить код, а главное время на разработку

Этапы создания MFC приложения
Мои MFC поделки
1
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
10.07.2014, 22:34 #3
Цитата Сообщение от Rybis Посмотреть сообщение
MFC. Это упрощение winapi?
Это "обертка" к WinAPI. Одна из многих, зато "искаропки". Для простых/стандартных интерфейсов более, чем достаточна.

MFC шаг за шагом
0
-=ЮрА=-
10.07.2014, 22:51
  #4

Не по теме:

Цитата Сообщение от gazlan Посмотреть сообщение
Для простых/стандартных интерфейсов более, чем достаточна.
- не только простых, подходит для проектирования интерфейсов любой сложности, в том числе и со скинами.

0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
10.07.2014, 23:45 #5
Да но кроме еще есть VCL и Qt и другие "окна", но начинать лучше с WinApi - хотя бы для понимания что оно такое и как оно выглядит.
0
abit
263 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 730
11.07.2014, 00:12 #6
Если ты хочешь делать простые (без нучиться) - то юзай Visual Basic или Delphi, если хочешь именно научиться, то однозначно Qt и лучше с линуксом )
0
Avazart
11.07.2014, 00:28
  #7

Не по теме:

Цитата Сообщение от abit Посмотреть сообщение
Если ты хочешь делать простые (без нучиться) - то юзай Visual Basic или Delphi, если хочешь именно научиться, то однозначно Qt и лучше с линуксом )
Кто сказал что нельзя учиться на Delphi ?
Везде свои нюансы, в том числе Qt

0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 00:42 #8
MFC? Ну, если только нужен диалог с двумя с половиной кнопками, да и это в этом случае я бы лучше WTL взял. Для чего-нибудь более сложного это очень, кхм, сомнительный выбор
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.07.2014, 00:57 #9
Цитата Сообщение от Voivoid Посмотреть сообщение
Для чего-нибудь более сложного это очень, кхм, сомнительный выбор
Немного больше, чем 2.5
2
Миниатюры
MFC WinApi для создания интерфейса  
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 01:32 #10
Цитата Сообщение от gazlan Посмотреть сообщение
Немного больше, чем 2.5
Ну да, пяток кнопочек, пяток textbox'ов и график ( ну еще куча табов с непонятно каким содержимым ). И? Что ты этим хотел сказать-то? Что на MFC при желании можно писать GUI приложения? Можно, никто с этим вроде не спорит. Что можно делать легко и непринужденно красивые и комплексные интерфейсы? Нет, не убедил ( то, что у тебя на скриншоте ты же надеюсь не считаешь чем-то таким выдающимся? ).
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.07.2014, 02:00 #11
Цитата Сообщение от Voivoid Посмотреть сообщение
красивые и комплексные интерфейсы
Многое, из того, чем пользуюсь (и выбрал, как лучшее в своем классе), сделано именно на MFC. Почтовый клиент, например. Или программа визуального сравнения файлов (на скриншоте). Для себя я тоже выбрал MFC.
0
Миниатюры
MFC WinApi для создания интерфейса  
Psilon
Master of Orion
Эксперт .NET
5891 / 4788 / 634
Регистрация: 10.07.2011
Сообщений: 14,406
Записей в блоге: 5
Завершенные тесты: 4
11.07.2014, 02:10 #12
gazlan, извиняюсь, что вмешиваюсь, но это не такое уж сложное приложение, опять же. Одна менюшка, десяток однотипных кнопочек и 2 richtextbox, которые из коробки поддерживают выделение и подсветку. Хотя может в MFC нету их, но контрол самый обычный.

Для сравнения: подобная формочка на WPF делается за час. От знакомых Qt-шников слышал, что там даже еще проще. Ну и рендер на видюхе как бонус.

MFC WinApi для создания интерфейса

ну а как изменить внешний вид кнопки (например, сделать её овальной), если честно, на MFC даже думать не хочу.. Если даже на каких-нибудь винформах это сводится к написанию своего юзерконтрола и переопределением миллиона методов/событий и тп, но на нижних уровнях там по-моему такой ад, что обычный ответ, который я слышал, "используйте другую технологию или используйте, что есть".
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.07.2014, 02:41 #13
Цитата Сообщение от Psilon Посмотреть сообщение
сделать её овальной
Проще всего, использовать картинку (обычно, так делается в играх). Но можно и самому нарисовать что угодно, перекрыв виртуальный метод Draw: любой формы, с градиентной заливкой итд. Полно примеров в Google.
Non-Rectangular Control Buttons
Circular Push Button
0
Миниатюры
MFC WinApi для создания интерфейса  
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 02:51 #14
Цитата Сообщение от gazlan Посмотреть сообщение
Проще всего, использовать картинку (обычно, так делается в играх). Но можно и самому нарисовать что угодно, перекрыв виртуальный метод Draw: любой формы, с градиентной заливкой итд. Полно примеров в Google.
Non-Rectangular Control Buttons
Circular Push Button
Кто бы сомневался, что можно. Понятное дело, что если очень захотеть, то все можно. Вопрос-то в удобстве. Писать кучу кода чтобы сделать овальную кнопку было нормально лет 15-20 назад. Но сейчас это дичь какая-то. Технологии давно уже скакнули вперед, какой смысл оставаться на месте
0
Psilon
Master of Orion
Эксперт .NET
5891 / 4788 / 634
Регистрация: 10.07.2011
Сообщений: 14,406
Записей в блоге: 5
Завершенные тесты: 4
11.07.2014, 03:01 #15
gazlan, класс.

Овальная кнопка на MFC:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
    // MyBtn.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "MyBtn.h"
     
    #include "MemDC.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
     
    /////////////////////////////////////////////////////////////////////////////
    // CMyBtn
     
    CMyBtn::CMyBtn()
    {
    }
     
    CMyBtn::~CMyBtn()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CMyBtn, CButton)
    //{{AFX_MSG_MAP(CMyBtn)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CMyBtn message handlers
     
    void CMyBtn::SetRound(void)
    {
    HRGN rgn;
    CRect wrect;
    GetClientRect(&wrect);
    SetWindowRgn( NULL, FALSE );
    rgn = CreateEllipticRgn( wrect.left, wrect.top,
    wrect.right, wrect.bottom );
     
    SetWindowRgn(rgn, TRUE);    
    }
     
    void CMyBtn::GradientFill (CDC* pDC, CRect* pRect)
    {
    CBrush* pBrush[64];
     
    for (int i=0; i<64; i++)
    {
    pBrush[i] = new CBrush (RGB (0, 0, 255 - (i * 4)));
    }
     
    int nWidth = pRect->Width ();
    int nHeight = pRect->Height ();
    CRect rect;
     
    for (i=0; iFillRect (&rect, pBrush[(i * 63) / nHeight]);
    }
    for (i=0; i<64; i++)
    delete pBrush[i];
    }
    void CMyBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    // TODO: Add your code to draw the specified item
    CRect Rect = lpDrawItemStruct->rcItem;
    CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    CRgn rgn;
    CRect rect;
    rect = Rect;
    UINT state = lpDrawItemStruct->itemState;
    CMemDC  *pMemDC = new CMemDC( pDC, Rect);
    CBrush hbr;
    hbr.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
    //pDC->FillRect( &Rect, &hbr);
    pMemDC->FillRect( &Rect, &hbr);
    hbr.DeleteObject();
    if( !(state & ODS_DISABLED) )
    {
    if (state & ODS_SELECTED)
    {
    CPen pen( PS_SOLID, 2, GetSysColor( COLOR_3DHILIGHT ) );
    CPen *pPen;
    CPoint start, end;
    start.x = rect.left;
    start.y = rect.bottom;  
    end.x = rect.right;
    end.y = rect.top;
    rect.left += 2;
    rect.top += 2;
    rect.right -= 2;
    rect.bottom -= 2;
    pPen = pMemDC->SelectObject( &pen );
    pMemDC->Arc( &rect, start, end );
    pMemDC->SelectObject( pPen );
    pen.DeleteObject();
    }
    }
    rgn.CreateEllipticRgn( rect.left, rect.top,
    rect.right, rect.bottom );
    pMemDC->SelectClipRgn( &rgn );  
    GradientFill( pMemDC, &Rect );
    SetRound();
    CString title;
    GetWindowText( title );
    if( title.GetLength() != 0 )
    {
    DrawWhiteText( pMemDC, &Rect, title );
    title.ReleaseBuffer();
    }
    delete pMemDC;
    }
    void CMyBtn::DrawWhiteText(CDC* pDC, CRect* pRect, CString& text )
    {
    CFont font;
    int nHeight = -16;
    font.CreateFont (nHeight, 0, 0, 0, FW_BOLD,
    TRUE, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS,
    CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH |
    FF_DONTCARE, "Times New Roman");
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB (255, 255, 255));
    CFont* pOldFont = pDC->SelectObject (&font);
    pDC->DrawText (text, -1, pRect, DT_SINGLELINE | DT_CENTER |
    DT_VCENTER);
    pDC->SelectObject (pOldFont);
    }

овальная кнопка на WPF (на Qt писал только в консоли, поэтому не могу судить насколько там удобно, но говорят, удобнее, чем WPF):
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
<Button x:Name="btn" Height="30" Width="100" Background="Transparent" BorderThickness="0" BorderBrush="Transparent">
  <Button.Content>
    <Border CornerRadius="5" Height="25" Width="95" Margin="0" BorderBrush="Black" BorderThickness="4" >
      <TextBlock Text="Click on Me" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Border>
  </Button.Content>
</Button>
это если использовать градиент. Если использовать просто "круглая кнопка", то одна строчка

имхо несколько различная сложность написания... (не говоря уже про умные слова вроде "сопровождаемость" и "читабельность").
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 03:01
Привет! Вот еще темы с ответами:

Нужна литература по созданию красивого интерфейса для приложений - C++
1.Посоветуйте какие-то книги по визуализации в С++, я начинающий программист, хочу научиться делать классное оформление программ) типа там...

Какие нужны библиотеки для создания читов для онлайн игр? - C++
Здравствуйте, недавно возник вопрос, А как собственно говоря делают читы для онлайн игр? Какие для них нужны библиотеки, какие методы...

MFC для новичков (Visual Studio) - C++
Всем привет! Позаимствовал некий учебник &quot;MFC SCHOOL&quot; из локальных просторов нашей университетской сети. Да простит меня автор! Был...

Литература для создания элементарного языка управляющих сигналов и интерпретатора для него - C++
Доброго времени суток! Подскажите, с чего начать при создании? Нужно придумать элементарный язык для задания управляющих сигналов и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.07.2014, 03:01
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru