コード例 #1
0
ファイル: boe.main.cpp プロジェクト: LibreGames/cboe
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;
	}
}
コード例 #2
0
/**
 * 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;
}