// // 함수: WndProc(HWND, UINT, WPARAM, LPARAM) // // 목적: 주 창의 메시지를 처리합니다. // // WM_COMMAND - 응용 프로그램 메뉴를 처리합니다. // WM_PAINT - 주 창을 그립니다. // WM_DESTROY - 종료 메시지를 게시하고 반환합니다. // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static int retval; switch (message) { case WM_CREATE: break; case WM_SIZE: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_MOUSEMOVE: case WM_MOUSEWHEEL: case WM_KEYDOWN: case WM_KEYUP: gGameFramework.OnProcessingWindowMessage(hWnd, message, wParam, lParam); break; //case WM_TIMER: // break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 여기에 코드를 입력합니다. MSG msg; HACCEL hAccelTable; // 전역 문자열을 초기화합니다. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_GAMECLIENT, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 응용 프로그램 초기화를 수행합니다. if (!InitInstance(hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GAMECLIENT)); // 기본 메시지 루프입니다. while (1) { if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; if (!::TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } else { gGameFramework.FrameAdvance(); } } gGameFramework.OnDestroy(); return (int)msg.wParam; }
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 여기에 코드를 입력합니다. MSG msg; wsprintf(szTitle, Win32TitleName); wsprintf(szWindowClass, _T("winMain")); // 전역 문자열을 초기화합니다. MyRegisterClass(hInstance); // 응용 프로그램 초기화를 수행합니다. if (!InitInstance(hInstance, nCmdShow)) { return FALSE; } while (true) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { gGameFramework.FrameAdvance(); } } gGameFramework.OnDestroy(); return (int)msg.wParam; }
// // 함수: WndProc(HWND, UINT, WPARAM, LPARAM) // // 목적: 주 창의 메시지를 처리합니다. // // WM_COMMAND - 응용 프로그램 메뉴를 처리합니다. // WM_PAINT - 주 창을 그립니다. // WM_DESTROY - 종료 메시지를 게시하고 반환합니다. // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MOUSEMOVE: case WM_LBUTTONDBLCLK: case WM_MOUSELEAVE: case WM_MBUTTONDOWN: gGameFramework.OnProcessingMouseMessage(hWnd, message, wParam, lParam); break; case WM_KEYDOWN: case WM_KEYUP: case WM_CHAR: case WM_IME_COMPOSITION: case WM_IME_STARTCOMPOSITION: gGameFramework.OnProcessingKeyboardMessage(hWnd, message, wParam, lParam); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); gGameFramework.PresentFrameBuffer(hdc); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: if (!gGameFramework.OnProcessingWindowMessage(hWnd, message, wParam, lParam)) return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
// // 함수: InitInstance(HINSTANCE, int) // // 목적: 인스턴스 핸들을 저장하고 주 창을 만듭니다. // // 설명: // // 이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고 // 주 프로그램 창을 만든 다음 표시합니다. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { ghInstance = hInstance; DWORD dwStyle = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_BORDER; RECT rc = { 0, 0, FRAME_BUFFER_WIDTH, FRAME_BUFFER_HEIGHT }; AdjustWindowRect(&rc, dwStyle, FALSE); HWND hMainWnd = CreateWindow(szWindowClass, szTitle, dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL); if (!hMainWnd) return FALSE; gGameFramework.OnCreate(hInstance, hMainWnd); // Connect Server cout << "ip : "; cin >> ip; ServerConnect(); ::ShowWindow(hMainWnd, nCmdShow); ::UpdateWindow(hMainWnd); return TRUE; }
// // 함수: InitInstance(HINSTANCE, int) // // 목적: 인스턴스 핸들을 저장하고 주 창을 만듭니다. // // 설명: // // 이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고 // 주 프로그램 창을 만든 다음 표시합니다. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { // 윈도우 스타일 DWORD dwStyle = WS_OVERLAPPED // | WS_CAPTION // | WS_MINIMIZEBOX // | WS_SYSMENU // | WS_BORDER // ; // end // 인스턴스 핸들을 전역 변수에 저장 hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다. // 데스크톱 윈도우 사이즈 RECT getWinSize; GetWindowRect(GetDesktopWindow(), &getWinSize); // 클라이언트 사이즈 RECT rc; rc.left = rc.top = 0; rc.right = CLIENT_WIDTH; rc.bottom = CLIENT_HEIGHT; AdjustWindowRect(&rc, dwStyle, FALSE); // 클라이언트 절대좌표(left, top) POINT ptClientWorld; ptClientWorld.x = (getWinSize.right - CLIENT_WIDTH) / 2; ptClientWorld.y = (getWinSize.bottom - CLIENT_HEIGHT) / 2; // 윈도우 생성 ghWndMain = CreateWindow( szWindowClass // 윈도우 클래스 명 , szTitle // 캡션 표시 문자열 , dwStyle // 윈도우 스타일 , ptClientWorld.x // 부모 윈도우 기반 윈도우 시작좌표 : x , ptClientWorld.y // 부모 윈도우 기반 윈도우 시작좌표 : y , rc.right // 윈도우 사이즈 : width , rc.bottom // 윈도우 사이즈 : height , NULL // 부모 윈도우. , NULL // 메뉴 핸들 , hInstance // 인스턴스 핸들 , NULL // 추가 파라메터 : NULL ); if (!gGameFramework.OnCreate(hInstance, ghWndMain)) return(FALSE); // 생성 실패시 프로그램 종료 // 확인 : WndProc의 default msg handler가 DefWindowProc 함수를 반환하는가? if (!ghWndMain) return FALSE; // 윈도우 표시 // 서버에 연결됐을 경우에만 표시한다. // ShowWindow(ghWndMain, nCmdShow); ::DragAcceptFiles(ghWndMain, TRUE); UpdateWindow(ghWndMain); CallServerIPInputBox(ptClientWorld); // 성공 반환 return TRUE; }