Досовское окно
Участников: 4
Страница 1 из 1
Досовское окно
Вот интересно узнать(и будет очень полезно мне): Как во время выполнения программы в графическом окне писать в досовском/консольном? Заодно хочу узнать, можно ли его убрать?
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Досовское окно
Наскока я знаю, так просто ето к сожалению не получится. Я так понимаю, необходимо нечто рисовать на графическом окне, а в консольное выводить какуюто отладочную информацию. FB может одновременно быть только в одном режиме, а постоянно переключаться из одного в другой будет достаточно трудоемкой задачей (да и неудобно). Можно как вариант сделать два обсолютно разных приложения, одно графическое, другое консольное, но для выводимых значений использовать одну и ту же область памяти (правда если венда не будет на ето ругаться), но ет достаточно геморойно. Второй вариант, ето создать графическое окно с помощью winApi, тогда консольное окно останется нетронутым, но в таком случае придется отказаться от функций типа flip и пр, хотя я думаю ето небольшая проблема. Ну... вроде больше ниче толкового в голову не приходит..
Re: Досовское окно
Ага, понятно. я спрашивал, потому что хотел сделат что-то типа консоли, но если геморно в текстовике, то сделаю в графическом окне.
Можно ли не выводить досовское окно?
Можно ли не выводить досовское окно?
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Досовское окно
Чтобы не выводить консольное окно нужно использовать такую опцию: fbc -s gui test.bas.
Подробнее: Использование командной строки
Подробнее: Использование командной строки
Re: Досовское окно
А на самом деле все гораздо проще. Для создания консоли в приложениях Windows GUI кое-что предусмотрено. Итак, абсолютно любое приложение может вызвать апи AllocConsole, в результате создается консоль для этого приложения. После этого нужно получить хендлы для вывода/ввода (GetStdHandle), когда консоль больше не нужна, вызывается FreeConsole. Как то так:
- Код:
#include "windows.bi"
declare function DlgProc (byval hWnd as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as bool
'digger.Rc
'main.dlg
#define DLG_1 1000
#define BTN_1 1001
Dim shared hInput as HANDLE
dim shared hOutput as HANDLE
dim shared myString as string
myString = "My text in console "
dim shared myBuffer as string
DialogBoxParam(GetModuleHandle(0),cast(LPCSTR,DLG_1),0,@DlgProc,0)
end
function DlgProc (byval hWnd as HWND,byval uMsg as UINT,byval wParam as WPARAM,byval lParam AS LPARAM) as bool
dim as long id,event,_temp
select case uMsg
Case WM_CLOSE
EndDialog(hWnd,0)
case WM_COMMAND
select case loword(wParam)
Case BTN_1
AllocConsole()
hInput = GetStdHandle(STD_INPUT_HANDLE)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE)
WriteConsole(hOutput,StrPtr(myString),Len(myString),@_temp,0)
ReadConsole(hInput,@myBuffer,120,@_temp,0)
FreeConsole()
End Select
case else
return FALSE
End Select
return TRUE
end function
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|