// // 함수: 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_ACTIVATEAPP : g_bActiveApp = (BOOL)wParam; break; //네트워크 메시지 case WM_NETWORK : if (WSAGETASYNCERROR(lParam)) MessageBox(g_hWnd, L"WM_NETWORK", NULL, NULL); switch (WSAGETSELECTEVENT(lParam)) { case FD_CONNECT : break; case FD_CLOSE : MessageBox(g_hWnd, L"close", NULL, NULL); break; case FD_READ : ReadProc(); break; case FD_WRITE : WriteProc(); break; } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 여기에 그리기 코드를 추가합니다. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; timeBeginPeriod(1); }
ILuint ILAPIENTRY iReadFile(ILvoid *Buffer, ILuint Size, ILuint Number) { ILuint TotalBytes = 0, BytesCopied; ILuint BuffSize = Size * Number; ILuint NumRead; if (!UseCache) { NumRead = ReadProc(Buffer, Size, Number, FileRead); if (NumRead != Number) ilSetError(IL_FILE_READ_ERROR); return NumRead; } /*if (Cache == NULL || CacheSize == 0) { // Shouldn't happen, but we check anyway. return ReadProc(Buffer, Size, Number, FileRead); }*/ if (BuffSize < CacheSize - CachePos) { memcpy(Buffer, Cache + CachePos, BuffSize); CachePos += BuffSize; CacheBytesRead += BuffSize; if (Size != 0) BuffSize /= Size; return BuffSize; } else { while (TotalBytes < BuffSize) { // If loop through more than once, after first, CachePos is 0. if (TotalBytes + CacheSize - CachePos > BuffSize) BytesCopied = BuffSize - TotalBytes; else BytesCopied = CacheSize - CachePos; memcpy((ILubyte*)Buffer + TotalBytes, Cache + CachePos, BytesCopied); TotalBytes += BytesCopied; CachePos += BytesCopied; if (TotalBytes < BuffSize) { iPreCache(CacheSize); } } } CacheBytesRead += TotalBytes; if (Size != 0) TotalBytes /= Size; if (TotalBytes != Number) ilSetError(IL_FILE_READ_ERROR); return TotalBytes; }