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.