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

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

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

Author24 — интернет-сервис помощи студентам
Имеется консольное приложение С++ , ума не приложу, как это визуализировать в окно или на форму.
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2019, 22:56
Ответы с готовыми решениями:

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

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

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

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

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

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 Кб, 34 просмотров)
1
413 / 148 / 48
Регистрация: 02.06.2016
Сообщений: 342
16.01.2019, 10:00 5
Проще создать 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
16.01.2019, 10:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2019, 10:00
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru