GUI + Console API

GUI + Console C++
Сейчас мы с тобой научимся создавать программы, в которых присутствует как консоль, так и GUI.
Запускай VC++, создавай проект MFC AppWizard(exe), дальше выбери Dialog based, на следующем шаге отключай все и жми Finish.
После создания проекта, лезь в Build ->Set Active Configuration, выбери Release ->OK.
В редакторе ресурсов, помести на диалог EditBox и Button. Дальше жми Ctrl+W и добавь к EditBox`у переменную с типом control. Там же добавь сообщение WM_DESTROY и обработчик к кнопке.

В инициализации диалога напиши следующее:

BOOL CGUIConsoleDlg::OnInitDialog()
{
        CDialog::OnInitDialog();
        SetIcon(m_hIcon, TRUE);         
        SetIcon(m_hIcon, FALSE);        
        if(!AllocConsole()){MessageBox("error AllocConsole","Error",MB_OK|MB_ICONSTOP);}
        return TRUE;  
}

В обработчик сообщения WM_DESTROY добавь:

void CGUIConsoleDlg::OnDestroy()
{
        CDialog::OnDestroy();
        if(!FreeConsole()){MessageBox("errorFreeConsole","Error",MB_OK|MB_ICONSTOP);}
}

Обработчик к кнопке:

void CGUIConsoleDlg::OnButtonConsole()
{
        char * szWrite = new char[256];
        DWORD dwWr;
        m_edit.GetWindowText(szWrite,256);
        if(!WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),(VOID*)szWrite,m_edit.GetWindowTextLength(),&dwWr,NULL))
        {MessageBox("Error WriteConsole");}
        delete szWrite;
}

Теперь о функциях:

BOOL AllocConsole(void); — создает консоль.

BOOL FreeConsole(VOID); — удаляет консоль.

BOOL WriteConsole( HANDLE hConsoleOutput, CONST VOID *lpBuffer, DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved); — запись в консоль:
hConsoleOutput – хэндл экранного буфера;
lpBuffer – указатель на буфер, который будет записан в консоль;
nNumberOfCharsToWrite – число символов буфера для записи;
lpNumberOfCharsWritten – число символов записанных в консоль;
lpReserved – NULL.