ListBox::ListBox() : Widget() { EnableResizing(true,true); pBackground = NULL; pForeground = NULL; color = -1; bAutohideScrollbar = true; FirstVisibleElement = 0; SelectedElement = -1; LastClickTime = 0; scrollbar.SetOnChangeMethod(MethodPointer(this,(WidgetCallbackWithNoParameter) (&ListBox::OnScrollbarChange))); Resize(GetMinimumSize().x,GetMinimumSize().y); }
void CDiagramCombobox::Draw( CDC* dc, CRect rect ) /* ============================================================ Function : CDiagramCombobox::Draw Description : Draws the "control" Return : void Parameters : CDC* dc - CDC to draw to CRect rect - Total object rect (zoomed) Usage : ============================================================*/ { CStdGrfx::drawsunkenframed3dWindow( dc, rect ); LOGFONT lf; GetFont( lf ); dc->SetBkMode( TRANSPARENT ); dc->SetTextColor( ::GetSysColor( COLOR_BTNTEXT ) ); CRect rectArrow( rect ); rectArrow.left = rectArrow.right - ( int ) ( ( double ) GetMinimumSize().cy * GetZoom() ); rectArrow.InflateRect( -2, -2 ); CStdGrfx::drawframed3dBox( dc, rectArrow ); CFont chk; chk.CreateFont( lf.lfHeight, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DECORATIVE, "Marlett" ); dc->SelectObject( &chk ); dc->DrawText( "u", rectArrow, DT_VCENTER | DT_SINGLELINE | DT_CENTER ); dc->SelectStockObject( DEFAULT_GUI_FONT ); }
PixelSize NullWidget::GetMaximumSize() const { /* map to GetMinimumSize() by default, so simple derived classes need to implement only GetMinimumSize() */ return GetMinimumSize(); }
ScrollBar::ScrollBar() : Widget() { color = -1; MinValue = 1; MaxValue = 1; CurrentValue = 1; bigStepSize = 10; bDragSlider = false; EnableResizing(false,true); UpdateArrowButtonSurface(); Arrow1.SetOnClickMethod(MethodPointer(this,(WidgetCallbackWithNoParameter) (&ScrollBar::OnArrow1))); Arrow2.SetOnClickMethod(MethodPointer(this,(WidgetCallbackWithNoParameter) (&ScrollBar::OnArrow2))); pBackground = NULL; Resize(GetMinimumSize().x,GetMinimumSize().y); }
LRESULT OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { BOOL Horizontal = (BOOL) wParam; if (Horizontal != IsHorizontal) { IsHorizontal = Horizontal; if (IsHorizontal) SetWindowTheme(m_hWnd, L"TrayNotifyHoriz", NULL); else SetWindowTheme(m_hWnd, L"TrayNotifyVert", NULL); } return (LRESULT) GetMinimumSize((PSIZE) lParam); }
void GxDock::myClampFloatSize(GxVec2i dir) { GxVec2i sizeMin = GetMinimumSize(); if(myFloatRect.w < sizeMin.x) { if(dir.x < 0) myFloatRect.x -= (sizeMin.x - myFloatRect.w); myFloatRect.w = sizeMin.x; } if(myFloatRect.h < sizeMin.y) { if(dir.y < 0) myFloatRect.y -= (sizeMin.y - myFloatRect.h); myFloatRect.h = sizeMin.y; } }
void CDiagramEntity::SetRect( double left, double top, double right, double bottom ) /* ============================================================ Function : CDiagramEntity::SetRect Description : Sets the object rect. Return : void Parameters : double left - Left edge double top - Top edge double right - Right edge double bottom - Bottom edge Usage : Call to place the object. ============================================================*/ { SetLeft( left ); SetTop( top ); SetRight( right ); SetBottom( bottom ); if( GetMinimumSize().cx != -1 ) if( GetRect().Width() < GetMinimumSize().cx ) SetRight( GetLeft() + GetMinimumSize().cx ); if( GetMinimumSize().cy != -1 ) if( GetRect().Height() < GetMinimumSize().cy ) SetBottom( GetTop() + GetMinimumSize().cy ); if( GetMaximumSize().cx != -1 ) if( GetRect().Width() > GetMaximumSize().cx ) SetRight( GetLeft() + GetMaximumSize().cx ); if( GetMaximumSize().cy != -1 ) if( GetRect().Height() > GetMaximumSize().cy ) SetBottom( GetTop() + GetMaximumSize().cy ); if( GetPropertySheet() ) GetPropertySheet()->SetValues(); }
GMessage::Result GWindow::OnEvent(GMessage *Msg) { int Status = 0; switch (MsgCode(Msg)) { case M_SET_WINDOW_PLACEMENT: { /* Apparently if you use SetWindowPlacement inside the WM_CREATE handler, then the restored rect doesn't "stick", it gets stomped on by windows. So this code... RESETS it to be what we set earlier. Windows sucks. */ if (d->Wp) { if (_View) { GRect r = d->Wp->rcNormalPosition; if (!GView::Visible()) { d->Wp->showCmd = SW_HIDE; } #if DEBUG_WINDOW_PLACEMENT LgiTrace("%s:%i - SetWindowPlacement, pos=%s, show=%i\n", __FILE__, __LINE__, r.GetStr(), d->Wp->showCmd); #endif SetWindowPlacement(_View, d->Wp); } DeleteObj(d->Wp); } break; } case WM_SYSCOLORCHANGE: { LgiInitColours(); break; } case WM_WINDOWPOSCHANGING: { bool Icon = IsIconic(Handle()); bool Zoom = IsZoomed(Handle()); if (!Icon && (_Dialog || !Zoom)) { WINDOWPOS *Info = (LPWINDOWPOS) Msg->b; if (!Info) break; if (Info->flags == (SWP_NOSIZE | SWP_NOMOVE) && _Dialog) { // Info->flags |= SWP_NOZORDER; Info->hwndInsertAfter = _Dialog->Handle(); } if (GetMinimumSize().x && GetMinimumSize().x > Info->cx) { Info->cx = GetMinimumSize().x; } if (GetMinimumSize().y && GetMinimumSize().y > Info->cy) { Info->cy = GetMinimumSize().y; } RECT Rc; if (d->SnapToEdge && SystemParametersInfo(SPI_GETWORKAREA, 0, &Rc, SPIF_SENDCHANGE)) { GRect r = Rc; GRect p(Info->x, Info->y, Info->x + Info->cx - 1, Info->y + Info->cy - 1); if (r.Valid() && p.Valid()) { int Snap = 12; if (abs(p.x1 - r.x1) <= Snap) { // Snap left edge Info->x = r.x1; } else if (abs(p.x2 - r.x2) <= Snap) { // Snap right edge Info->x = r.x2 - Info->cx + 1; } if (abs(p.y1 - r.y1) <= Snap) { // Snap top edge Info->y = r.y1; } else if (abs(p.y2 - r.y2) <= Snap) { // Snap bottom edge Info->y = r.y2 - Info->cy + 1; } } } } break; } case WM_SIZE: { if (Visible()) { GWindowZoom z = d->Show; switch (Msg->a) { case SIZE_MINIMIZED: { z = GZoomMin; break; } case SIZE_MAXIMIZED: { z = GZoomMax; break; } case SIZE_RESTORED: { z = GZoomNormal; break; } } if (z != d->Show) { OnZoom(d->Show = z); } } Status = GView::OnEvent(Msg); break; } case WM_ACTIVATE: { // This is a hack to make Windows set the focus of a child // control when you Alt-Tab in and out of a top level window if (LOWORD(Msg->a) != WA_INACTIVE) { /* // gaining focus if (LastFocus) { if (In_SetWindowPos) { assert(0); LgiTrace("%s:%i - %s->SetFocus()\n", __FILE__, __LINE__, GetClass()); } SetFocus(LastFocus); LastFocus = 0; } if (d->Focus && d->Focus->Handle()) { if (In_SetWindowPos) { assert(0); LgiTrace("%s:%i - %s->SetFocus()\n", __FILE__, __LINE__, GetClass()); } else { ::SetFocus(d->Focus->Handle()); } } */ } /* else { // losing focus LastFocus = 0; HWND f = GetFocus(); for (HWND p = ::GetParent(f); p; p = ::GetParent(p)) { if (p == Handle()) { LastFocus = f; } } } */ break; } case WM_CREATE: { Pour(); OnCreate(); if (!_Default) { _Default = FindControl(IDOK); if (_Default) { _Default->Invalidate(); } } d->InCreate = false; if (d->Wp) { PostEvent(M_SET_WINDOW_PLACEMENT); } break; } case WM_WINDOWPOSCHANGED: { DeleteObj(d->Wp); Status = GView::OnEvent(Msg); break; } case WM_QUERYENDSESSION: case WM_CLOSE: { bool QuitApp; if (QuitApp = OnRequestClose(MsgCode(Msg) == WM_QUERYENDSESSION)) { Quit(); } if (MsgCode(Msg) == WM_CLOSE) { return 0; } else { return QuitApp; } break; } case WM_SYSCOMMAND: { if (Msg->a == SC_CLOSE) { if (OnRequestClose(false)) { Quit(); } return 0; } else { Status = GView::OnEvent(Msg); } break; } case WM_DROPFILES: { HDROP hDrop = (HDROP) Msg->a; if (hDrop) { GArray<char*> FileNames; int Count = 0; Count = DragQueryFileW(hDrop, -1, NULL, 0); for (int i=0; i<Count; i++) { char16 FileName[256]; if (DragQueryFileW(hDrop, i, FileName, sizeof(FileName)-1) > 0) { FileNames.Add(LgiNewUtf16To8(FileName)); } } OnReceiveFiles(FileNames); FileNames.DeleteArrays(); } break; } case M_HANDLEMOUSEMOVE: { // This receives events fired from the GMouseHookPrivate class so that // non-LGI windows create mouse hook events as well. GTempView v((OsView)MsgB(Msg)); GMouse m; m.x = LOWORD(MsgA(Msg)); m.y = HIWORD(MsgA(Msg)); HandleViewMouse(&v, m); break; } case M_COMMAND: { HWND OurWnd = Handle(); // copy onto the stack, because // we might lose the 'this' object in the // OnCommand handler which would delete // the memory containing the handle. Status = OnCommand(Msg->a, 0, (HWND) Msg->b); if (!IsWindow(OurWnd)) { // The window was deleted so break out now break; } // otherwise fall thru to the GView handler } default: { Status = GView::OnEvent(Msg); break; } } return Status; }