int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX winClass; MSG uMsg; memset(&uMsg,0,sizeof(uMsg)); winClass.lpszClassName = "MY_WINDOWS_CLASS"; winClass.cbSize = sizeof(WNDCLASSEX); winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; winClass.lpfnWndProc = WindowProc; winClass.hInstance = hInstance; winClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); winClass.hCursor = LoadCursor(NULL, IDC_ARROW); winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winClass.lpszMenuName = NULL; winClass.cbClsExtra = 0; winClass.cbWndExtra = 0; if( !RegisterClassEx(&winClass) ) return E_FAIL; hWnd = CreateWindowEx( 0, "MY_WINDOWS_CLASS", "D1_C3", WS_OVERLAPPEDWINDOW, 0, 0, (DWORD)viewWidth, (DWORD)viewHeight, 0, 0, hInstance, 0 );//<<<----fullscreen //---WS_OVERLAPPEDWINDOW,//---WS_POPUP, if( hWnd == NULL ) return E_FAIL; ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); InitGL(); while( uMsg.message != WM_QUIT ) { if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &uMsg ); DispatchMessage( &uMsg ); } if(keys[VK_ESCAPE]) { break; } else { ProcessKeyboard(); RenderGL(); } } shutDownGL(); UnregisterClass( "MY_WINDOWS_CLASS", hInstance ); return uMsg.wParam; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { #if defined _DEBUG _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF); _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); #endif MSG msg = {0}; WNDCLASSEX wcl = {0}; wcl.cbSize = sizeof(wcl); wcl.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wcl.lpfnWndProc = WindowProc; wcl.cbClsExtra = 0; wcl.cbWndExtra = 0; wcl.hInstance = g_hInstance = hInstance; wcl.hIcon = LoadIcon(0, IDI_APPLICATION); wcl.hCursor = LoadCursor(0, IDC_ARROW); wcl.hbrBackground = 0; wcl.lpszMenuName = 0; wcl.lpszClassName = "GLWindowClass"; wcl.hIconSm = 0; if (!RegisterClassEx(&wcl)) return 0; g_hWnd = CreateAppWindow(wcl, 0); if (g_hWnd) { InitGL(); ToggleFullScreen(); glDisable(GL_MULTISAMPLE_ARB); ShowWindow(g_hWnd, nShowCmd); UpdateWindow(g_hWnd); while (true) { while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } if (msg.message == WM_QUIT) break; if (keys[VK_ESCAPE]) { msg.message = WM_QUIT ; } if (g_hasFocus) { RenderGL(); SwapBuffers(g_hDC); ProcessKeyboard(); } else { WaitMessage(); } } Cleanup(); UnregisterClass(wcl.lpszClassName, hInstance); } return static_cast<int>(msg.wParam); }
// Plugin window procedure. LRESULT CALLBACK PluginWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static POINT lastMousePos, curMousePos; static bool mouseRotation = false; static bool mouseTracking = false; ClientPlugin* plugin = reinterpret_cast<ClientPlugin*>(GetWindowLongPtr(hWnd, GWLP_USERDATA)); switch (message) { case WM_CREATE: // Start the timer that's used for redrawing. SetTimer(hWnd, 1, 20, NULL); return 0; case WM_DESTROY: // Stop the timer that's used for redrawing. KillTimer(hWnd, 1); // Explicitly close the offscreen browser and release the reference. g_offscreenBrowser->CloseBrowser(); g_offscreenBrowser = NULL; return 0; case WM_TIMER: RenderGL(plugin); break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: SetCapture(hWnd); SetFocus(hWnd); if (wParam & MK_SHIFT) { // Start rotation effect. lastMousePos.x = curMousePos.x = LOWORD(lParam); lastMousePos.y = curMousePos.y = HIWORD(lParam); mouseRotation = true; } else { if (g_offscreenBrowser.get()) { g_offscreenBrowser->SendMouseClickEvent(LOWORD(lParam), HIWORD(lParam), (message == WM_LBUTTONDOWN?MBT_LEFT:MBT_RIGHT), false, 1); } } break; case WM_LBUTTONUP: case WM_RBUTTONUP: if (GetCapture() == hWnd) ReleaseCapture(); if (mouseRotation) { // End rotation effect. mouseRotation = false; g_spinX = 0; g_spinY = 0; } else { if (g_offscreenBrowser.get()) { g_offscreenBrowser->SendMouseClickEvent(LOWORD(lParam), HIWORD(lParam), (message == WM_LBUTTONUP?MBT_LEFT:MBT_RIGHT), true, 1); } } break; case WM_MOUSEMOVE: if (mouseRotation) { // Apply rotation effect. curMousePos.x = LOWORD(lParam); curMousePos.y = HIWORD(lParam); g_spinX -= (curMousePos.x - lastMousePos.x); g_spinY -= (curMousePos.y - lastMousePos.y); lastMousePos.x = curMousePos.x; lastMousePos.y = curMousePos.y; } else { if (!mouseTracking) { // Start tracking mouse leave. Required for the WM_MOUSELEAVE event to // be generated. TRACKMOUSEEVENT tme; tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hWnd; TrackMouseEvent(&tme); mouseTracking = true; } if (g_offscreenBrowser.get()) { g_offscreenBrowser->SendMouseMoveEvent(LOWORD(lParam), HIWORD(lParam), false); } } break; case WM_MOUSELEAVE: if (mouseTracking) { // Stop tracking mouse leave. TRACKMOUSEEVENT tme; tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE & TME_CANCEL; tme.hwndTrack = hWnd; TrackMouseEvent(&tme); mouseTracking = false; } if (g_offscreenBrowser.get()) g_offscreenBrowser->SendMouseMoveEvent(0, 0, true); break; case WM_MOUSEWHEEL: if (g_offscreenBrowser.get()) { g_offscreenBrowser->SendMouseWheelEvent(LOWORD(lParam), HIWORD(lParam), GET_WHEEL_DELTA_WPARAM(wParam),0); } break; case WM_SIZE: { int width = LOWORD(lParam); int height = HIWORD(lParam); if (width > 0 && height > 0) SizeGL(plugin, width, height); break; } case WM_SETFOCUS: case WM_KILLFOCUS: if (g_offscreenBrowser.get()) g_offscreenBrowser->SendFocusEvent(message == WM_SETFOCUS); break; case WM_CAPTURECHANGED: case WM_CANCELMODE: if (!mouseRotation) { if (g_offscreenBrowser.get()) g_offscreenBrowser->SendCaptureLostEvent(); } break; case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_CHAR: case WM_SYSCHAR: case WM_IME_CHAR: if (g_offscreenBrowser.get()) { CefBrowser::KeyType type = KT_CHAR; bool sysChar = false, imeChar = false; CefKeyInfo cki; if (message == WM_KEYDOWN || message == WM_SYSKEYDOWN) type = KT_KEYDOWN; else if (message == WM_KEYUP || message == WM_SYSKEYUP) type = KT_KEYUP; if (message == WM_SYSKEYDOWN || message == WM_SYSKEYUP || message == WM_SYSCHAR) sysChar = true; if (message == WM_IME_CHAR) imeChar = true; cki.key=wParam; cki.sysChar=sysChar; cki.imeChar=imeChar; g_offscreenBrowser->SendKeyEvent(type, cki, lParam); } break; case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; } case WM_ERASEBKGND: return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }
int main( int argc, char *argv[] ) { DFBResult ret; bool quit = false; Test test; memset( &test, 0, sizeof(test) ); ret = Initialize( &test, &argc, &argv ); if (ret) goto error; ret = InitGL( &test ); if (ret) goto error; /* * Main Loop */ while (!quit) { static int frames = 0; static double tRot0 = -1.0, tRate0 = -1.0; double dt, t = direct_clock_get_millis() / 1000.0; if (tRot0 < 0.0) tRot0 = t; dt = t - tRot0; tRot0 = t; /* advance rotation for next frame */ angle += 70.0 * dt; /* 70 degrees per second */ if (angle > 3600.0) angle -= 3600.0; ret = RenderGL( &test ); if (ret) goto error; /* * Show the rendered buffer */ test.primary->Flip( test.primary, NULL, DSFLIP_ONSYNC ); frames++; if (tRate0 < 0.0) tRate0 = t; if (t - tRate0 >= 5.0) { GLfloat seconds = t - tRate0; GLfloat fps = frames / seconds; printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds, fps); tRate0 = t; frames = 0; } DFBInputEvent evt; /* * Process events */ while (test.events->GetEvent( test.events, DFB_EVENT(&evt) ) == DFB_OK) { switch (evt.type) { case DIET_KEYPRESS: switch (evt.key_symbol) { case DIKS_ESCAPE: quit = true; break; case DIKS_CURSOR_UP: inc_rotx = 5.0; break; case DIKS_CURSOR_DOWN: inc_rotx = -5.0; break; case DIKS_CURSOR_LEFT: inc_roty = 5.0; break; case DIKS_CURSOR_RIGHT: inc_roty = -5.0; break; case DIKS_PAGE_UP: inc_rotz = 5.0; break; case DIKS_PAGE_DOWN: inc_rotz = -5.0; break; default: ; } break; case DIET_KEYRELEASE: switch (evt.key_symbol) { case DIKS_CURSOR_UP: inc_rotx = 0; break; case DIKS_CURSOR_DOWN: inc_rotx = 0; break; case DIKS_CURSOR_LEFT: inc_roty = 0; break; case DIKS_CURSOR_RIGHT: inc_roty = 0; break; case DIKS_PAGE_UP: inc_rotz = 0; break; case DIKS_PAGE_DOWN: inc_rotz = 0; break; default: ; } break; case DIET_AXISMOTION: if (evt.flags & DIEF_AXISREL) { switch (evt.axis) { case DIAI_X: view_rot[1] += evt.axisrel / 2.0; break; case DIAI_Y: view_rot[0] += evt.axisrel / 2.0; break; case DIAI_Z: view_rot[2] += evt.axisrel / 2.0; break; default: ; } } break; default: ; } } view_rot[0] += inc_rotx; view_rot[1] += inc_roty; view_rot[2] += inc_rotz; } error: Shutdown( &test ); return ret; }