- if (flags & JOY_BUTTON1)
- buttons |= wxJOY_BUTTON1;
- if (flags & JOY_BUTTON2)
- buttons |= wxJOY_BUTTON2;
- if (flags & JOY_BUTTON3)
- buttons |= wxJOY_BUTTON3;
- if (flags & JOY_BUTTON4)
- buttons |= wxJOY_BUTTON4;
-
- wxJoystickEvent event(wxEVT_JOY_BUTTON_DOWN, buttons, joystick, change);
- event.SetPosition(wxPoint(x, y));
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-}
-
-void wxWindow::MSWOnJoyUp(int joystick, int x, int y, WXUINT flags)
-{
- int buttons = 0;
- int change = 0;
- if (flags & JOY_BUTTON1CHG)
- change = wxJOY_BUTTON1;
- if (flags & JOY_BUTTON2CHG)
- change = wxJOY_BUTTON2;
- if (flags & JOY_BUTTON3CHG)
- change = wxJOY_BUTTON3;
- if (flags & JOY_BUTTON4CHG)
- change = wxJOY_BUTTON4;
-
- if (flags & JOY_BUTTON1)
- buttons |= wxJOY_BUTTON1;
- if (flags & JOY_BUTTON2)
- buttons |= wxJOY_BUTTON2;
- if (flags & JOY_BUTTON3)
- buttons |= wxJOY_BUTTON3;
- if (flags & JOY_BUTTON4)
- buttons |= wxJOY_BUTTON4;
-
- wxJoystickEvent event(wxEVT_JOY_BUTTON_UP, buttons, joystick, change);
- event.SetPosition(wxPoint(x, y));
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-}
-
-void wxWindow::MSWOnJoyMove(int joystick, int x, int y, WXUINT flags)
-{
- int buttons = 0;
- if (flags & JOY_BUTTON1)
- buttons |= wxJOY_BUTTON1;
- if (flags & JOY_BUTTON2)
- buttons |= wxJOY_BUTTON2;
- if (flags & JOY_BUTTON3)
- buttons |= wxJOY_BUTTON3;
- if (flags & JOY_BUTTON4)
- buttons |= wxJOY_BUTTON4;
-
- wxJoystickEvent event(wxEVT_JOY_MOVE, buttons, joystick, 0);
- event.SetPosition(wxPoint(x, y));
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-}
-
-void wxWindow::MSWOnJoyZMove(int joystick, int z, WXUINT flags)
-{
- int buttons = 0;
- if (flags & JOY_BUTTON1)
- buttons |= wxJOY_BUTTON1;
- if (flags & JOY_BUTTON2)
- buttons |= wxJOY_BUTTON2;
- if (flags & JOY_BUTTON3)
- buttons |= wxJOY_BUTTON3;
- if (flags & JOY_BUTTON4)
- buttons |= wxJOY_BUTTON4;
-
- wxJoystickEvent event(wxEVT_JOY_ZMOVE, buttons, joystick, 0);
- event.SetZPosition(z);
- event.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(event);
-}
-
-void wxWindow::MSWOnVScroll(WXWORD wParam, WXWORD pos, WXHWND control)
-{
- if (control)
- {
- wxWindow *child = wxFindWinFromHandle(control);
- if ( child )
- child->MSWOnVScroll(wParam, pos, control);
- return;
- }
-
- wxScrollEvent event;
- event.SetPosition(pos);
- event.SetOrientation(wxVERTICAL);
- event.m_eventObject = this;
-
- switch ( wParam )
- {
- case SB_TOP:
- event.m_eventType = wxEVT_SCROLL_TOP;
- break;
-
- case SB_BOTTOM:
- event.m_eventType = wxEVT_SCROLL_BOTTOM;
- break;
-
- case SB_LINEUP:
- event.m_eventType = wxEVT_SCROLL_LINEUP;
- break;
-
- case SB_LINEDOWN:
- event.m_eventType = wxEVT_SCROLL_LINEDOWN;
- break;
-
- case SB_PAGEUP:
- event.m_eventType = wxEVT_SCROLL_PAGEUP;
- break;
-
- case SB_PAGEDOWN:
- event.m_eventType = wxEVT_SCROLL_PAGEDOWN;
- break;
-
- case SB_THUMBTRACK:
- case SB_THUMBPOSITION:
- event.m_eventType = wxEVT_SCROLL_THUMBTRACK;
- break;
-
- default:
- return;
- break;
- }
-
- if (!GetEventHandler()->ProcessEvent(event))
- Default();
-}
-
-void wxWindow::MSWOnHScroll( WXWORD wParam, WXWORD pos, WXHWND control)
-{
- if (control)
- {
- wxWindow *child = wxFindWinFromHandle(control);
- if ( child )
- child->MSWOnHScroll(wParam, pos, control);
- return;
- }
-
- wxScrollEvent event;
- event.SetPosition(pos);
- event.SetOrientation(wxHORIZONTAL);
- event.m_eventObject = this;
-
- switch ( wParam )
- {
- case SB_TOP:
- event.m_eventType = wxEVT_SCROLL_TOP;
- break;
-
- case SB_BOTTOM:
- event.m_eventType = wxEVT_SCROLL_BOTTOM;
- break;
-
- case SB_LINEUP:
- event.m_eventType = wxEVT_SCROLL_LINEUP;
- break;
-
- case SB_LINEDOWN:
- event.m_eventType = wxEVT_SCROLL_LINEDOWN;
- break;
-
- case SB_PAGEUP:
- event.m_eventType = wxEVT_SCROLL_PAGEUP;
- break;
-
- case SB_PAGEDOWN:
- event.m_eventType = wxEVT_SCROLL_PAGEDOWN;
- break;
-
- case SB_THUMBTRACK:
- case SB_THUMBPOSITION:
- event.m_eventType = wxEVT_SCROLL_THUMBTRACK;
- break;
-
- default:
- return;
- break;
- }
- if (!GetEventHandler()->ProcessEvent(event))
- Default();
-}
-
-void wxWindow::MSWOnShow(bool show, int status)
-{
- wxShowEvent event(GetId(), show);
- event.m_eventObject = this;
- GetEventHandler()->ProcessEvent(event);
-}
-
-bool wxWindow::MSWOnInitDialog(WXHWND WXUNUSED(hWndFocus))
-{
- wxInitDialogEvent event(GetId());
- event.m_eventObject = this;
- GetEventHandler()->ProcessEvent(event);
- return TRUE;
-}
-
-void wxWindow::InitDialog(void)
-{
- wxInitDialogEvent event(GetId());
- event.SetEventObject( this );
- GetEventHandler()->ProcessEvent(event);
-}
-
-// Default init dialog behaviour is to transfer data to window
-void wxWindow::OnInitDialog(wxInitDialogEvent& event)
-{
- TransferDataToWindow();
-}
-
-void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font)
-{
- TEXTMETRIC tm;
- HDC dc = ::GetDC((HWND) wnd);
- HFONT fnt =0;
- HFONT was = 0;
- if (the_font)
- {
-#if WXDEBUG > 1
- wxDebugMsg("wxGetCharSize: Selecting HFONT %X\n", fnt);
-#endif
-// the_font->UseResource();
-// the_font->RealizeResource();
- if ((fnt=(HFONT) the_font->GetResourceHandle()))
- was = (HFONT) SelectObject(dc,fnt) ;
- }
- GetTextMetrics(dc, &tm);
- if (the_font && fnt && was)
- {
-#if WXDEBUG > 1
- wxDebugMsg("wxGetCharSize: Selecting old HFONT %X\n", was);
-#endif
- SelectObject(dc,was) ;
- }
- ReleaseDC((HWND)wnd, dc);
- *x = tm.tmAveCharWidth;
- *y = tm.tmHeight + tm.tmExternalLeading;
-
-// if (the_font)
-// the_font->ReleaseResource();
-}
-
-// Returns 0 if was a normal ASCII value, not a special key. This indicates that
-// the key should be ignored by WM_KEYDOWN and processed by WM_CHAR instead.
-int wxCharCodeMSWToWX(int keySym)
-{
- int id = 0;
- switch (keySym)
- {
- case VK_CANCEL: id = WXK_CANCEL; break;
- case VK_BACK: id = WXK_BACK; break;
- case VK_TAB: id = WXK_TAB; break;
- case VK_CLEAR: id = WXK_CLEAR; break;
- case VK_RETURN: id = WXK_RETURN; break;
- case VK_SHIFT: id = WXK_SHIFT; break;
- case VK_CONTROL: id = WXK_CONTROL; break;
- case VK_MENU : id = WXK_MENU; break;
- case VK_PAUSE: id = WXK_PAUSE; break;
- case VK_SPACE: id = WXK_SPACE; break;
- case VK_ESCAPE: id = WXK_ESCAPE; break;
- case VK_PRIOR: id = WXK_PRIOR; break;
- case VK_NEXT : id = WXK_NEXT; break;
- case VK_END: id = WXK_END; break;
- case VK_HOME : id = WXK_HOME; break;
- case VK_LEFT : id = WXK_LEFT; break;
- case VK_UP: id = WXK_UP; break;
- case VK_RIGHT: id = WXK_RIGHT; break;
- case VK_DOWN : id = WXK_DOWN; break;
- case VK_SELECT: id = WXK_SELECT; break;
- case VK_PRINT: id = WXK_PRINT; break;
- case VK_EXECUTE: id = WXK_EXECUTE; break;
- case VK_INSERT: id = WXK_INSERT; break;
- case VK_DELETE: id = WXK_DELETE; break;
- case VK_HELP : id = WXK_HELP; break;
- case VK_NUMPAD0: id = WXK_NUMPAD0; break;
- case VK_NUMPAD1: id = WXK_NUMPAD1; break;
- case VK_NUMPAD2: id = WXK_NUMPAD2; break;
- case VK_NUMPAD3: id = WXK_NUMPAD3; break;
- case VK_NUMPAD4: id = WXK_NUMPAD4; break;
- case VK_NUMPAD5: id = WXK_NUMPAD5; break;
- case VK_NUMPAD6: id = WXK_NUMPAD6; break;
- case VK_NUMPAD7: id = WXK_NUMPAD7; break;
- case VK_NUMPAD8: id = WXK_NUMPAD8; break;
- case VK_NUMPAD9: id = WXK_NUMPAD9; break;
- case VK_MULTIPLY: id = WXK_MULTIPLY; break;
- case VK_ADD: id = WXK_ADD; break;
- case VK_SUBTRACT: id = WXK_SUBTRACT; break;
- case VK_DECIMAL: id = WXK_DECIMAL; break;
- case VK_DIVIDE: id = WXK_DIVIDE; break;
- case VK_F1: id = WXK_F1; break;
- case VK_F2: id = WXK_F2; break;
- case VK_F3: id = WXK_F3; break;
- case VK_F4: id = WXK_F4; break;
- case VK_F5: id = WXK_F5; break;
- case VK_F6: id = WXK_F6; break;
- case VK_F7: id = WXK_F7; break;
- case VK_F8: id = WXK_F8; break;
- case VK_F9: id = WXK_F9; break;
- case VK_F10: id = WXK_F10; break;
- case VK_F11: id = WXK_F11; break;
- case VK_F12: id = WXK_F12; break;
- case VK_F13: id = WXK_F13; break;
- case VK_F14: id = WXK_F14; break;
- case VK_F15: id = WXK_F15; break;
- case VK_F16: id = WXK_F16; break;
- case VK_F17: id = WXK_F17; break;
- case VK_F18: id = WXK_F18; break;
- case VK_F19: id = WXK_F19; break;
- case VK_F20: id = WXK_F20; break;
- case VK_F21: id = WXK_F21; break;
- case VK_F22: id = WXK_F22; break;
- case VK_F23: id = WXK_F23; break;
- case VK_F24: id = WXK_F24; break;
- case VK_NUMLOCK: id = WXK_NUMLOCK; break;
- case VK_SCROLL: id = WXK_SCROLL; break;
- default:
- {
- return 0;
- }
- }
- return id;
-}
-
-int wxCharCodeWXToMSW(int id, bool *isVirtual)
-{
- *isVirtual = TRUE;
- int keySym = 0;
- switch (id)
- {
- case WXK_CANCEL: keySym = VK_CANCEL; break;
- case WXK_CLEAR: keySym = VK_CLEAR; break;
- case WXK_SHIFT: keySym = VK_SHIFT; break;
- case WXK_CONTROL: keySym = VK_CONTROL; break;
- case WXK_MENU : keySym = VK_MENU; break;
- case WXK_PAUSE: keySym = VK_PAUSE; break;
- case WXK_PRIOR: keySym = VK_PRIOR; break;
- case WXK_NEXT : keySym = VK_NEXT; break;
- case WXK_END: keySym = VK_END; break;
- case WXK_HOME : keySym = VK_HOME; break;
- case WXK_LEFT : keySym = VK_LEFT; break;
- case WXK_UP: keySym = VK_UP; break;
- case WXK_RIGHT: keySym = VK_RIGHT; break;
- case WXK_DOWN : keySym = VK_DOWN; break;
- case WXK_SELECT: keySym = VK_SELECT; break;
- case WXK_PRINT: keySym = VK_PRINT; break;
- case WXK_EXECUTE: keySym = VK_EXECUTE; break;
- case WXK_INSERT: keySym = VK_INSERT; break;
- case WXK_DELETE: keySym = VK_DELETE; break;
- case WXK_HELP : keySym = VK_HELP; break;
- case WXK_NUMPAD0: keySym = VK_NUMPAD0; break;
- case WXK_NUMPAD1: keySym = VK_NUMPAD1; break;
- case WXK_NUMPAD2: keySym = VK_NUMPAD2; break;
- case WXK_NUMPAD3: keySym = VK_NUMPAD3; break;
- case WXK_NUMPAD4: keySym = VK_NUMPAD4; break;
- case WXK_NUMPAD5: keySym = VK_NUMPAD5; break;
- case WXK_NUMPAD6: keySym = VK_NUMPAD6; break;
- case WXK_NUMPAD7: keySym = VK_NUMPAD7; break;
- case WXK_NUMPAD8: keySym = VK_NUMPAD8; break;
- case WXK_NUMPAD9: keySym = VK_NUMPAD9; break;
- case WXK_MULTIPLY: keySym = VK_MULTIPLY; break;
- case WXK_ADD: keySym = VK_ADD; break;
- case WXK_SUBTRACT: keySym = VK_SUBTRACT; break;
- case WXK_DECIMAL: keySym = VK_DECIMAL; break;
- case WXK_DIVIDE: keySym = VK_DIVIDE; break;
- case WXK_F1: keySym = VK_F1; break;
- case WXK_F2: keySym = VK_F2; break;
- case WXK_F3: keySym = VK_F3; break;
- case WXK_F4: keySym = VK_F4; break;
- case WXK_F5: keySym = VK_F5; break;
- case WXK_F6: keySym = VK_F6; break;
- case WXK_F7: keySym = VK_F7; break;
- case WXK_F8: keySym = VK_F8; break;
- case WXK_F9: keySym = VK_F9; break;
- case WXK_F10: keySym = VK_F10; break;
- case WXK_F11: keySym = VK_F11; break;
- case WXK_F12: keySym = VK_F12; break;
- case WXK_F13: keySym = VK_F13; break;
- case WXK_F14: keySym = VK_F14; break;
- case WXK_F15: keySym = VK_F15; break;
- case WXK_F16: keySym = VK_F16; break;
- case WXK_F17: keySym = VK_F17; break;
- case WXK_F18: keySym = VK_F18; break;
- case WXK_F19: keySym = VK_F19; break;
- case WXK_F20: keySym = VK_F20; break;
- case WXK_F21: keySym = VK_F21; break;
- case WXK_F22: keySym = VK_F22; break;
- case WXK_F23: keySym = VK_F23; break;
- case WXK_F24: keySym = VK_F24; break;
- case WXK_NUMLOCK: keySym = VK_NUMLOCK; break;
- case WXK_SCROLL: keySym = VK_SCROLL; break;
- default:
- {
- *isVirtual = FALSE;
- keySym = id;
- break;
- }
- }
- return keySym;
-}
-
-// Caret manipulation
-void wxWindow::CreateCaret(int w, int h)
-{
- m_caretWidth = w;
- m_caretHeight = h;
- m_caretEnabled = TRUE;
-}
-
-void wxWindow::CreateCaret(const wxBitmap *WXUNUSED(bitmap))
-{
- // Not implemented
-}
-
-void wxWindow::ShowCaret(bool show)
-{
- if (m_caretEnabled)
- {
- if (show)
- ::ShowCaret((HWND) GetHWND());
- else
- ::HideCaret((HWND) GetHWND());
- m_caretShown = show;
- }
-}
-
-void wxWindow::DestroyCaret(void)
-{
- m_caretEnabled = FALSE;
-}
-
-void wxWindow::SetCaretPos(int x, int y)
-{
- ::SetCaretPos(x, y);
-}
-
-void wxWindow::GetCaretPos(int *x, int *y) const
-{
- POINT point;
- ::GetCaretPos(&point);
- *x = point.x;
- *y = point.y;
-}
-
-/*
- * Update iterator. Use from within OnPaint.
- */
-
-static RECT gs_UpdateRect;
-
-wxUpdateIterator::wxUpdateIterator(wxWindow* wnd)
-{
- current = 0; //start somewhere...
-#if defined(__WIN32__) && !defined(__win32s__)
- rlist = NULL; //make sure I don't free randomly
- int len = GetRegionData((HRGN) wnd->m_updateRgn,0,NULL); //Get buffer size
- if (len)
- {
- rlist = (WXRGNDATA *) (RGNDATA *)new char[len];
- GetRegionData((HRGN) wnd->m_updateRgn,len, (RGNDATA *)rlist);
- rp = (void *)(RECT*) ((RGNDATA *)rlist)->Buffer;
- rects = ((RGNDATA *)rlist)->rdh.nCount;
- }
- else
-#endif
- {
- gs_UpdateRect.left = wnd->m_updateRect.x;
- gs_UpdateRect.top = wnd->m_updateRect.y;
- gs_UpdateRect.right = wnd->m_updateRect.x + wnd->m_updateRect.width;
- gs_UpdateRect.bottom = wnd->m_updateRect.y + wnd->m_updateRect.height;
- rects = 1;
- rp = (void *)&gs_UpdateRect; //Only one available in Win16,32s
- }
-}
-
-wxUpdateIterator::~wxUpdateIterator(void)
-{
-#ifdef __WIN32__
-#ifndef __win32s__
- if (rlist) delete (RGNDATA *) rlist;
-#endif
-#endif
-}
-
-wxUpdateIterator::operator int (void)
-{
- if (current < rects)
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-wxUpdateIterator* wxUpdateIterator::operator ++(int)
-{
- current++;
- return this;
-}
-
-void wxUpdateIterator::GetRect(wxRect *rect)
-{
- RECT *mswRect = ((RECT *)rp)+current; //ought to error check this...
- rect->x = mswRect->left;
- rect->y = mswRect->top;
- rect->width = mswRect->right - mswRect->left;
- rect->height = mswRect->bottom - mswRect->top;
-}
-
-int wxUpdateIterator::GetX()
-{
- return ((RECT*)rp)[current].left;
-}
-
-int wxUpdateIterator::GetY()
-{
- return ((RECT *)rp)[current].top;
-}
-
-int wxUpdateIterator::GetW()
-{
- return ((RECT *)rp)[current].right-GetX();
-}
-
-int wxUpdateIterator::GetH()
-{
- return ((RECT *)rp)[current].bottom-GetY();
-}
-
-wxWindow *wxGetActiveWindow(void)
-{
- HWND hWnd = GetActiveWindow();
- if (hWnd != 0)
- {
- return wxFindWinFromHandle((WXHWND) hWnd);
- }
- return NULL;
-}
-
-// Windows keyboard hook. Allows interception of e.g. F1, ESCAPE
-// in active frames and dialogs, regardless of where the focus is.
-static HHOOK wxTheKeyboardHook = 0;
-static FARPROC wxTheKeyboardHookProc = 0;
-int APIENTRY _EXPORT
- wxKeyboardHook(int nCode, WORD wParam, DWORD lParam);
-
-void wxSetKeyboardHook(bool doIt)
-{
- if (doIt)
- {
- wxTheKeyboardHookProc = MakeProcInstance((FARPROC) wxKeyboardHook, wxGetInstance());
- wxTheKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) wxTheKeyboardHookProc, wxGetInstance(),
-#ifdef __WIN32__
- GetCurrentThreadId());
-// (DWORD)GetCurrentProcess()); // This is another possibility. Which is right?
-#else
- GetCurrentTask());
-#endif
- }
- else
- {
- UnhookWindowsHookEx(wxTheKeyboardHook);
- FreeProcInstance(wxTheKeyboardHookProc);
- }
-}
-
-int APIENTRY _EXPORT
- wxKeyboardHook(int nCode, WORD wParam, DWORD lParam)
-{
- DWORD hiWord = HIWORD(lParam);
- if (nCode != HC_NOREMOVE && ((hiWord & KF_UP) == 0))
- {
- int id;
- if ((id = wxCharCodeMSWToWX(wParam)) != 0)
- {
- wxKeyEvent event(wxEVT_CHAR_HOOK);
- if ((HIWORD(lParam) & KF_ALTDOWN) == KF_ALTDOWN)
- event.m_altDown = TRUE;
-
- event.m_eventObject = NULL;
- event.m_keyCode = id;
-/* begin Albert's fix for control and shift key 26.5 */
- event.m_shiftDown = (::GetKeyState(VK_SHIFT)&0x100?TRUE:FALSE);
- event.m_controlDown = (::GetKeyState(VK_CONTROL)&0x100?TRUE:FALSE);
-/* end Albert's fix for control and shift key 26.5 */
- event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */
-
- wxWindow *win = wxGetActiveWindow();
- if (win)
- {
- if (win->GetEventHandler()->ProcessEvent(event))
- return 1;
- }
- else
- {
- if ( wxTheApp && wxTheApp->ProcessEvent(event) )
- return 1;
- }
- }
- }
- return (int)CallNextHookEx(wxTheKeyboardHook, nCode, wParam, lParam);
-}
-
-void wxWindow::SetSizeHints(int minW, int minH, int maxW, int maxH, int WXUNUSED(incW), int WXUNUSED(incH))
-{
- m_minSizeX = minW;
- m_minSizeY = minH;
- m_maxSizeX = maxW;
- m_maxSizeY = maxH;
-}
-
-void wxWindow::Centre(int direction)
-{
- int x, y, width, height, panel_width, panel_height, new_x, new_y;
-
- wxWindow *father = (wxWindow *)GetParent();
- if (!father)
- return;
-
- father->GetClientSize(&panel_width, &panel_height);
- GetSize(&width, &height);
- GetPosition(&x, &y);
-
- new_x = -1;
- new_y = -1;
-
- if (direction & wxHORIZONTAL)
- new_x = (int)((panel_width - width)/2);
-
- if (direction & wxVERTICAL)
- new_y = (int)((panel_height - height)/2);
-
- SetSize(new_x, new_y, -1, -1);
-
-}
-
-/* TODO (maybe)
-void wxWindow::OnPaint(void)
-{
- PaintSelectionHandles();
-}
-*/
-
-void wxWindow::WarpPointer (int x_pos, int y_pos)
-{
- // Move the pointer to (x_pos,y_pos) coordinates. They are expressed in
- // pixel coordinates, relatives to the canvas -- So, we first need to
- // substract origin of the window, then convert to screen position
-
- int x = x_pos; int y = y_pos;
-/* Leave this to the app to decide (and/or wxScrolledWindow)
- x -= m_xScrollPosition * m_xScrollPixelsPerLine;
- y -= m_yScrollPosition * m_yScrollPixelsPerLine;
-*/
- RECT rect;
- GetWindowRect ((HWND) GetHWND(), &rect);
-
- x += rect.left;
- y += rect.top;
-
- SetCursorPos (x, y);
-}
-
-void wxWindow::MSWDeviceToLogical (float *x, float *y) const
-{
- // TODO
- // Do we have a SetUserScale in wxWindow too, so we can
- // get mouse events scaled?
-/*
- if (m_windowDC)
- {
- *x = m_windowDC->DeviceToLogicalX ((int) *x);
- *y = m_windowDC->DeviceToLogicalY ((int) *y);
- }
-*/
-}
-
-bool wxWindow::MSWOnEraseBkgnd (WXHDC pDC)
-{
- wxDC dc ;
-
- dc.SetHDC(pDC);
- dc.SetWindow(this);
- dc.BeginDrawing();
-
- wxEraseEvent event(m_windowId, &dc);
- event.m_eventObject = this;
- if (!GetEventHandler()->ProcessEvent(event))
- {
- dc.EndDrawing();
- dc.SelectOldObjects(pDC);
- return FALSE;
- }
- else
- {
- dc.EndDrawing();
- dc.SelectOldObjects(pDC);
- }
-
- dc.SetHDC((WXHDC) NULL);
- return TRUE;
-}
-
-void wxWindow::OnEraseBackground(wxEraseEvent& event)
-{
- RECT rect;
- ::GetClientRect((HWND) GetHWND(), &rect);
-
- HBRUSH hBrush = ::CreateSolidBrush(PALETTERGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
- int mode = ::SetMapMode((HDC) event.GetDC()->GetHDC(), MM_TEXT);
-
-// ::GetClipBox((HDC) event.GetDC()->GetHDC(), &rect);
- ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush);
- ::DeleteObject(hBrush);
- ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
-/*
- // Less efficient version (and doesn't account for scrolling)
- int w, h;
- GetClientSize(& w, & h);
- wxBrush *brush = wxTheBrushList->FindOrCreateBrush(& GetBackgroundColour(), wxSOLID);
- event.GetDC()->SetBrush(brush);
- event.GetDC()->SetPen(wxTRANSPARENT_PEN);
-
- event.GetDC()->DrawRectangle(0, 0, w+1, h+1);
-*/
-}
-
-#if WXWIN_COMPATIBILITY
-void wxWindow::SetScrollRange(int orient, int range, bool refresh)
-{
-#if defined(__WIN95__)
-
- int range1 = range;
-
- // Try to adjust the range to cope with page size > 1
- // - a Windows API quirk
- int pageSize = GetScrollPage(orient);
- if ( pageSize > 1 && range > 0)
- {
- range1 += (pageSize - 1);
- }
-
- SCROLLINFO info;
- int dir;
-
- if (orient == wxHORIZONTAL) {
- dir = SB_HORZ;
- } else {
- dir = SB_VERT;
- }
-
- info.cbSize = sizeof(SCROLLINFO);
- info.nPage = pageSize; // Have to set this, or scrollbar goes awry
- info.nMin = 0;
- info.nMax = range1;
- info.nPos = 0;
- info.fMask = SIF_RANGE | SIF_PAGE;
-
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- ::SetScrollInfo(hWnd, dir, &info, refresh);
-#else
- int wOrient ;
- if (orient == wxHORIZONTAL)
- wOrient = SB_HORZ;
- else
- wOrient = SB_VERT;
-
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- ::SetScrollRange(hWnd, wOrient, 0, range, refresh);
-#endif
-}
-
-void wxWindow::SetScrollPage(int orient, int page, bool refresh)
-{
-#if defined(__WIN95__)
- SCROLLINFO info;
- int dir;
-
- if (orient == wxHORIZONTAL) {
- dir = SB_HORZ;
- m_xThumbSize = page;
- } else {
- dir = SB_VERT;
- m_yThumbSize = page;
- }
-
- info.cbSize = sizeof(SCROLLINFO);
- info.nPage = page;
- info.nMin = 0;
- info.fMask = SIF_PAGE ;
-
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- ::SetScrollInfo(hWnd, dir, &info, refresh);
-#else
- if (orient == wxHORIZONTAL)
- m_xThumbSize = page;
- else
- m_yThumbSize = page;
-#endif
-}
-
-int wxWindow::OldGetScrollRange(int orient) const
-{
- int wOrient ;
- if (orient == wxHORIZONTAL)
- wOrient = SB_HORZ;
- else
- wOrient = SB_VERT;
-
-#if __WATCOMC__ && defined(__WINDOWS_386__)
- short minPos, maxPos;
-#else
- int minPos, maxPos;
-#endif
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- {
- ::GetScrollRange(hWnd, wOrient, &minPos, &maxPos);
-#if defined(__WIN95__)
- // Try to adjust the range to cope with page size > 1
- // - a Windows API quirk
- int pageSize = GetScrollPage(orient);
- if ( pageSize > 1 )
- {
- maxPos -= (pageSize - 1);
- }
-#endif
- return maxPos;
- }
- else
- return 0;
-}
-
-int wxWindow::GetScrollPage(int orient) const
-{
- if (orient == wxHORIZONTAL)
- return m_xThumbSize;
- else
- return m_yThumbSize;
-}
-#endif
-
-int wxWindow::GetScrollPos(int orient) const
-{
- int wOrient ;
- if (orient == wxHORIZONTAL)
- wOrient = SB_HORZ;
- else
- wOrient = SB_VERT;
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- {
- return ::GetScrollPos(hWnd, wOrient);
- }
- else
- return 0;
-}
-
-// This now returns the whole range, not just the number
-// of positions that we can scroll.
-int wxWindow::GetScrollRange(int orient) const
-{
- int wOrient ;
- if (orient == wxHORIZONTAL)
- wOrient = SB_HORZ;
- else
- wOrient = SB_VERT;
-
-#if __WATCOMC__ && defined(__WINDOWS_386__)
- short minPos, maxPos;
-#else
- int minPos, maxPos;
-#endif
- HWND hWnd = (HWND) GetHWND();
- if (hWnd)
- {
- ::GetScrollRange(hWnd, wOrient, &minPos, &maxPos);
-#if defined(__WIN95__)
- // Try to adjust the range to cope with page size > 1
- // - a Windows API quirk
- int pageSize = GetScrollPage(orient);
- if ( pageSize > 1 )
- {
- maxPos -= (pageSize - 1);
- }
- // October 10th: new range concept.
- maxPos += pageSize;
-#endif
-
- return maxPos;
- }
- else
- return 0;
-}
-
-int wxWindow::GetScrollThumb(int orient) const
-{
- if (orient == wxHORIZONTAL)
- return m_xThumbSize;
- else
- return m_yThumbSize;
-}
-
-void wxWindow::SetScrollPos(int orient, int pos, bool refresh)
-{
-#if defined(__WIN95__)
- SCROLLINFO info;
- int dir;