--- nono/wx/wxdipswwindow.cpp 2026/04/29 17:05:16 1.1 +++ nono/wx/wxdipswwindow.cpp 2026/04/29 17:05:58 1.1.1.5 @@ -71,18 +71,12 @@ WXDipswWindow::WXDipswWindow(wxWindow *p for (int i = 0; i < ndipsw; i++) { auto *ctl = new WXScrollBar(this, ID_DIPSW(i), wxSB_VERTICAL); ctl->SetScrollParam(0, 1, 2, 1); - auto sz = ctl->GetClientSize(); - sz.y = sz.x * 5 / 3; // ちょっと伸ばす - ctl->SetClientSize(sz.x, sz.y); - ctl->SetMinClientSize(sz); swctl.push_back(ctl); // スクロールイベントをこっちに接続 - ctl->Connect(NONO_EVT_SCROLL, - wxScrollEventHandler(WXDipswWindow::OnScroll), NULL, this); + ctl->Bind(NONO_EVT_SCROLL, &WXDipswWindow::OnScroll, this); } - // DIPSW ボックス for (int n = 0; n < ndipsw / 8; n++) { if (n > 0) { @@ -107,8 +101,8 @@ WXDipswWindow::WXDipswWindow(wxWindow *p auto *vbox = new wxBoxSizer(wxVERTICAL); vbox->AddSpacer(3); vbox->Add(new wxStaticText(this, wxID_ANY, - string_format("%d", i + 1))); - vbox->Add(swctl[n * 8 + i]); + string_format("%d", i + 1)), 0, wxALIGN_CENTER_HORIZONTAL); + vbox->Add(swctl[n * 8 + i], 0, wxALIGN_CENTER_HORIZONTAL); vbox->AddSpacer(3); swbox->Add(vbox, 1, wxALIGN_CENTER); @@ -118,11 +112,11 @@ WXDipswWindow::WXDipswWindow(wxWindow *p } SetSizer(topsizer); - DoSize(); + FontChanged(); // 現在値を反映 for (int i = 0; i < ndipsw; i++) { - int pos = swdev->GetPosition(i); + uint pos = swdev->GetPosition(i); swctl[i]->SetThumbPosition(pos); } } @@ -132,12 +126,31 @@ WXDipswWindow::~WXDipswWindow() { } +// フォントサイズ変更 +void +WXDipswWindow::FontChanged() +{ + // 子コントロールに先に反映させる + inherited::FontChanged(); + + // スクロールバーの幅はフォントサイズで変わるので、 + // 高さをそれに連動させる。 + wxSize size = swctl[0]->GetSize(); + size.y = size.x * 5 / 3; + for (auto *ctl : swctl) { + ctl->SetSize(size); + ctl->SetMinSize(size); + } + + Fit(); +} + // スクロール位置変更通知 void WXDipswWindow::OnScroll(wxScrollEvent& event) { - int n = event.GetId() - ID_DIPSW0; - int pos = event.GetPosition(); + uint n = event.GetId() - ID_DIPSW0; + uint pos = event.GetPosition(); swdev->SetPosition(n, pos); }