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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
zigr0lf
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 8
#1

Графический интерфейс для приложения c++ - C++

17.11.2014, 21:07. Просмотров 3036. Ответов 21
Метки нет (Все метки)

Мне надо написать графический интерфейс к программе. Выглядеть должно примерно так: два поля для ввода данных (русский текст), одна кнопка. При нажатии на кнопку текст из первого поля попадает в массив char*, проходит преобразование и отображается по втором поле. Код преобразования я уже написал, надо сделать UI. До этого никогда не работал с графическим интерфейсом - только с консолью. С помощью чего можно проще всего реализовать мою задумку?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2014, 21:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Графический интерфейс для приложения c++ (C++):

графический интерфейс приложения - C++
Доброе время суток! Я недавно начал изучать GLFW и надеялся что с помощью него можно будет создавать граф. интерфейс (кнопки например), но...

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

Графический интерфейс для конвертера валют - C++
Помогите создать конвертер валют и графический интерфейс для него. всю голову поломала но ничего не получилось.

IDE для Windows, на которых можно сделать графический интерфейс программы - C++
Ребят, не подскажите, какие есть IDE для Windows, на которых можно сделать графический интерфейс программы.

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

Создать графический интерфейс (GUI) для игры "Крестики-нолики" - C++
#include <stdio.h> #include <string.h> char board={}; void clearscreen(void){ for(int i = 0; i<3; i++) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
17.11.2014, 22:07 #16
C++Builder - это не попытка, а реально работающий проект
Интересовался я этим проектом в своё время. 100% VCL от Delphi, только записано в стиле C++. Имена функций WinAPI не совпадают с документацией Microsoft, имена структур тоже. В общем только мучиться. Никаких преимуществ от C++ не выходит. Лучше тогда уж Delphi использовать.
Цитата Сообщение от Убежденный Посмотреть сообщение
GUI по описанию выше делается на WinAPI в 50 строк.
Для тех, кто знает как. Задавать координаты вручную не видя окна - это уже неудобно.
0
Убежденный
Системный программист
Эксперт С++
15545 / 7053 / 1114
Регистрация: 02.05.2013
Сообщений: 11,466
Завершенные тесты: 1
17.11.2014, 22:19 #17
Цитата Сообщение от programina Посмотреть сообщение
Но если компилятор у ТС не микрософтовский
zigr0lf написал: "Visual Studio 2012"

Цитата Сообщение от programina Посмотреть сообщение
то интерфейс будет квадратный как в windows 98
А манифесты для кого придумали ?

Цитата Сообщение от nmcf Посмотреть сообщение
Для тех, кто знает как. Задавать координаты вручную не видя окна - это уже неудобно.
А редакторы ресурсов для кого придумали ?
И вообще, вот, рождено за двадцать минут:
Код
// Resource.rc

#define ID_DLG_MAIN     101
#define ID_EDIT_FROM    1001
#define ID_EDIT_TO      1002
#define ID_BTN_CONVERT  1003

IDD_FORMVIEW DIALOGEX 0, 0, 186, 105
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_OVERLAPPEDWINDOW | WS_EX_APPWINDOW
CAPTION "Transform Text - Demo"
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
    EDITTEXT    ID_EDIT_FROM,6,18,174,12,ES_AUTOHSCROLL
    EDITTEXT    ID_EDIT_TO,6,54,174,12,ES_AUTOHSCROLL
    PUSHBUTTON  "&Convert",ID_BTN_CONVERT,66,84,50,14
    LTEXT       "Source Text",IDC_STATIC,6,6,40,8
    LTEXT       "Result",IDC_STATIC,6,42,21,8
END
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
// Program.cpp
 
#include <Windows.h>
#include <string>
#include <vector>
#include "resource.h"
 
 
 
std::wstring ConvertText(std::wstring const & Text)
{
    std::wstring RetValue;
 
    for (std::wstring::const_iterator it = Text.begin();
        it != Text.end();
        ++it)
    {
        RetValue += *it;
        RetValue += L"_";
    }
 
    return RetValue;
}
 
 
 
INT_PTR
_stdcall
MainDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
        {
            EndDialog(hWnd, 0);
        }
        break;
 
        case WM_COMMAND:
        {
            if (
                (BN_CLICKED     == HIWORD(wParam)) &&
                (ID_BTN_CONVERT == LOWORD(wParam))
                )
            {
                int TextLen = SendDlgItemMessageW(
                        hWnd,
                        ID_EDIT_FROM,
                        WM_GETTEXTLENGTH,
                        NULL,
                        NULL
                        );
 
                using namespace std;
 
                if (TextLen)
                {
                    ++TextLen; // Add space for null terminator.
                    vector<wchar_t> Buffer(TextLen);
                    SendDlgItemMessageW(hWnd, ID_EDIT_FROM, WM_GETTEXT, TextLen, (LPARAM)&Buffer[0]);
                    wstring const Result = ConvertText(&Buffer[0]);
                    SendDlgItemMessageW(hWnd, ID_EDIT_TO, WM_SETTEXT, NULL, (LPARAM)Result.c_str());
                }
            }
        }
        break;
    }
 
    return 0;
}
 
 
 
