void ChildView::UpdateIsActivated(wxUpdateUIEvent& event) { #ifdef _WIN32 if(IsMouseInWindow()) getSimuWorld()->tree->SelectItem(getSimuWorld()->getTreeItem()); #endif }
bool Win32Window::Initialize(const char* name, size_t width, size_t height) { Destroy(); IsMouseInWindow(false); parentClassName = name; childClassName = parentClassName + "_Child"; // Work around compile error from not defining "UNICODE" while Chromium does const LPSTR idcArrow = MAKEINTRESOURCEA(32512); WNDCLASSEXA parentWindowClass = { 0 }; parentWindowClass.cbSize = sizeof(WNDCLASSEXA); parentWindowClass.style = 0; parentWindowClass.lpfnWndProc = WndProc; parentWindowClass.cbClsExtra = 0; parentWindowClass.cbWndExtra = 0; parentWindowClass.hInstance = GetModuleHandle(NULL); parentWindowClass.hIcon = NULL; parentWindowClass.hCursor = LoadCursorA(NULL, idcArrow); parentWindowClass.hbrBackground = 0; parentWindowClass.lpszMenuName = NULL; parentWindowClass.lpszClassName = parentClassName.c_str(); if (!RegisterClassExA(&parentWindowClass)) { return false; } WNDCLASSEXA childWindowClass = { 0 }; childWindowClass.cbSize = sizeof(WNDCLASSEXA); childWindowClass.style = CS_OWNDC; childWindowClass.lpfnWndProc = WndProc; childWindowClass.cbClsExtra = 0; childWindowClass.cbWndExtra = 0; childWindowClass.hInstance = GetModuleHandle(NULL); childWindowClass.hIcon = NULL; childWindowClass.hCursor = LoadCursorA(NULL, idcArrow); childWindowClass.hbrBackground = 0; childWindowClass.lpszMenuName = NULL; childWindowClass.lpszClassName = childClassName.c_str(); if (!RegisterClassExA(&childWindowClass)) { return false; } DWORD parentStyle = WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU; DWORD parentExtendedStyle = WS_EX_APPWINDOW; RECT sizeRect = { 0, 0, static_cast<LONG>(width), static_cast<LONG>(height) }; AdjustWindowRectEx(&sizeRect, parentStyle, FALSE, parentExtendedStyle); parentWindow = CreateWindowExA( parentExtendedStyle, parentClassName.c_str(), name, parentStyle, CW_USEDEFAULT, CW_USEDEFAULT, sizeRect.right - sizeRect.left, sizeRect.bottom - sizeRect.top, NULL, NULL, GetModuleHandle(NULL), this ); nativeWindow = CreateWindowExA( 0, childClassName.c_str(), name, WS_CHILD, 0, 0, static_cast<int>(width), static_cast<int>(height), parentWindow, NULL, GetModuleHandle(NULL), this ); nativeDisplay = GetDC(nativeWindow); if (!nativeDisplay) { Destroy(); return false; } { Event event; event.Type = Event::EVENT_INIT_WINDOW; event.Time = GetTickCount64(); PushEvent(event); } return true; }
bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item) { #ifndef __WXWINCE__ long style = GetWindowLong((HWND) GetHWND(), GWL_STYLE); if (style & BS_BITMAP) { // Let default procedure draw the bitmap, which is defined // in the Windows resource. return false; } #endif LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT) item; HDC hDC = lpDIS->hDC; UINT state = lpDIS->itemState; bool isSelected = (state & ODS_SELECTED) != 0; bool autoDraw = (GetWindowStyleFlag() & wxBU_AUTODRAW) != 0; // choose the bitmap to use depending on the button state wxBitmap *bitmap; if ( isSelected && m_bmpSelected.Ok() ) bitmap = &m_bmpSelected; else if ( m_bmpHover.Ok() && IsMouseInWindow() ) bitmap = &m_bmpHover; else if ((state & ODS_FOCUS) && m_bmpFocus.Ok()) bitmap = &m_bmpFocus; else if ((state & ODS_DISABLED) && m_bmpDisabled.Ok()) bitmap = &m_bmpDisabled; else bitmap = &m_bmpNormal; if ( !bitmap->Ok() ) return false; // centre the bitmap in the control area int x = lpDIS->rcItem.left; int y = lpDIS->rcItem.top; int width = lpDIS->rcItem.right - x; int height = lpDIS->rcItem.bottom - y; int wBmp = bitmap->GetWidth(); int hBmp = bitmap->GetHeight(); #if wxUSE_UXTHEME if ( autoDraw && wxUxThemeEngine::GetIfActive() ) { MSWDrawXPBackground(this, item); wxUxThemeHandle theme(this, L"BUTTON"); // calculate content area margins // assuming here that each state is the same size MARGINS margins; wxUxThemeEngine::Get()->GetThemeMargins(theme, NULL, BP_PUSHBUTTON, PBS_NORMAL, TMT_CONTENTMARGINS, NULL, &margins); int marginX = margins.cxLeftWidth + 1; int marginY = margins.cyTopHeight + 1; int x1,y1; if ( m_windowStyle & wxBU_LEFT ) { x1 = x + marginX; } else if ( m_windowStyle & wxBU_RIGHT ) { x1 = x + (width - wBmp) - marginX; } else { x1 = x + (width - wBmp) / 2; } if ( m_windowStyle & wxBU_TOP ) { y1 = y + marginY; } else if ( m_windowStyle & wxBU_BOTTOM ) { y1 = y + (height - hBmp) - marginY; } else { y1 = y + (height - hBmp) / 2; } // draw the bitmap wxDCTemp dst((WXHDC)hDC); dst.DrawBitmap(*bitmap, x1, y1, true); return true; } #endif // wxUSE_UXTHEME int x1,y1; if(m_windowStyle & wxBU_LEFT) x1 = x + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_RIGHT) x1 = x + (width - wBmp) - (FOCUS_MARGIN+1); else x1 = x + (width - wBmp) / 2; if(m_windowStyle & wxBU_TOP) y1 = y + (FOCUS_MARGIN+1); else if(m_windowStyle & wxBU_BOTTOM) y1 = y + (height - hBmp) - (FOCUS_MARGIN+1); else y1 = y + (height - hBmp) / 2; if ( isSelected && autoDraw ) { x1++; y1++; } // draw the face, if auto-drawing if ( autoDraw ) { DrawFace((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } // draw the bitmap wxDCTemp dst((WXHDC)hDC); dst.DrawBitmap(*bitmap, x1, y1, true); // draw focus / disabled state, if auto-drawing if ( (state & ODS_DISABLED) && autoDraw ) { DrawButtonDisable((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, true); } else if ( (state & ODS_FOCUS) && autoDraw ) { DrawButtonFocus((WXHDC) hDC, lpDIS->rcItem.left, lpDIS->rcItem.top, lpDIS->rcItem.right, lpDIS->rcItem.bottom, isSelected); } return true; }