⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 platwx.cpp

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    int h;    char s[2] = { ch, 0 };    hdc->GetTextExtent(sci2wx(s, 1), &w, &h);    return w;}#define EXTENT_TEST wxT(" `~!@#$%^&*()-_=+\\|[]{};:\"\'<,>.?/1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")int SurfaceImpl::Ascent(Font &font) {    SetFont(font);    int w, h, d, e;    hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e);    font.ascent = h - d;    return font.ascent;}int SurfaceImpl::Descent(Font &font) {    SetFont(font);    int w, h, d, e;    hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e);    return d;}int SurfaceImpl::InternalLeading(Font &WXUNUSED(font)) {    return 0;}int SurfaceImpl::ExternalLeading(Font &font) {    SetFont(font);    int w, h, d, e;    hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e);    return e;}int SurfaceImpl::Height(Font &font) {    SetFont(font);    return hdc->GetCharHeight() + 1;}int SurfaceImpl::AverageCharWidth(Font &font) {    SetFont(font);    return hdc->GetCharWidth();}int SurfaceImpl::SetPalette(Palette *WXUNUSED(pal), bool WXUNUSED(inBackGround)) {    return 0;}void SurfaceImpl::SetClip(PRectangle rc) {    hdc->SetClippingRegion(wxRectFromPRectangle(rc));}void SurfaceImpl::FlushCachedState() {}void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {    unicodeMode=unicodeMode_;}void SurfaceImpl::SetDBCSMode(int WXUNUSED(codePage)) {    // dbcsMode = codePage == SC_CP_DBCS;}Surface *Surface::Allocate() {    return new SurfaceImpl;}//----------------------------------------------------------------------inline wxWindow* GETWIN(WindowID id) { return (wxWindow*)id; }Window::~Window() {}void Window::Destroy() {    if (id) {        Show(FALSE);        GETWIN(id)->Destroy();    }    id = 0;}bool Window::HasFocus() {    return wxWindow::FindFocus() == GETWIN(id);}PRectangle Window::GetPosition() {    if (! id) return PRectangle();    wxRect rc(GETWIN(id)->GetPosition(), GETWIN(id)->GetSize());    return PRectangleFromwxRect(rc);}void Window::SetPosition(PRectangle rc) {    wxRect r = wxRectFromPRectangle(rc);    GETWIN(id)->SetSize(r);}void Window::SetPositionRelative(PRectangle rc, Window) {    SetPosition(rc);  // ????}PRectangle Window::GetClientPosition() {    if (! id) return PRectangle();    wxSize sz = GETWIN(id)->GetClientSize();    return  PRectangle(0, 0, sz.x, sz.y);}void Window::Show(bool show) {    GETWIN(id)->Show(show);}void Window::InvalidateAll() {    GETWIN(id)->Refresh(false);}void Window::InvalidateRectangle(PRectangle rc) {    wxRect r = wxRectFromPRectangle(rc);    GETWIN(id)->Refresh(false, &r);}void Window::SetFont(Font &font) {    GETWIN(id)->SetFont(*((wxFont*)font.GetID()));}void Window::SetCursor(Cursor curs) {    int cursorId;    switch (curs) {    case cursorText:        cursorId = wxCURSOR_IBEAM;        break;    case cursorArrow:        cursorId = wxCURSOR_ARROW;        break;    case cursorUp:        cursorId = wxCURSOR_ARROW; // ** no up arrow...  wxCURSOR_UPARROW;        break;    case cursorWait:        cursorId = wxCURSOR_WAIT;        break;    case cursorHoriz:        cursorId = wxCURSOR_SIZEWE;        break;    case cursorVert:        cursorId = wxCURSOR_SIZENS;        break;    case cursorReverseArrow:        cursorId = wxCURSOR_RIGHT_ARROW;        break;    case cursorHand:        cursorId = wxCURSOR_HAND;        break;    default:        cursorId = wxCURSOR_ARROW;        break;    }#ifdef __WXMOTIF__       wxCursor wc = wxStockCursor(cursorId) ;#else       wxCursor wc = wxCursor(cursorId) ;#endif    if(curs != cursorLast) {        GETWIN(id)->SetCursor(wc);        cursorLast = curs;    }}void Window::SetTitle (const char *s) {    GETWIN(id)->SetLabel (sci2wx(s));}//----------------------------------------------------------------------// Helper classes for ListBox// This is a simple subclass of wxListView that just resets focus to the// parent when it gets it.class wxSCIListBox : public wxListView {public:    wxSCIListBox (wxWindow* parent, wxWindowID id,                  const wxPoint& pos, const wxSize& size,                  long style) : wxListView() {#ifdef __WXMSW__        Hide(); // don't flicker as we move it around...#endif        Create(parent, id, pos, size, style);    }    void OnFocus(wxFocusEvent& event) {        GetParent()->SetFocus();        event.Skip();    }    void OnKillFocus(wxFocusEvent& WXUNUSED(event)) {        // Do nothing.  Prevents base class from resetting the colors...    }#ifdef __WXMAC__    // For some reason I don't understand yet the focus doesn't really leave    // the listbox like it should, so if we get any events feed them back to    // the wxSintilla    void OnKeyDown(wxKeyEvent& event) {        GetGrandParent()->GetEventHandler()->ProcessEvent(event);    }    void OnChar(wxKeyEvent& event) {        GetGrandParent()->GetEventHandler()->ProcessEvent(event);    }    // And we need to force the focus back when being destroyed    ~wxSCIListBox() {        GetGrandParent()->SetFocus();    }#endifprivate:    DECLARE_EVENT_TABLE()};BEGIN_EVENT_TABLE(wxSCIListBox, wxListView)    EVT_SET_FOCUS( wxSCIListBox::OnFocus)    EVT_KILL_FOCUS(wxSCIListBox::OnKillFocus)#ifdef __WXMAC__    EVT_KEY_DOWN(  wxSCIListBox::OnKeyDown)    EVT_CHAR(      wxSCIListBox::OnChar)#endifEND_EVENT_TABLE()#if wxUSE_POPUPWIN //-----------------------------------#include <wx/popupwin.h>// TODO: Refactor these two classes to have a common base (or a mix-in) to get// rid of the code duplication.  (Either that or convince somebody to// implement wxPopupWindow for the Mac!!)//// In the meantime, be careful to duplicate any changes as needed...// A popup window to place the wxSCIListBox uponclass wxSCIListBoxWin : public wxPopupWindow{private:    wxListView*         lv;    CallBackAction      doubleClickAction;    void*               doubleClickActionData;public:    wxSCIListBoxWin(wxWindow* parent, wxWindowID id, Point WXUNUSED(location)) :        wxPopupWindow(parent, wxBORDER_NONE)    {        SetBackgroundColour(*wxBLACK);  // for our simple border        lv = new wxSCIListBox(parent, id, wxDefaultPosition, wxDefaultSize,                              wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxBORDER_NONE);        lv->SetCursor(wxCursor(wxCURSOR_ARROW));        lv->InsertColumn(0, wxEmptyString);        lv->InsertColumn(1, wxEmptyString);        // NOTE: We need to fool the wxListView into thinking that it has the        // focus so it will use the normal selection colour and will look        // "right" to the user.  But since the wxPopupWindow or its children        // can't receive focus then we have to pull a fast one and temporarily        // parent the listctrl on the STC window and then call SetFocus and        // then reparent it back to the popup.        lv->SetFocus();        lv->Reparent(this);#ifdef __WXMSW__        lv->Show();#endif    }    // Set position in client coords    virtual void DoSetSize(int x, int y,                           int width, int height,                           int sizeFlags = wxSIZE_AUTO) {#if !wxCHECK_VERSION(2, 5, 0)        if (x != -1) {#else        if (x != wxDefaultCoord) {#endif            GetParent()->ClientToScreen(&x, NULL);        }#if !wxCHECK_VERSION(2, 5, 0)        if (y != -1) {#else        if (y != wxDefaultCoord) {#endif            GetParent()->ClientToScreen(NULL, &y);        }        wxPopupWindow::DoSetSize(x, y, width, height, sizeFlags);    }    // return position as if it were in client coords    virtual void DoGetPosition( int *x, int *y ) const {        int sx, sy;        wxPopupWindow::DoGetPosition(&sx, &sy);        GetParent()->ScreenToClient(&sx, &sy);        if (x) *x = sx;        if (y) *y = sy;    }    bool Destroy() {        if ( !wxPendingDelete.Member(this) )            wxPendingDelete.Append(this);        return true;    }    int IconWidth() {        wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL);        if (il != NULL) {            int w, h;            il->GetSize(0, w, h);            return w;        }        return 0;    }    void SetDoubleClickAction(CallBackAction action, void *data) {        doubleClickAction = action;        doubleClickActionData = data;    }    void OnFocus(wxFocusEvent& event) {        GetParent()->SetFocus();        event.Skip();    }    void OnSize(wxSizeEvent& event) {        // resize the child        wxSize sz = GetSize();        sz.x -= 2;        sz.y -= 2;        lv->SetSize(1, 1, sz.x, sz.y);        // reset the column widths        lv->SetColumnWidth(0, IconWidth()+4);        lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) -                           wxSystemSettings::GetMetric(wxSYS_VSCROLL_X));        event.Skip();    }    void OnActivate(wxListEvent& WXUNUSED(event)) {        doubleClickAction(doubleClickActionData);    }    wxListView* GetLB() { return lv; }private:    DECLARE_EVENT_TABLE()};BEGIN_EVENT_TABLE(wxSCIListBoxWin, wxPopupWindow)    EVT_SET_FOCUS          (          wxSCIListBoxWin::OnFocus)    EVT_SIZE               (          wxSCIListBoxWin::OnSize)    EVT_LIST_ITEM_ACTIVATED(wxID_ANY, wxSCIListBoxWin::OnActivate)END_EVENT_TABLE()#else // wxUSE_POPUPWIN -----------------------------------// A normal window to place the wxSCIListBox upon.class wxSCIListBoxWin : public wxWindow {private:    wxListView*         lv;    CallBackAction      doubleClickAction;    void*               doubleClickActionData;public:    wxSCIListBoxWin(wxWindow* parent, wxWindowID id, Point location) :        wxWindow(parent, id, wxPoint(location.x, location.y), wxSize(0,0), wxSIMPLE_BORDER) {        lv = new wxSCIListBox(this, id, wxDefaultPosition, wxDefaultSize,                              wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxNO_BORDER);        lv->SetCursor(wxCursor(wxCURSOR_ARROW));        lv->InsertColumn(0, wxEmptyString);        lv->InsertColumn(1, wxEmptyString);        // Eventhough we immediately reset the focus to the parent, this helps        // things to look right...        lv->SetFocus();        Hide();    }    // On OSX and (possibly others) there can still be pending    // messages/events for the list control when Scintilla wants to    // close it, so do a pending delete of it instead of destroying    // immediately.    bool Destroy() {#ifdef __WXMAC__        // The bottom edge of this window is not getting properly        // refreshed upon deletion, so help it out...        wxWindow* p = GetParent();        wxRect r(GetPosition(), GetSize());        r.SetHeight(r.GetHeight()+1);        p->Refresh(false, &r);#endif        if ( !wxPendingDelete.Member(this) )            wxPendingDelete.Append(this);        return true;    }    int IconWidth() {        wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL);        if (il != NULL) {            int w, h;            il->GetSize(0, w, h);            return w;        }        return 0;    }    void SetDoubleClickAction(CallBackAction action, void *data) {        doubleClickAction = action;        doubleClickActionData = data;    }    void OnFocus(wxFocusEvent& event) {        GetParent()->SetFocus();        event.Skip();    }    void OnSize(wxSizeEvent& event) {        // resize the child        wxSize sz = GetClientSize();        lv->SetSize(sz);        // reset the column widths        lv->SetColumnWidth(0, IconWidth()+4);        lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) -                           wxSystemSettings::GetMetric(wxSYS_VSCROLL_X));        event.Skip();    }#ifdef __WXMAC__    virtual bool Show(bool show = true) {        bool rv = wxWindow::Show(show);        GetParent()->Refresh(false);        return rv;    }#endif    void OnActivate(wxListEvent& WXUNUSED(event)) {        doubleClickAction(doubleClickActionData);    }    wxListView* GetLB() { return lv; }private:    DECLARE_EVENT_TABLE()};BEGIN_EVENT_TABLE(wxSCIListBoxWin, wxWindow)    EVT_SET_FOCUS          (          wxSCIListBoxWin::OnFocus)    EVT_SIZE               (          wxSCIListBoxWin::OnSize)    EVT_LIST_ITEM_ACTIVATED(wxID_ANY, wxSCIListBoxWin::OnActivate)END_EVENT_TABLE()#endif // wxUSE_POPUPWIN -----------------------------------inline wxSCIListBoxWin* GETLBW(WindowID win) {    return ((wxSCIListBoxWin*)win);}inline wxListView* GETLB(WindowID win) {    return GETLBW(win)->GetLB();}//----------------------------------------------------------------------class ListBoxImpl : public ListBox {private:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -