Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 102

Переделать имеющееся консольное приложение в форму

05.01.2019, 22:56. Показов 2299. Ответов 4

Студворк — интернет-сервис помощи студентам
Имеется консольное приложение С++ , ума не приложу, как это визуализировать в окно или на форму.
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
#include<cstdio>
#include<cmath>
 
#include<conio.h>
#include<windows.h>
 
#include<iostream>
#include<string>
#include <ctime>
#pragma warning(disable : 4996)
 
using namespace std;
 
 
int IsFlash(const string diskname)
{
 
    TCHAR buff[100];
    const int disknamesize = diskname.size();
    for (int i = 0; i < disknamesize; i++)
    {
        buff[i] = diskname[i];
    }
    buff[disknamesize] = 0;
 
    HANDLE hdisk = CreateFile(buff, 0, 0, 0, OPEN_EXISTING, 0, 0);
    if (hdisk == INVALID_HANDLE_VALUE)
    {
        return 0;
    }
 
    /// __int8 IsFlashDrive(HANDLE hdisk)
 
    BOOL ret_code;
    DISK_GEOMETRY sdg;
    DWORD BytesReturned, sdg_size, fret_val;
 
    fret_val = 0;
    sdg_size = sizeof(DISK_GEOMETRY);
    memset(&sdg, 0, sdg_size);
 
    ret_code = DeviceIoControl(hdisk, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &sdg, sdg_size, &BytesReturned, NULL);
    if (!ret_code)
    {
        return 0;
    }
 
    if (sdg.MediaType == RemovableMedia)
    {
        return 1;
    }
    else
    {
        return 0;
    }
 
}
 
 
 
string GETFileSystem(const string diskname)
{
 
    char NameBuffer[MAX_PATH];
    char SysNameBuffer[MAX_PATH];
    DWORD VSNumber;
    DWORD MCLength;
    DWORD FileSF;
 
    if (
        GetVolumeInformation(diskname.c_str(),
            NameBuffer,
            sizeof(NameBuffer),
            &VSNumber,
            &MCLength,
            &FileSF,
            SysNameBuffer,
            sizeof(SysNameBuffer)
        )
        )
    {
        return string(SysNameBuffer);
    }
 
}
 
long long int GETFreeSpace(const string diskname)
{
 
    ULARGE_INTEGER free;
    GetDiskFreeSpaceEx(diskname.c_str(), &free, NULL, NULL);
    return free.QuadPart;
 
}
 
 
const string NameTestFile = "dfwert753.dsq";
const int SizeTestFile = 1000000l;
 
int GetSpeedWrite(const string diskname)
{
 
    FILE* f1 = fopen((diskname + NameTestFile).c_str(), "wb");
 
    if (f1 == NULL)
    {
        cout << diskname + NameTestFile;
        getch();
    }
 
    char* buff = new char[SizeTestFile];
 
    time_t t1 = clock();
 
    fwrite(buff, 1, SizeTestFile, f1);
 
    time_t t2 = clock();
 
    fclose(f1);
 
    delete buff;
 
    remove((diskname + NameTestFile).c_str());
 
    return (SizeTestFile*CLOCKS_PER_SEC) / (t2 - t1);
 
}
 
 
int main()
{
 
    int isflash[26];
    for (int i = 0; i < 26; i++)
    {
        char dname[7] = { '\\','\\','.','\\','A' + i,':',0 };
        isflash[i] = IsFlash(dname);
        ///cout<<"\n"<<dname<<IsFlash(dname);
    }
 
    int summ = 0;
    for (int i = 0; i < 26; i++)
    {
        summ += isflash[i];
    }
 
    if (summ == 0)
    {
        cout << "\nFleshki ne obnarusheni";
        _getch();
        return 0;
    }
 
    int number[26];
 
    cout << "\nNashmite klavishy s imenem nushnoi fleshki:";
    for (int i = 0; i < 26; i++)
    {
        if (isflash[i])
        {
            char buff2[2] = { 'A' + i,0 };
            cout << "\n" << buff2;
        }
    }
 
    int v = _getch();
    if (v == 0)
    {
        v = _getch();
    }
 
    v = toupper(v);
 
    if (isflash[v - 'A'] == 0)
    {
        cout << "Vi vveli ne imia fleshki!";
        _getch();
        return 0;
    }
 
    ///getch();
 
    char buff3[4] = { v,':','\\',0 };
 
    const string diskname = string(buff3);
 
    SetConsoleOutputCP(1251);
    cout << "\nRezultati testirovania:";
    cout << "\nDisk: " << diskname;
    cout << "\nFileSystem: " << GETFileSystem(diskname);
    cout << "\nFreeSize: " << GETFreeSpace(diskname);
    cout << "\nSkorost zapisi: " << GetSpeedWrite(buff3);
 
    _getch();
 
    return 0;
 
}
Программа выдаёт свойства подключённой флэшки. Требуются кнопки "Тестировать", "Выход" для формы. Не знаю правда, в каком элементе должны быть свойства флешки на форме, мемо какой-нибудь или грид.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2019, 22:56
Ответы с готовыми решениями:

Переделать консольное приложение в оконное
Консольная игра лабиринт. Просьба переделать в оконное приложение, чтобы лабиринт рисовался на холсте. // labirint.cpp: определяет точку...

Как переделать форму в консольное приложение и получать параметры запуска
Ребята, очень нужна Ваша помощь! У меня есть ооочень большой проект на Делфи 10. В нём куча разных форм. Стоит задача: использовав...

