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

Нужен пример интерфейса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как написать ехе распаковку в dev c++ http://www.cyberforum.ru/cpp-beginners/thread176898.html
Помогите новичку написать ЕХЕ распаковку от нуля до конца. Ещё ЕХЕ не разу не писал и плохо знаю С++ (очень надо)
C++ Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b] В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.) максимальный элемент массива; 2.) сумму элементов массива, расположенных до последнего положительного элемента. Сжать массив, удалив из него все элементы, модуль которых находится в интервале . Освободившиеся в конце массива элементы заполнить нулями. #include "stdafx.h" #include <conio.h> int main() { const... http://www.cyberforum.ru/cpp-beginners/thread176863.html
Массив заполняется случайными (не теми) элементами C++
Доброго времени суток! Определенными циклами задаются значения массива. Циклы исправны (проверял в Паскале). Проблема в том, что в массиве вместо нужных значений в некоторых местах возникают числа типа 8000000000. Как с этим бороться? #include <conio.h> #include <stdlib.h> #include <math.h> #include <stdio.h> #include <iostream.h> //************ int main() {
C++ Найти количество слов в строке с использованием библиотечных функций string.h
Найти количество слов в строке с использованием библиотечных функций string.h на языке С. Помогите Не дублируйте темы!
C++ Объявление vector'а членом класса http://www.cyberforum.ru/cpp-beginners/thread176819.html
Всем доброго времени суток. В общем идея такова. Есть класс class Vetv { public: Vetv(int a,int b, int *ves); Vetv(); int nFrom; int nTo;
C++ Сортировка массива по части его строк Народ объясните как сортировать массивы вот таким способом: |12345 5|1234 54|123 543|12 5432|1 54321| То есть поиск максимального и отправка в левую(отсортированную) часть массива. Как это сделать? подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
16.10.2010, 14:22     Нужен пример интерфейса
Классная ссылка. Ну вот тебе пару примеров.
Простое GUI-приложение на Qt:
C++
1
2
3
4
5
6
7
8
9
#include <QtGui>
 
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QWidget wgt;
    wgt.show();
    return app.exec();
}
Приложение WinAPI с меню и вызываемым немодальным диалоговым окном:
main.cpp
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
/*
 * Написать программу, в которой используетс диалог для работы со структурами
 * данных, определяющими списки. Ввод элементов данных осуществляется с помощью
 * окна редактирования EDIT_BOX. Состояние списка выводится в окно списка LIST_BOX.
 * элемент списка удаляется, если по нему дважды щелкнуть курсором мыши.
 * 10. очередь, int, немодальный
 */
#include <windows.h>
#include <cstdlib>
#include <cstdio>
#include "res.h"
#include "mqueue.h"
 
my::queue mq;
 
#define SIZE 80
WCHAR szStr[SIZE + 1];
bool verbose;
 
// Оконная процедура
LRESULT CALLBACK WindowProc(
    HWND, // Дескриптор окна
    UINT, // Сообщение
    WPARAM, LPARAM); // Дополнительные данные
 
// Оконная процедура диалога
BOOL CALLBACK DialProc(HWND, UINT, WPARAM, LPARAM);
 
// Является ли строка целым числом
bool isnumber(const WCHAR* szStr, bool sign = false, bool null = true);
 
HINSTANCE hinst;
HWND hdlg = NULL;   // Дескриптор диалога
bool dlgStarted = false;
 
