void Window::setFullscreen(bool isFullscreen) { m_fullscreen = isFullscreen; if( isFullscreen ) { setStyle(WS_EX_TOPMOST | WS_VISIBLE | WS_POPUP); setExtendedStyle(WS_EX_APPWINDOW); } else { setStyle(WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX); setExtendedStyle(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE); } SetWindowLong(m_hwnd, GWL_STYLE, m_style); SetWindowLong(m_hwnd, GWL_EXSTYLE, m_extendedStyle); u32 x, y; calculateClientRect(m_xSize, m_ySize, m_style, m_extendedStyle, x, y); SetWindowPos(m_hwnd, 0, m_xPos, m_yPos, x, y, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED | SWP_SHOWWINDOW); }
HippoMenu::HippoMenu(void) { refCount_ = 1; hippoLoadTypeInfo((WCHAR *)0, &IID_IHippoMenu, &ifaceTypeInfo_, NULL); desiredWidth_ = BASE_WIDTH; desiredHeight_ = BASE_HEIGHT; mouseX_ = 0; mouseY_ = 0; setUseParent(true); setClassName(L"HippoMenuClass"); setClassStyle(CS_HREDRAW | CS_VREDRAW | CS_DROPSHADOW); setWindowStyle(WS_POPUP); setExtendedStyle(WS_EX_TOPMOST); setTitle(L"Hippo Menu"); setApplication(this); }
HippoBubble::HippoBubble(void) { idle_ = FALSE; screenSaverRunning_ = FALSE; haveMouse_ = FALSE; effectiveIdle_ = FALSE; shown_ = FALSE; desiredWidth_ = BASE_WIDTH; desiredHeight_ = BASE_HEIGHT; layerDC_ = NULL; oldBitmap_ = NULL; images_ = NULL; // Notes on animation // // * Without our usage of UpdateLayeredWindow, it would fade the window in and // out using AnimateWindow, but you turn on fading in then you'll probably have difficulties // the second time you show the window ... it appears that the web browser control has some // bugs with WM_PRINTCLIENT; the first time the contents of the window are properly // initialized before fade-in, but on subsequent shows they are not. A crude // workaround might be to reembed a new control every time, but there are probably // less sledgehammer methods. Even without animation there are sometimes problems // with reshowing the window, which is why we turn on updateOnShow(). (This may // no longer be necessary with our usage of UpdateLayeredWindow()) // // * AnimateWindow isn't compatible with UpdateLayeredWindow() ... when you start // animating the window, the shape is removed. This is presumably because AnimateWindow // internally uses SetLayeredWindowAttributes, which is exclusive with UpdateLayeredWindow // So to animate a shaped window, we'd have to fade the bits in and out ourselves. // setAnimate(false); setUseParent(true); setUpdateOnShow(true); setWindowStyle(WS_POPUP); setExtendedStyle(WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_NOACTIVATE); setClassName(L"HippoBubbleClass"); setTitle(L"Hippo Notification"); setApplication(this); }