powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
10 сообщений из 10, страница 1 из 1
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761702
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Коллеги нужна помощь.
В общем сделал консольное приложение, которое хорошо работает.
Возникла необходимость преобразовать его в обычное.
Примеров в интернетах маловато.
Это были общие вопросы.

Более конкретные на примере с низу.
Создал простое приложение, но как оттуда вызвать обычный метод не смог найти.
1) В частности так и не понял как вызвать метод main при нажатии на кнопку Старт.
2) Как получить доступ к другому(которое работает в консольном приложении) ХХХХХХ.срр из Discipline.cpp.
3) Как реализовать так, чтобы выводилось в приложение, как метод
Код: plaintext
1.
cout

в консольном приложении.
Очень нужна помощь.
Код: plaintext
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.
// Discipline.cpp: определяет точку входа для приложения.
//
#include "stdafx.h"
#include "Discipline.h"
#include <stdio.h>
#include <iostream>

using namespace std;




#define MAX_LOADSTRING 100
#define IDC_MAIN_BUTTON	101
#define IDC_MAIN_EDIT	102
HWND hEdit;

// Глобальные переменные:
HINSTANCE hInst;								// текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];					// Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];			// имя класса главного окна

// Отправить объявления функций, включенных в этот модуль кода:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: разместите код здесь.
	MSG msg;
	HACCEL hAccelTable;
	
	// Инициализация глобальных строк
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_DISCIPLINE, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// Выполнить инициализацию приложения:
	if (!InitInstance (hInstance, nCmdShow))
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_DISCIPLINE));

	// Цикл основного сообщения:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	return (int) msg.wParam;
}



//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DISCIPLINE));
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_DISCIPLINE);
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcex);
}

//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

	hWnd = CreateWindow(
		szWindowClass,
		szTitle,
		WS_OVERLAPPEDWINDOW,
		//WS_CAPTION,
		CW_USEDEFAULT, CW_USEDEFAULT,
		500, 500,
		NULL,
		NULL,
		hInstance,
		NULL
	);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND	- обработка меню приложения
//  WM_PAINT	-Закрасить главное окно
//  WM_DESTROY	 - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	static HWND hButton, hListBox, hComboBox;


	switch (message)
	{
	case WM_CREATE:
		{
			// Create an edit box
		hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,
				L"EDIT",
				L"Введите число",
				WS_CHILD|WS_VISIBLE|
				ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL,
				50,
				100,
				100,
				24,
				hWnd,
				(HMENU)IDC_MAIN_EDIT,
				GetModuleHandle(NULL),
				NULL);

		//================Мои проделки
		HGDIOBJ hfDefault=GetStockObject(DEFAULT_GUI_FONT);
			SendMessage(hEdit,
				WM_SETFONT,
				(WPARAM)hfDefault,
				MAKELPARAM(FALSE,0));

			SendMessage(hEdit,
				WM_SETTEXT,
				NULL,
				(LPARAM)"");

			// Create a push button
			HWND hWndButton=CreateWindowEx(NULL,
				L"BUTTON",
				L"Старт",
				WS_TABSTOP|WS_VISIBLE|
				WS_CHILD|BS_DEFPUSHBUTTON,
				50,
				220,
				100,
				24,
				hWnd,
				(HMENU)IDC_MAIN_BUTTON,
				GetModuleHandle(NULL),
				NULL);
			//==============Мои проделки
			SendMessage(hWndButton,
				WM_SETFONT,
				(WPARAM)hfDefault,
				MAKELPARAM(FALSE,0));

		}
		break;


	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Разобрать выбор в меню:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: добавьте любой код отрисовки...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}

int main()
{
	//cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
    cout<<"Hello C++ Win32 DLL"<<endl;
    return 0;
}

...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761703
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень большая просьба, примеры подробнее.
То что для Вас очевидно, для меня темный лес.

А вообще рад любой помощи. ))
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761765
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно консольный вывод перенаправляют в Memo контрол или какой-нибудь EditBox с переносами строки.
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761790
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokВ общем сделал консольное приложение, которое хорошо работает.
Возникла необходимость преобразовать его в обычное.


Обычное -- это какое ? Оконное ?
Просто "обычное" -- это как правило наоборот консольное.

vadipokБолее конкретные на примере с низу.
Создал простое приложение, но как оттуда вызвать обычный метод не смог найти.
1) В частности так и не понял как вызвать метод main при нажатии на кнопку Старт.


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

Ещё лучше -- выделить функционал в отдельную функцию, и вызывать её из main
в консольном приложении или откуда угодно в оконном.


vadipok2) Как получить доступ к другому(которое работает в консольном приложении) ХХХХХХ.срр из Discipline.cpp.


Это непонятно.


vadipok3) Как реализовать так, чтобы выводилось в приложение, как метод cout
в консольном приложении.


Используй вместо cout другой поток, пишуший в память, например: std::stringstream

http://www.cplusplus.com/reference/sstream/basic_stringstream/

Замени переменную std::cout на экземпляр этого класса,
потом получай содержимое потока функцией .str().

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// stringstream::str
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream, std::stringbuf

int main () 
{
  std::stringstream ss;
  ss << "Example string";
  std::string s = ss.str();
  std::cout << s << '\n';
  return 0;
}
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761795
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok , если не возражаешь, я удалю приложенный код, он не имеет к обсуждаемой проблеме никакого отношения.
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761872
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, спасибо!

Не понимаю как сделать следующее.
Я наверно криво объясняю.
Это я создаю кнопку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
			// Create a push button
			HWND hWndButton=CreateWindowEx(NULL,
				L"BUTTON",
				L"Старт",
				WS_TABSTOP|WS_VISIBLE|
				WS_CHILD|BS_DEFPUSHBUTTON,
				50,
				220,
				100,
				24,
				hWnd,
				(HMENU)IDC_MAIN_BUTTON,
				GetModuleHandle(NULL),
				NULL);



Вот как сделать так, чтобы при нажатии на нее вызывалось следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
int main()
{
	//cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
    cout<<"Hello C++ Win32 DLL"<<endl;
    return 0;
}



Пример бы хоть один.
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761877
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Ещё лучше -- выделить функционал в отдельную функцию, и вызывать её из main
в консольном приложении или откуда угодно в оконном.


vadipok2) Как получить доступ к другому(которое работает в консольном приложении) ХХХХХХ.срр из Discipline.cpp.


Это непонятно.


ХХХХХХ.срр и есть выделенный функционал в отдельную функцию.
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokПример бы хоть один.
Код: sql
1.
case WM_COMMAND: if (HIWORD(WParam) == BN_CLICKED) Main();


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38761888
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivvadipokВ общем сделал консольное приложение, которое хорошо работает.
Возникла необходимость преобразовать его в обычное.


Обычное -- это какое ? Оконное ?


project WIN32
...
Рейтинг: 0 / 0
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
    #38762201
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovvadipokПример бы хоть один.
Код: sql
1.
case WM_COMMAND: if (HIWORD(WParam) == BN_CLICKED) Main();



Спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]