GUI + Console API.

Сейчас мы с тобой научимся создавать программы, в которых присутствует как консоль, так и 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.