Переделать консольное приложение в приложение Windows Forms
Дорогие друзья пожалуйста помогите в консольным приложением. У меня есть код, но он под консольное приложение, а мне надо для Windows Form....

4
134 / 26 / 8
Регистрация: 09.02.2017
Сообщений: 175
06.01.2019, 15:24
Тут несколько вариантов. Можете написать интерфейс с использованием WinAPI, но это достаточно долго и неудобно. Можете воспользоваться фреймворками для C++ для написания интерфейса (например, Qt).
0
45 / 33 / 15
Регистрация: 29.04.2014
Сообщений: 225
14.01.2019, 17:08
Помогу с вопросом, можете выслать проект на мою почту cerberus_02@bk.ru?
0
Just Do It!
 Аватар для XLAT
4202 / 2659 / 654
Регистрация: 23.09.2014
Сообщений: 9,003
Записей в блоге: 3
15.01.2019, 17:26
Не вникая в ваш код хочу поделиться общим алгоритмом, как делал я.
Вот очень простая технология создания формы к существующему нативному коду:

1. Создаем проект Windows Forms Application

2. CTRL+ALT+X
Добавляем на форму визуальные батоны.

3. Выставляем флажок /clr в настройках компилятора.

4. Далее будем прикручивать наш нативный код на старом стандартном плюсплюсе.
Разместим его в отдельном файле _my_native.h

5. Подключим его к файлу формы вот так:

C++
1
2
3
#pragma unmanaged
#include "_my_native.h"
#pragma managed
6. Ну, для примера пусть этот код(_my_native.h) будет вот такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class cmy_mative
{   
public:
    cmy_mative() : val(0){}
    int add(int _v)
    {   val += _v;
        return val;
    }
    int get()
    {   return val;
    }
private:
    int val;
}my_mative;
7. Класс cmy_mative возможно сделать потомком некоего нашего нативкласса
реализующего наши замороченные алгоритмы. Собсно сам cmy_mative есть должный
интерфейс для работы нашей формы с нативкодом.

8. Осталось привязать методы из cmy_mative к нашим визуальным батонам.

9. Компилим и вуаля, любуемся нашей формочкой.

Этот тест я сделал за 5 минут. Ничего сложного.

Сам тестовый проект vc++2010 c exe:
Вложения
Тип файла: rar forCyberFor.rar (26.4 Кб, 36 просмотров)
1
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
16.01.2019, 10:00
Проще создать WinAPI приложение на базе диалога.
Если у вас IDE без редактора ресурсов, можно скачать например такой.
Это позволит создать форму визуально. Но вовсе не обязательно, можете создавать файлы *.rc руками.
В примере кнопка Тестировать добавляет строку в ListBox.
resource.h:
C++
1
2
3
4
#define DLG_MAIN 1000
#define IDC_BTN1 1001
#define IDC_BTN2 1002
#define IDC_LST1 1003
resource.rc:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
 
LANGUAGE 25,1
 
DLG_MAIN DIALOGEX 0,0,153,84
CAPTION "Dialog"
FONT 8,"Ms Shell Dlg",0,0,0
STYLE WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_CENTER|DS_MODALFRAME|DS_SHELLFONT|DS_3DLOOK
BEGIN
  CONTROL "Тестировать",IDC_BTN1,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,12,63,54,15
  CONTROL "Выход",IDC_BTN2,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP,87,63,54,15
  CONTROL "",IDC_LST1,"ListBox",WS_CHILDWINDOW|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_HASSTRINGS|LBS_NOTIFY,12,9,129,45,WS_EX_CLIENTEDGE
END
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
#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#include "resource.h"
 
BOOL CALLBACK DlgMain(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hList;
 
    switch(uMsg)
    {
    case WM_INITDIALOG:
    {
        hList = GetDlgItem(hwndDlg, IDC_LST1);
    }
    return TRUE;
 
    case WM_CLOSE:
    {
        EndDialog(hwndDlg, 0);
    }
    return TRUE;
 
    case WM_COMMAND:
    {
        switch(LOWORD(wParam))
        {
        case IDC_BTN1:
            SendMessage(hList, LB_ADDSTRING, (WPARAM)0, (LPARAM)_T("Какой-то текст"));
            break;
 
        case IDC_BTN2:
            EndDialog(hwndDlg, 0);
            break;
        }
    }
    return TRUE;
    }
    return FALSE;
}
 
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    InitCommonControls();
    return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DlgMain);
}
Миниатюры
Переделать имеющееся консольное приложение в форму  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2019, 10:00
Помогаю со студенческими работами здесь

переделать консольное приложение табулирования в приложение с формой
Помогите пожалуйста переделать консольное приложение табулирования в приложение с формой,где результат выводится в мемо вот код...

Как переделать консольное приложение в приложение с GUI?
Есть приложение, работающее в консоли, захотелось сделать с графическим интерфейсом, уперся в непонимание) Объясните, как: а) заменить...

Переделать в консольное приложение
Всем привет.Кто может переделать в консольное приложение(delphi)? Знаю команды setlenth и т.д,но у меня не получается... Заранее...

Переделать консольное приложение в WindowsForms
Вот код про-мы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Переделать консольное приложение в WinForms
Доброго времени суток..Нужно было сделать приложение в консоли и Форме, в консоли сделала,в WinForms не получается. Пожалуйста,помогите...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru