⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mswindow.c

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 C
字号:
/*****************************************************************************    TEST FILE FOR graph (Dynamic Layout Alg)****    MODUL: class library to interface MS-WINDOWS**** Author: dr. Szirmay-Kalos Laszlo (szirmay@fsz.bme.hu)**	   Technical University of Budapest, Hungary*****************************************************************************/#include "mswindow.hxx"static AppWindow * pwindow;long   FAR PASCAL _export WndProc( unsigned int, unsigned int, unsigned int, long );//-------------------------------------------------------------------void App :: Error( char * message, int line )//-------------------------------------------------------------------{	fprintf( stderr, "ERROR: %s", message );	if ( line >= 0 ) fprintf( stderr, " in line %d", line );	fprintf( stderr, "\n" );	Quit( );}//-------------------------------------------------------------------void App :: Warning( char * message )//-------------------------------------------------------------------{	fprintf( stderr, "ERROR: %s\n", message );}//-------------------------------------------------------------------void App :: Quit( )//-------------------------------------------------------------------{	fprintf( stderr, "Bye ( Graph )\n" );	exit( -1 );}static HANDLE hInstance;static HANDLE hPrevInstance;static int    nCmdShow;//-------------------------------------------------------------------AppWindow ::  AppWindow( int argc, char * argv[] )//-------------------------------------------------------------------	   : canvas( 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT ){	WNDCLASS wndclass;	pwindow = this;	strcpy(szClassName, "GRAPH");	if ( ! hPrevInstance ) {		wndclass.style	       = CS_HREDRAW | CS_VREDRAW;		wndclass.lpfnWndProc   = ::WndProc;		wndclass.cbClsExtra    = 0;		wndclass.cbWndExtra    = 0;		wndclass.hInstance     = hInstance;		wndclass.hIcon	       = LoadIcon( hInstance, IDI_APPLICATION );		wndclass.hCursor       = LoadCursor( NULL, IDC_ARROW );		wndclass.hbrBackground = GetStockObject( WHITE_BRUSH );		wndclass.lpszMenuName  = NULL;		wndclass.lpszClassName = szClassName;		if ( ! RegisterClass( &wndclass ) )   exit( -1 );	}	hWnd = CreateWindow( szClassName,		// window class name			     "Graph layout",		// window caption			     WS_OVERLAPPEDWINDOW,	// window style			     CW_USEDEFAULT,		// initial x pos			     CW_USEDEFAULT,		// initial y pos			     CW_USEDEFAULT,		// initial x size			     CW_USEDEFAULT,		// initial x size			     NULL,			// parent window handle			     NULL,			// window menu handle			     hInstance,			// program instance handle			     NULL );			// creation params	if ( ! hWnd ) exit( -1 );	ShowWindow( hWnd, nCmdShow );}//-------------------------------------------------------------------RectAngle AppWindow :: Canvas()//-------------------------------------------------------------------{	return canvas;}//-------------------------------------------------------------------void AppWindow :: RePaint()//-------------------------------------------------------------------{	InvalidateRect( hWnd, NULL, TRUE );  // WM_PAINT message}//-------------------------------------------------------------------void AppWindow :: Text( char * text, Point p)//-------------------------------------------------------------------{	TEXTMETRIC tm;	GetTextMetrics( hdc, &tm );	TextOut(hdc,		p.X() - tm.tmMaxCharWidth / 2,		p.Y() - tm.tmHeight / 2,		text, strlen( text ));}//-------------------------------------------------------------------void AppWindow :: MoveTo( Point p )//-------------------------------------------------------------------{	::MoveTo(hdc, p.X(), p.Y() );}//-------------------------------------------------------------------void AppWindow :: LineTo( Point p )//-------------------------------------------------------------------{	::LineTo(hdc, p.X(), p.Y());}//-------------------------------------------------------------------void AppWindow :: DrawRectangle( RectAngle& rect )//-------------------------------------------------------------------{	RECT r;	r.left = rect.HorPos();	r.top = rect.VerPos();	r.right = r.left + rect.Width();	r.bottom = r.top + rect.Height();	FillRect( hdc, &r, GetStockObject( BLACK_BRUSH ) );}//-------------------------------------------------------------------void AppWindow :: MessageLoop()//-------------------------------------------------------------------{	MSG msg;	while( GetMessage( &msg, NULL, 0, 0 ) ) {		TranslateMessage( &msg );		DispatchMessage( &msg );	}}//-------------------------------------------------------------------// FORWARD EVENT TO EVENT HANDLERS//long AppWindow::WindowProc( HWND hwnd, WORD wmsg, WORD wParam, LONG lParam )//-------------------------------------------------------------------{    hWnd = hwnd;    switch ( wmsg ) {//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	case WM_PAINT: {				// REPAINT WINDOW//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~			RECT	rect;			GetClientRect( hWnd, &rect );			canvas = RectAngle( rect.left, rect.top,					    rect.right - rect.left,					    rect.bottom - rect.top );			ExposeEvent evt( &canvas );			hdc = BeginPaint(hWnd, &ps);			ExposeAll( &evt );			EndPaint( hWnd, &ps );	    }	    break;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	case WM_CHAR: {					// KEYBOARD EVENT//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~			KeyEvent evt(wParam, lParam);			hdc = GetDC( hWnd );			KeyPressed( &evt );			ReleaseDC( hWnd, hdc );	    }	    break;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	case WM_DESTROY:				// CLOSE WINDOW//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	    PostQuitMessage( 0 );	    break;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    default:						// ALL OTHER EVENTS//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	    return DefWindowProc( hwnd, wmsg, wParam, lParam );    }    return 0;}/*********************************************************************								    **  MS-WINDOWS INTERFACE						    *********************************************************************///-------------------------------------------------------------------// EVENT HANDLER, CALLED BY WINDOWS//long FAR PASCAL _export WndProc( unsigned int hWnd,				 unsigned int message,				 unsigned int wParam,				 long lParam )//-------------------------------------------------------------------{	return pwindow->WindowProc( hWnd, message, wParam, lParam );}//-------------------------------------------------------------------//	APPLICATION OBJECT//-------------------------------------------------------------------App app;//-------------------------------------------------------------------// PROGRAM ENTRY POINT, CALLED BY WINDOWS//int PASCAL WinMain( HANDLE hInstance,		    HANDLE hPrevInstance,		    LPSTR lpszCmdLine,		    int nCmdShow )//-------------------------------------------------------------------{	::hInstance = hInstance;	::hPrevInstance = hPrevInstance;	::nCmdShow = nCmdShow;/**   MAKE argc, argv FROM lpsCmdLine*/	char * argv[20];	argv[0] = new char[ strlen( "graph" ) + 1 ];	strcpy( argv[0], "graph" );	int argc = 1;	char far * start = lpszCmdLine;	for( char far * ps = lpszCmdLine; *ps != '\0'; ps++ ) {		if ( *ps != ' ' && *ps != '\t' ) continue;		else if ( ps != start ) {			argv[ argc ] = ( char * ) malloc( ps - start + 1);			for(int i = 0; i < ps - start; i++ )				argv[argc][i] = start[i];			argv[argc++][i] = '\0';		}	}	if ( ps != start ) {		argv[ argc ] = ( char * )malloc( ps - start + 1);		for(int i = 0; i < ps - start; i++ )			argv[argc][i] = start[i];		argv[argc++][i] = '\0';	}/**   CALL APPLICATION DEPENDENT ENTRY*/	app.Start( argc, argv );	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -