OVH Cloud OVH Cloud

Win32 application => console

2 réponses
Avatar
mickeydisn
Bonjour a tous.


Je suis entrin de developer un programme avec visual C++

J'ai besion qui soit un Win32 application car je doit utiliser la
valeur HINSTANCE du WinMain(..) ..

Mon pb c'est que j'adore les applications consoles (super pratique pour
debuger)

Ma question comment peut ton faire pour cree une fenetre console avec
une "win32 application" dans laquelle je pourais utiliser std::cout de
la "STL"

En vous remercien de vos reponce

Cordialement

--
Mickeydisn

2 réponses

Avatar
Bernie
mickeydisn wrote:
Bonjour a tous.


Je suis entrin de developer un programme avec visual C++

J'ai besion qui soit un Win32 application car je doit utiliser la
valeur HINSTANCE du WinMain(..) ..

Mon pb c'est que j'adore les applications consoles (super pratique pour
debuger)

Ma question comment peut ton faire pour cree une fenetre console avec
une "win32 application" dans laquelle je pourais utiliser std::cout de
la "STL"

En vous remercien de vos reponce

Cordialement




Ben à priori c'est pas trop sorcier, pour exemple voila de veilles
routines resorties de mes archives de code...

Avec ca tu devrais pouvoir demarrer/fermer une console et rediriger
simplement en ré-affectant stderr et/ou stdout avec les handle d'io de
ta console...

HWND FindConsoleHandle()
{
static LPCTSTR temptitle = _T("{98C1C303-2A9E-11d4-9FF5-006067718D04}");
TCHAR title[512];
if(GetConsoleTitle(title, sizeof(title)/sizeof(TCHAR)) == 0)
return NULL;
SetConsoleTitle(temptitle);
HWND wnd = FindWindow(NULL, temptitle);
SetConsoleTitle(title);
return wnd;
}


void BInitDebuggingState()
{
#ifdef _CONSOLE
B_CONSOLE_ISDEBUG_MODE = true;
#else
B_CONSOLE_ISDEBUG_MODE = false;
#endif

B_VC_ISDEBUG_MODE = (bool)IsDebuggerPresent();
}

FILE* __fStdOut = NULL;
HANDLE __hStdOut = NULL;
void* __hStdFunc = NULL;

void BStartConsoleWin(int width, int height, bool bconsole, char* fname)
{
AllocConsole();

freopen("conin$", "r", stdin);
freopen("conout$", "w", stdout);
freopen("conout$", "w", stderr);

SetConsoleTitle("Debug Window");
__hStdOut = GetStdHandle(STD_ERROR_HANDLE);

COORD co = {width,height};
SetConsoleScreenBufferSize(__hStdOut, co);

if(fname)
__fStdOut = fopen(fname, "w");

}

void BCloseConsole()
{
bool ret = FreeConsole();
if(__hStdOut!=NULL)
{
CloseHandle(__hStdOut);
__hStdOut = NULL;
}
if(__fStdOut!=NULL)
{
fclose(__fStdOut);
__fStdOut = NULL;
}
}

// Use wprintf like TRACE0, TRACE1, ... (The arguments are the same as
printf)
int BWPrintf(char *fmt, ...)
{
char s[300];
va_list argptr;
int cnt;

va_start(argptr, fmt);
cnt = vsprintf(s, fmt, argptr);
va_end(argptr);

DWORD cCharsWritten;

if(__hStdOut)
WriteConsole(__hStdOut, s, strlen(s), &cCharsWritten, NULL);

if(__fStdOut)
fprintf(__fStdOut, s);

return(cnt);
}
///////////////////////////////////////////////
Avatar
mickeydisn
ha merci beaucoup ses sa que je cherche :)

--
Mickeydisn