// Главная фукнция приложения
int WINAPI WinMain(
    HINSTANCE hthisinst,    // Текущий экземпляр приложения
    HINSTANCE hprevinst,    // Предыдущий экземпляр (всегда NULL)
    LPSTR lpszargs,         // Параметры командной строки
    int nwinmode)           // Способ показа окна
{
    hinst = hthisinst;
    verbose = true;
 
    HWND hwnd;  // Дескриптор окна
    HACCEL haccel; // Дескриптор акселераторов
    LPCWSTR szWindowClass = L"mwnd"; // Имя класса окна
    LPCWSTR szWindowTitle = L"ЧМВ лабораторная работа №3"; // Заголовок окна
    LPCWSTR szWindowMenu = L"MAINMENU"; // Имя меню
    LPCWSTR szWindowAccs = L"ACCS"; // Имя акселераторов
    LPCWSTR szWindowDial = L"DIAL"; // Имя диалога
    WNDCLASSEX wnd; // Класс (структура) окна
    MSG msg; // Структура сообщения
 
    wnd.cbSize = sizeof(WNDCLASSEX);    // Размер окна
    wnd.style = CS_HREDRAW | CS_VREDRAW;    // Стиль окна
    wnd.lpfnWndProc = WindowProc;   // Оконная процедура
    // Число зарезервированных доп. байтов после структуры окна
    wnd.cbClsExtra = 0; 
    // Число зарезервированных доп. байтов после экземпляра окна
    wnd.cbWndExtra = 0; 
    wnd.hInstance = hthisinst; // Дескриптор экземпляра окна
    wnd.hIcon = LoadIcon(hthisinst, IDI_APPLICATION); // Иконка приложения
    wnd.hCursor = LoadCursor(NULL, IDC_ARROW); // Указатель мыши
    // Дескриптор кисти фона
    wnd.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
    wnd.lpszMenuName = szWindowMenu; // Имя ресурса меню
    wnd.lpszClassName = szWindowClass; // Имя класса окна
    wnd.hIconSm = LoadIcon(wnd.hInstance, IDI_APPLICATION); // Маленькая иконка
    
    if(!RegisterClassEx(&wnd)) // Попытка регистрации класса окна
    {
        MessageBox( // Вывод модального сообщения
            NULL, // Дескриптор окна-владельца
            L"Не удалось зарегестрировать окно", // Текст сообщения
            L"Ошибка", // Заголовок сообщения
            MB_OK | MB_ICONERROR); // Содержимое и поведение окна сообщения
 
        return EXIT_FAILURE;
    }
 
    hwnd = CreateWindow( // Функция создания окна
        szWindowClass,
        szWindowTitle,
        WS_OVERLAPPEDWINDOW, // Стиль окна
        CW_USEDEFAULT, CW_USEDEFAULT, // Начальная позиция
        400, 300, // Начальные размеры
        // Дескриптор родительского окна
        HWND_DESKTOP, // Рабочий стол (= NULL)
        NULL, // Дескриптор меню
        hthisinst,
        NULL);
 
    if(!hwnd) // Если не удалось создать окно
    {
        MessageBox(NULL, L"Не удалось создать окно",
            L"Ошибка", MB_OK | MB_ICONERROR);
 
        return EXIT_FAILURE;
    }
 
    // Загрузка акселераторов
    haccel = LoadAccelerators(hthisinst, szWindowAccs);
    if(!haccel)
    {
        MessageBox(NULL, L"Не удалось загрузить горячие клавиши",
            L"Ошибка", MB_OK | MB_ICONERROR);
 
        return EXIT_FAILURE;
    }
 
    // Показ и обновление окна
    ShowWindow(hwnd, nwinmode);
    UpdateWindow(hwnd);
 
    // Цикл сообщений
    while(GetMessage( // Получение сообщений
        &msg, // Структура сообщения
        NULL, // Дескриптор окна, от которого получаются сообщения
        // Минимальные и максимальные значения, которые могут быть получены
        0, 0)) 
    {
        // Трансляция горячих клавиш
        if((!IsDialogMessage(hdlg, &msg)) &&
            (!TranslateAccelerator(hwnd, haccel, &msg)))
        {
            // Трансляция виртуальных клавиш в символьные сообщения
            TranslateMessage(&msg);
            // Отправка сообщений оконной процедуре
            DispatchMessage(&msg);
        }
    }
 
    return (int) msg.wParam;
}
 
// Оконная процедура
LRESULT CALLBACK WindowProc(
    HWND hwnd, UINT message,
    WPARAM wparam, LPARAM lparam)
{
    static LPCWSTR szDialogName = L"DIAL";
 
    switch(message)
    {
 
    case WM_CLOSE: // Закрытие окна
        // Запрашиваем подтверждение пользователя
        if((!verbose) || (MessageBox(hwnd, L"Вы уверены?", L"Завершение работы...",
            MB_YESNO | MB_ICONQUESTION) == IDYES)) 
            // ... и посылаем сообщение WM_DESTROY
            SendMessage(hwnd, WM_DESTROY, 0, 0);
        break;
 
    case WM_COMMAND: // Команда
        switch(LOWORD(wparam))
        {
 
        case IDM_HELP_ABOUT: // О программе
            MessageBox(hwnd, L"Человеко-машинное взаимодействие\n"
                L"Лабораторная работа №3\n"
                L"Диалоговые окна\n\nМаксимов С.Б.", 
                L"О программе", MB_OK | MB_ICONASTERISK);
            break;
 
        case IDM_FILE_EXIT: // Выход из программы
            SendMessage(hwnd, WM_CLOSE, 0, 0);
            break;
 
        case IDM_FILE_DIALOG: // Создание диалога
            if(dlgStarted)
            {
                if(verbose)
                    MessageBox(hwnd, L"Уже запущено одно диалоговое окно!",
                        L"Ошибка", MB_OK | MB_ICONERROR);
            }
            else
            {
                hdlg = CreateDialog(hinst, szDialogName, hwnd, (DLGPROC) DialProc);
                dlgStarted = true;
            }
            break;
 
        case IDM_OPTIONS_VERBOSE:
            verbose = !verbose;
            break;
        }
        break;
 
    case WM_DESTROY: // Уничтожение окна
        // Отправка сообщения WM_QUIT с кодом выхода 0
        PostQuitMessage(EXIT_SUCCESS); 
        break;
 
    default: // Обработка в оконной процедуре по умолчанию
        return DefWindowProc(hwnd, message, wparam, lparam);
    }
 
    return 0;
}
 