int _stdcall WinMain(
    HINSTANCE               hInstance,
    HINSTANCE               /* Unused */,
    LPSTR                   /* pCmdLine */,
    int                     /* fShow    */
    )
{
    DialogBoxParamW(hInstance, MAKEINTRESOURCEW(ID_DLG_MAIN), NULL, MainDlgProc, NULL);
    return EXIT_SUCCESS;
}
Добавляет подчеркивание к каждому символу исходной строки.
Как видите, абсолютно ничего, что требовало бы сторонних сред и
прочих гигабайтовых монстров
1
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
17.11.2014, 22:23 #18
Разве так можно делать? CreateWindow() уже не используется?
Цитата Сообщение от Убежденный Посмотреть сообщение
А редакторы ресурсов для кого придумали ?
А где редактор ресурсов в VS?
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 22:25 #19
Цитата Сообщение от Убежденный Посмотреть сообщение
А манифесты для кого придумали ?
Пробовала только на ХР. Про 7-ку ничего не знаю.
0
Убежденный
Системный программист
Эксперт С++
15545 / 7053 / 1114
Регистрация: 02.05.2013
Сообщений: 11,466
Завершенные тесты: 1
17.11.2014, 22:36 #20
Цитата Сообщение от nmcf Посмотреть сообщение
Разве так можно делать? CreateWindow() уже не используется?
DialogBoxParam/CreateDialogParam - это обертки над CreateWindow(Ex),
она так или иначе вызывается.

Цитата Сообщение от nmcf Посмотреть сообщение
А где редактор ресурсов в VS?
Solution Explorer, правой кнопкой мыши контекстное меню, далее "Add Resource...".
Насколько я знаю, только в express-версиях его нет.

Цитата Сообщение от programina Посмотреть сообщение
Пробовала только на ХР. Про 7-ку ничего не знаю.
Там те же самые механизмы.
2
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
17.11.2014, 22:43 #21
Честно говоря, обсуждение расстроило: откуда-то нарисовался OpenGL, еще и Qt добавили.
Убежденный меня опередил, но добавлю и свой вариант решения задачи (проект прикрепил).

Собственно, функция, в которой нужно делать правки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id) {
    case IDC_BUTTON1:
        
        int n = Edit_GetTextLength(GetDlgItem(hwnd, IDC_EDIT1));
        TCHAR *str = (TCHAR*) malloc(sizeof(TCHAR)*n);
        Edit_GetText(GetDlgItem(hwnd, IDC_EDIT1), str, n+1);
 
        /*
        ....
        TCHAR str содержит введенную строку. Здесь можно её обработать,
        после этого вывести во второй контрол функцией Edit_SetText
        ....
        */
 
        Edit_SetText(GetDlgItem(hwnd, IDC_EDIT2), str);
        free(str);
        break;
    }
}
На данный момент программа, при нажатии на кнопку, просто копирует текст из первого поля во второе. ТС, можешь обрабатывать текст как угодно
1
Вложения
Тип файла: rar CyberApp.rar (39.2 Кб, 2 просмотров)
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 22:44 #22
А я так сделаю (фиксированный массив вместо указателя на символ)
C++
#include <windows.h>
 
 
MSG             msg;
HWND            hwnd, edit1, edit2, button;
char            buff[1024];
bool            quit = false;
 
 
LRESULT CALLBACK MsgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
        case WM_QUIT:       PostQuitMessage(0); break;
        case WM_CLOSE:      PostQuitMessage(0); break;
        case WM_DESTROY:    PostQuitMessage(0); break;
        case WM_COMMAND:
            if (LOWORD(wParam)==777) {
                GetWindowText(edit1, buff, 1024);
                /* ЗДЕСЬ ВАША ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ */
                SetWindowText(edit2, buff);
            }
    }
    return DefWindowProc (hWnd, message, wParam, lParam);
}
 
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
    WNDCLASSEX wincl;
    wincl.hInstance     = hInst;
    wincl.lpszClassName = "app";
    wincl.lpfnWndProc   = MsgProc;
    wincl.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wincl.cbSize        = sizeof(WNDCLASSEX);
    wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm       = NULL;
    wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName  = NULL;
    wincl.cbClsExtra    = 0;
    wincl.cbWndExtra    = 0;
    wincl.hbrBackground = (HBRUSH)(1);
    RegisterClassEx(&wincl);
 
    hwnd = CreateWindowEx(WS_EX_APPWINDOW, "app", "...", WS_OVERLAPPEDWINDOW, 50, 50, 400, 400, HWND_DESKTOP, NULL, hInst, NULL);
    ShowWindow(hwnd, nCmdShow);
 
    edit1   = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("Edit"), TEXT(" "), WS_CHILD|WS_VISIBLE|WS_BORDER, 100, 20, 140, 25, hwnd, NULL, NULL, NULL);
    edit2   = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("Edit"), TEXT(" "), WS_CHILD|WS_VISIBLE|WS_BORDER, 100, 50, 140, 25, hwnd, NULL, NULL, NULL);
    button  = CreateWindow(TEXT("button"), TEXT("Кнопка"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 10, 80, 30, hwnd, (HMENU)777, hInst, NULL);
 
    while ( !quit ) {
        if ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
            if ( msg.message == WM_QUIT )
                quit = true;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else {
            Sleep(1);
        }
    }
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 22:44
Привет! Вот еще темы с ответами:

Графический интерфейс - C++
Привет,подскажите как в visual studio написать простенькую програмку с граф.интерфейсом? В консоле не интересно,хотелось бы как обычная...

Графический интерфейс. С++ - C++
Добрый день! Хочу сделать графический интерфейс для этого кода. #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;string.h&gt; ...

Графический интерфейс - C++
Назовите какие знаете кроме Qt. Желательно хорошие) Или есть смысл писать свою оболочку над WinAPI?

Графический интерфейс - C++
Парни может кто подсказать, как на Visual Studio сделать графический интерфейс???


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

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

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