миграция кода из Turbo C++ в Visual С++

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

миграция кода из Turbo C++ в Visual С++

Сообщение i_van »

Надо перекомпилировать старое приложение в Visual С++. Можно ли это автоматизировать. А если нет, то есть ли в Visual С++ аналог <graphics.h>

Regards
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Конечно. WinAPI
(ред.) ПС. Regards
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

Сообщение i_van »

vg писал(а):Конечно. WinAPI
(ред.) ПС. Regards
За ответ спасибо, хотя прояснил он мало :? . Спрошу по-другому. Позволяет ли WinAPI автоматически перегнать код из Turbo С++ в Visual C++.

Если можно то на простом примере рисующем линию в консольном окне, что-то вроде этого:

Код: Выделить всё

#include  <graphics.h>
#include  <stdlib.h>
#include  <stdio.h>

 void main(void)
{
	int  gd=DETECT,gm;
	int X,Y,Color;

	registerfarbgidriver(EGAVGA_driver_far);
	initgraph(&gd,&gm,"");

	setgraphmode(VGAMED);       /* VGAMED ०¨¬ ¤«ï main menu */
	X=getmaxx();
	Y=getmaxy();

	setbkcolor(0);               /* black background */
	Color=CYAN;
	setlinestyle(DOTTED_LINE,0,1);
	line(0,(Y+1-20)/2,X,(Y+1-20)/2);
	
EXIT:{ closegraph(); }
 }
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

Сообщение dima »

по-моему консольные апликации на VC 6 не работают в граф моде - только в текстовом

смотри в msdn раздел "Console Functions" или поищи GetConsoleDisplayMode или в google
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Дима
по-моему консольные апликации на VC 6 не работают в граф моде - только в текстовом

смотри в msdn раздел "Console Functions" или поищи GetConsoleDisplayMode или в google
_________________
Сильно ошибаешься. А VC, как и БС, как и версии здесь не причём.

и_ван,
Графику придётся переписывать. Для приложений, где нет особых требований к производительности - вполне подойдёт и WinAPI.
Можно, конечно, поппробовать написать обёртки апишных функций с интерфейсом борлнада. Я бы, скорее всего, переписал все "вхождения в коде" борландовского рисования. Возможно и расчётную часть, т.е. там где Вы определяете координаты графических примитиво, области вывода в окне, отсечения и т.д. - всё придётся переписывать. Но всё равно работа не с нуля, если есть хость борландовский код. Ясно, что и зачем делать.

Удачи.
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

Сообщение i_van »

dima писал(а):по-моему консольные апликации на VC 6 не работают в граф моде - только в текстовом

смотри в msdn раздел "Console Functions" или поищи GetConsoleDisplayMode или в google
Спасибо. Вроде как ты прав. Судя по msdn
Console programs are developed with Console API functions, which provide character-mode support in console windows.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Вы нет тот мсдн читатет видать. Вот работающий код

Код: Выделить всё

#include "stdafx.h"
#include <windows.h>
#include <conio.h>

void _tmain( void )
{
	 HWND hwnd;
	 SetConsoleTitle("ConsoleDrawing");
	 Sleep(50);
	 hwnd=FindWindow(NULL,"ConsoleDrawing");

	 if ( ! hwnd ) 
	 {
		printf("\n Can't get hwnd. Press any key.");
		getch();
		return;
	 }
	 
	 HDC hdc;
	 RECT rect;

	 hdc = GetDC( hwnd );
	 if ( hdc )
	 {
		SelectObject(hdc, GetStockObject(WHITE_PEN));
		MoveToEx(hdc, 0, 0, NULL);
		LineTo (hdc, 300, 300);
		
		SelectObject(hdc, GetStockObject(LTGRAY_BRUSH));
		Ellipse(hdc, 0,0,200,200);

		GetClientRect(hwnd, &rect);
		DrawText(hdc, "We won!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	 }
	 printf("\nPress any key...");
	 getch();
	 return;
}
Запускать надо не из ИДЕ только, шоб картинки увидеть.
Блин.
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

Сообщение i_van »

vg
Bay! Спасибо. Всегда приятно поговорить с умным человеком.
:D
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Спасибо, конечно, за отзыв....
Но вот всё ж по существу..... Был вопрос. Для меня он звучал так:
- а можно ли так извратиться, чтобы ничего лишнего, типа, майн + ГДИ.
Был ответ:
- если нельзя, но хочется, то можно.

Поэтому, совет. Если Вы делаете это для работы, то выбросьте это из головы. Честно говорю. Мало ли, как можно что-то сделать, как можно извратиться. То, что я пропостил таки-да, работает, но это тупик.

Что-бы я сделал, если есть прога, которую надо реанимировать для нормальной работы под виндами.... У вас повторяю есть уже очень много - С-код работающей программы, где ясно и понятно, что, где и как должно работать. Это самое важное. А не то, как в конце концов и при помощи каких библиотек будут отрисовываться примитивы в каких окнах и при помощи каких заумных функций.

Поэтому предлагаю два варианта:

1) Сделать нормальное приложение на ВинАПИ, где есть нормальный ВинМайн, обработка месаг виндовз и т.д. Плюсы такие - будет работать быстро, ровно так, как Вы хотите, а не как-нить захребетная библиотека обёрток ГДИ делает это за Вашей спиной. Будет компилироваться для всех платформ, в том числе и 16 разрядных, если уж такая тяга к старому. Сделав это Вы будете знать, как и что происходит в виндовз. Занимать будет копейки.

2) Использовать одну из каркасных библиотек. Например, непопулярный среди так называемых "профи" МФЦ - претендент номер один. Здесь, чтобы развеять Ваши сомнения и популярную критику о непопулярности МФЦ скажу, что вам потребуются от МФЦ только хорошо вылезанные мелкософтом их обёртки ГДИ, а не их остальная какркасная хрень (там таки да, иногда плакать хочется).
К счастью эти обёртки ГДИ ни коем образом не встроены так же жётко в каркас МФЦ, как другие классы МФЦ. Это - просто классно сделанные обёртки ГДИ. Короче, хребет своей программы можете сделать на АПИ\МФЦ или только АПИ, а для ГДИ - использовать обёртки МФЦ. Будет практически также эффективно, как в п.1, но гораздо более надёжно, быстро, безопасно для Вас, т.к. мелкософт долго вылизывал графику - то, что ниже всего, т.е., что есть в их библиотеках в качестве графической подсистемы.

ПС. Если вам понятно, как работает код, что я пропостил Выше, то Вам будет понятно, как написать АПИ\МФЦ приложение. На всё_про_всё вам потребуется отсилы пару дней, что бы разобраться и уже что-то написать. Точно говорю.
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

Сообщение i_van »

vg:

Я пришел примерно к тем же заключениям. Перепишу с MFC.

Что было для меня еще важно - так это осознание того факта (после вашего поста), что консольное окно - это обычное графическое окно, и ничего более.
Сомнения зародились у меня давно, поскольку Windows изначально система графическая.
Ответить