// Является ли строка - числом
bool isnumber(const WCHAR* szStr, bool sign, bool null)
{
    if(*szStr == L'-')
    {
        if(sign)
            return false;
        else
            return isnumber(++szStr, true, null);
    }
    if(*szStr == L'0')
    {
        if(null)
            return false;
        else
            return isnumber(++szStr, true, false);
    }
    while(*szStr)
        if(iswdigit(*szStr++))
            return isnumber(szStr, true, false);
        else
            return false;
 
    return true;
}
 
// Оконная процедура диалога
BOOL CALLBACK DialProc(
    HWND hwnd, UINT message,
    WPARAM wparam, LPARAM lparam)
{
    switch(message)
    {
    case WM_INITDIALOG: // При загрузке диалогового окна
        // Печать всех имеющихся в очереди значений
        mq.print(szStr, SIZE, hwnd, IDD_LB1);
        return TRUE;
 
    case WM_COMMAND: // Обработка команд
        switch(LOWORD(wparam))
        {
 
        case IDD_LB1: // Сообщение от от ListBox
            if(HIWORD(wparam) == LBN_DBLCLK) // Двойной клик
            {
                // Удаление записи
                UINT i = SendDlgItemMessage(hdlg, IDD_LB1,
                    LB_GETCURSEL, 0, 0L);
                int val = mq.erase(i);
                if(verbose)
                {
                    _snwprintf(szStr, SIZE,
                        L"Удален %u-ый элемент - %d", i, val);
                    MessageBox(hdlg, szStr, L"Выбор сделан", MB_OK);
                }
                SendDlgItemMessage(hdlg, IDD_LB1,
                    LB_DELETESTRING, i, 0L);
            }
            break;
 
        case IDD_REMOVE: // Удаление элемента
            if(!mq.empty())
            {
                int val = mq.dequeue();
                if(verbose)
                {
                    _snwprintf(szStr, SIZE, 
                        L"Удален элемент из головы очереди - %d", val);
                    MessageBox(hdlg, szStr, L"Удаление", MB_OK);
                }
                SendDlgItemMessage(hdlg, IDD_LB1,
                    LB_DELETESTRING, 0, 0L);
            }
            else if(verbose)
                MessageBox(hdlg, L"Очередь пуста", L"Ошибка",
                    MB_OK | MB_ICONERROR);
            break;
 
        case IDD_CLEAR: // Очистка ListBox
            while(!mq.empty())
            {
                mq.dequeue();
                SendDlgItemMessage(hdlg, IDD_LB1,
                    LB_DELETESTRING, 0, 0L);
            }
            wcscpy(szStr, L"\0");
            SetDlgItemText(hdlg, IDD_EB1, szStr);
            break;
 
        case IDD_INPUT: // Ввод записи
            GetDlgItemText(hdlg, IDD_EB1, szStr, SIZE);
 
            if((*szStr) && (isnumber(szStr)))
            {
                int num = _wtoi(szStr);
                if(verbose)
                {
                    _snwprintf(szStr, SIZE, 
                        L"Введен новый элемент - %d", num);
                    MessageBox(hdlg, szStr, L"Ввод", MB_OK);
                }
                SendDlgItemMessage(hdlg, IDD_LB1, 
                    LB_ADDSTRING, 0, (LPARAM) szStr);
                mq.enqueue(num);
            }
            else if(verbose)
            {
                WCHAR msg[SIZE + 1];
                _snwprintf(msg, SIZE, 
                    L"\'%s\' не является целым числом", szStr);
                MessageBox(hdlg, msg, L"Ошибка", 
                    MB_OK | MB_ICONERROR);
            }
            wcscpy(szStr, L"\0");
            SetDlgItemText(hdlg, IDD_EB1, szStr);
            break;
 
        case IDD_CLOSE: // Закрытие диалогового окна
            DestroyWindow(hdlg);
            dlgStarted = false;
            hdlg = NULL;
            break;
        }
        return TRUE;
        break;
    }
    return FALSE;
}

res.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef RES_H
#define RES_H
 
#include <windows.h>
 
#define IDM_FILE_DIALOG     100
#define IDM_FILE_EXIT       101
#define IDM_OPTIONS_VERBOSE 150
#define IDM_HELP_ABOUT      200
 
