int main(int argc, char* argv[]) { #if 0 void debug_oldstructs(); debug_oldstructs(); #endif try{ init_boe(argc, argv); if(!get_bool_pref("GameRunBefore")) cChoiceDlog("welcome").show(); else if(get_bool_pref("GiveIntroHint", true)) tip_of_day(); set_pref("GameRunBefore", true); finished_init = true; if(ae_loading) { finish_load_party(); post_load(); } menu_activate(); restore_cursor(); while(!All_Done) Handle_One_Event(); close_program(); return 0; } catch(std::exception& x) { showFatalError(x.what()); throw; } catch(std::string& x) { showFatalError(x); throw; } catch(...) { showFatalError("An unknown error occurred!"); throw; } }
/** * Creating window */ BOOL Application::createWindow() { DWORD dwExStyle; DWORD dwStyle; ZeroMemory(&wc, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpfnWndProc = winProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = GetModuleHandle( NULL ); wc.hIcon = NULL; wc.hCursor = NULL; wc.hbrBackground = CreateSolidBrush(RGB(0,0,0)); wc.lpszMenuName = NULL; wc.lpszClassName = (char*)className.c_str(); wc.hIconSm = NULL; if ( !RegisterClassEx(&wc) ) { string msg = "Невозможно зарегистрировать класс окна: "; msg += className; return showFatalError(msg); } if (isFullscreen) { DEVMODE dmScreenSettings; ZeroMemory( &dmScreenSettings, sizeof( dmScreenSettings ) ); dmScreenSettings.dmSize = sizeof( dmScreenSettings ); dmScreenSettings.dmPelsWidth = width; dmScreenSettings.dmPelsHeight = height; dmScreenSettings.dmBitsPerPel = bits; dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; // Possible switch in fullscreen if( ChangeDisplaySettings( &dmScreenSettings, CDS_FULLSCREEN ) != DISP_CHANGE_SUCCESSFUL ) { if( MessageBox( NULL, "Полноэкранный режим не поддерживается вашей видеокартой. Запустить в оконном режиме?", "Ошибка", MB_YESNO | MB_ICONEXCLAMATION ) == IDYES ) { isFullscreen = false; } else { return showFatalError("Программа будет закрыта"); } } } if (isFullscreen) { dwExStyle = WS_EX_APPWINDOW; dwStyle = WS_POPUP; ShowCursor( false ); } else { dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; dwStyle = WS_OVERLAPPEDWINDOW; } hWnd = CreateWindowEx( dwExStyle, (char*)className.c_str(), (char*)((renderer ? dxTitle : oglTitle) + ": " + appTitle).c_str(), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, width, height, NULL, NULL, wc.hInstance, NULL ); if (!hWnd) { string txt = "Невозможно создать окно: "; txt += appTitle; return showFatalError(txt); } if ( !( hDC = GetDC( hWnd ) ) ) return showFatalError("Невозможно создать контекст устройства!"); if ( !Renderer::instance().activate(renderer) ) return FALSE; ShowWindow( hWnd, SW_SHOW ); SetForegroundWindow( hWnd ); SetFocus( hWnd ); Renderer::instance().resize( width, height ); Renderer::instance().initialize(); return TRUE; }