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

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

Более конкретные на примере с низу.
Создал простое приложение, но как оттуда вызвать обычный метод не смог найти.
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
30.09.2014, 11:47
    #38761703
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
Очень большая просьба, примеры подробнее.
То что для Вас очевидно, для меня темный лес.

А вообще рад любой помощи. ))
...
Рейтинг: 0 / 0
30.09.2014, 12:17
    #38761765
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
Обычно консольный вывод перенаправляют в Memo контрол или какой-нибудь EditBox с переносами строки.
...
Рейтинг: 0 / 0
30.09.2014, 12:32
    #38761790
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
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
30.09.2014, 12:35
    #38761795
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
vadipok , если не возражаешь, я удалю приложенный код, он не имеет к обсуждаемой проблеме никакого отношения.
...
Рейтинг: 0 / 0
30.09.2014, 13:06
    #38761872
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
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
30.09.2014, 13:10
    #38761877
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преоброзование console WIN32 в project WIN32 (консольное приложение в обычное)
MasterZiv
Ещё лучше -- выделить функционал в отдельную функцию, и вызывать её из main
в консольном приложении или откуда угодно в оконном.


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


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


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


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


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


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



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


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