#define IDD_LB1     300
#define IDD_EB1     301
#define IDD_INPUT   350
#define IDD_CLEAR   351
#define IDD_CLOSE   352
#define IDD_REMOVE  353
 
#endif // RES_H

res.rc
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
#include "res.h"
 
MAINMENU MENU
{
    POPUP "&Файл"
    {
        MENUITEM "&Диалог" IDM_FILE_DIALOG
        MENUITEM SEPARATOR
        MENUITEM "&Выход" IDM_FILE_EXIT
    }
    POPUP "&Опции"
    {
        MENUITEM "&Выводить сообщения" IDM_OPTIONS_VERBOSE
    }
    POPUP "&Помощь"
    {
        MENUITEM "&О программе" IDM_HELP_ABOUT
    }
}
 
ACCS ACCELERATORS
{
    VK_F1, IDM_HELP_ABOUT, VIRTKEY
    VK_F4, IDM_FILE_EXIT, VIRTKEY, ALT
    VK_F5, IDM_FILE_DIALOG, VIRTKEY
}
 
DIAL DIALOG 25, 25, 190, 100
CAPTION "Ввод и вывод"
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
{
    PUSHBUTTON "Завершение диалога", IDD_CLOSE, 10, 80, 80, 12,
        WS_CHILD | WS_VISIBLE | WS_TABSTOP
 
    PUSHBUTTON "Удалить", IDD_REMOVE, 10, 45, 80, 12,
        WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER
 
    PUSHBUTTON "Очистка", IDD_CLEAR, 10, 60, 80, 12,
        WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER
 
    DEFPUSHBUTTON "Ввод", IDD_INPUT, 10, 30, 80, 12,
        WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER
 
    EDITTEXT IDD_EB1, 10, 10, 80, 12,
        WS_CHILD | WS_VISIBLE | 
        WS_TABSTOP | WS_BORDER
 
    LISTBOX IDD_LB1, 100, 10, 80, 82,
        WS_CHILD | WS_VISIBLE | WS_VSCROLL |
        WS_TABSTOP | WS_BORDER | LBS_NOTIFY
}

mqueue.h
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
#ifndef LIST_H
#define LIST_H
 
#include <cstdlib>
#include <windows.h>
 
namespace my
{
    class queue
    {
 
    public:
 
        queue();
        queue(const queue& rhs);
        ~queue();
 
        void enqueue(int item);
        int dequeue();
        int erase(size_t index);
 
        void print(LPWSTR szStr, UINT size, HWND hwnd, UINT id);
        bool empty();
 
    private:
 
        struct node
        {
            int     data;
            node*   next;
            node(int item)
                : data(item), next(NULL)
            {
            }
        };
        
        node*   head;
        node*   tail;
    };
}
#endif // LIST_H

mqueue.cpp
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
#include "mqueue.h"
 
#include <cstdio>
 
namespace my
{
    queue::queue()
        : head(NULL), tail(NULL)
    {
    }
 
    queue::queue(const queue& rhs)
        : head(NULL), tail(NULL)
    {
        node* currnode = rhs.head;
        while(currnode)
        {
            enqueue(currnode->data);
            currnode = currnode->next;
        }
    }
 
    void queue::enqueue(int item)
    {
        node* newnode = new node(item);
        if(!tail)
            head = newnode;
        else
            tail->next = newnode;
        tail = newnode;
    }
 
    queue::~queue()
    {
        while(head)
        {
            node* delnode = head;
            head = head->next;
            delete delnode;
        }
        tail = NULL;
    }
 
    int queue::dequeue()
    {
        node* delnode = head;
        head = head->next;
        if(!head)
            tail = NULL;
        int retval = delnode->data;
        delete delnode;
        delnode = NULL;
        return retval;
    }
 
    int queue::erase(size_t index)
    {
        int retval;
        if(!index)
            retval = dequeue();
        else
        {
            node* delnode = head->next;
            node* prevnode = head;
            while(--index)
            {
                prevnode = delnode;
                delnode = delnode->next;
            }
            retval = delnode->data;
            prevnode->next = delnode->next;
            delete delnode;
            delnode = NULL;
 
        }
 
        return retval;
    }
 
    void queue::print(LPWSTR szStr, UINT size, HWND hwnd, UINT id)
    {
        node* currnode = head;
        while(currnode)
        {
            _snwprintf(szStr, size, L"%d", currnode->data);
            SendDlgItemMessage(hwnd, id, 
                LB_ADDSTRING, 0, (LPARAM) szStr);
            currnode = currnode->next;
        }
    }
 
    bool queue::empty()
    {
        return head == NULL;
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru