Работаем с MS Visual Studio. (3 стр)
Автор: Sergei Shaykin
Код пустого выполняемого приложения.
Ниже представлен работающий код пустого приложения, в котором создаётся окно, и ведётся минимальная обработка сообщений.
// main.cpp // http://www.gamedev.ru // Пустое выполняемое приложение // Создание главного окна, обработка сообщений // Урок: http://www.gamedev.ru/users/wat/articles/MSVS // Sergey Watkin #include <windows.h> // Объявление функций int Init(HWND hWndMain); void ReleaseAll( ); void OnIdle( ); int Run( ); HWND CreateMainWindow( LPCSTR pWindowName, int nWidth, int nHeight, int nCmdShow=SW_NORMAL, bool bIsOpenGL=false); namespace{ // глобальные переменные HINSTANCE hInstance; HWND hWndMain; // устанавливаемые глобальные переменные const char * szAppName = "Demo"; } // WinMain int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hInstance = hInst; // Создаем окно главного приложения hWndMain = CreateMainWindow( "My Demo",640,480); if( !hWndMain) return 0; // Инициализация if( !Init( hWndMain)) return 0; // Запускаем цикл обработки сообщений int nRet = Run( ); // Освобождение ресурсов ReleaseAll( ); return nRet; } // Инициализация int Init( HWND hWndMain) { return 1; } // Освобождение занятых ресурсов void ReleaseAll( ) { } // Функция, вызывающаяся при пустой очереди сообщений void OnIdle( ) { } // Обработка сообщений главного окна приложения LRESULT WINAPI MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_LBUTTONDOWN: break; case WM_SIZE: break; case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return CallWindowProc( ( WNDPROC)DefWindowProc, hWnd, msg, wParam, lParam ); } // Создание главного окна приложения. HWND CreateMainWindow( LPCSTR pWindowName, int nWidth, int nHeight, int nCmdShow, bool bIsOpenGL) { WNDCLASS wndclass; // регистрируем класс окна wndclass.style = 0; wndclass.lpfnWndProc = ( WNDPROC)MainWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon ( hInstance, szAppName); wndclass.hCursor = LoadCursor ( NULL,IDC_ARROW); wndclass.hbrBackground = ( HBRUSH)( COLOR_WINDOW); wndclass.lpszMenuName = szAppName; wndclass.lpszClassName = szAppName; if( !RegisterClass( &wndclass)) return 0; DWORD dwStyle = WS_OVERLAPPEDWINDOW; if( bIsOpenGL) dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // Создаем окно HWND hWnd = CreateWindow( szAppName, pWindowName, dwStyle, ( GetSystemMetrics( SM_CXSCREEN)-nWidth)/2, ( GetSystemMetrics( SM_CYSCREEN)-nHeight)/2, nWidth, nHeight, 0, 0, hInstance, NULL); if( hWnd) { // делаем окно видимым ShowWindow( hWnd, nCmdShow); UpdateWindow( hWnd); } return hWnd; } // Обработчик сообщений int Run( ) { MSG msg={0}; while( msg.message!=WM_QUIT) { if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE)) { if( GetMessage( &msg, NULL, 0, 0)) { TranslateMessage( &msg); DispatchMessage( &msg); } } else OnIdle( ); } return msg.wParam; }
19 ноября 2001 (Обновление: 5 мар 2006)