Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
-
borr_1
- Super wx Problem Solver

- Posts: 362
- Joined: Wed Mar 07, 2007 8:10 am
- Location: Russia, Shakhty
Post
by borr_1 » Wed Dec 05, 2012 6:43 am
Хочу подсвечивать определенные ячейки после попадания на них курсора делаю:
Code: Select all
class CursorCellRenderer : public wxGridCellStringRenderer
{
public:
virtual void Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc,
const wxRect& rect, int row, int col, bool isSelected)
{
//////////////////////////////////////////////////////////////////////////////
wxGridCellStringRenderer::Draw(grid, attr, dc, rect, row, col, isSelected); //
//////////////////////////////////////////////////////////////////////////////
wxColor color;
color.Set(73, 140, 214);
if(row == grid.GetCursorRow() && col == grid.GetCursorColumn())
dc.SetBrush(wxBrush(color));
else
dc.SetBrush(wxBrush(grid.GetDefaultCellBackgroundColour()));
dc.DrawRectangle(rect);
dc.DrawText(grid.GetCellValue(row, col), rect.GetX()+3, rect.GetY()+3);
}
};
//и
GridJournal->SetDefaultRenderer(new CursorCellRenderer);
Но для того чтобы по перемещению курсора ячейка подсвечивалась нужно делать все тот же Grid->Refresh(). Можно как-нибудь обойтись без него?
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
-
Mojo
- Super wx Problem Solver

- Posts: 401
- Joined: Wed Sep 21, 2005 8:17 am
- Location: Rostov-on-Don, Southern Russia
Post
by Mojo » Wed Dec 05, 2012 2:16 pm
А почему не нравится Refresh/ForceRefresh? Если это работает, то в чем проблема?
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
-
Mojo
- Super wx Problem Solver

- Posts: 401
- Joined: Wed Sep 21, 2005 8:17 am
- Location: Rostov-on-Don, Southern Russia
Post
by Mojo » Wed Dec 05, 2012 4:59 pm
Еще не понятно, курсор двигается мышкой или клавиатурой? Если клавиатурой, то у меня вот это работает:
Code: Select all
// В GUI
m_grid1->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( MainFrameBase::OnGridSelectCell ), NULL, this );
// В главном фрейме
void MainFrame::OnGridSelectCell( wxGridEvent& event )
{
m_grid1->ForceRefresh();
event.Skip();
}
Хоть и с Refresh, но работает все отлично.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
-
borr_1
- Super wx Problem Solver

- Posts: 362
- Joined: Wed Mar 07, 2007 8:10 am
- Location: Russia, Shakhty
Post
by borr_1 » Thu Dec 06, 2012 3:56 am
Какая разница чем он двигается, все равно селектцелл отрабатывает. Refresh/ForceRefresh нормально работает в Win 7 в более старых версиях Win видно мерцание при рефреш. И так бы мне не пришлось обрабатывать SelectCell и втыкать в него этот рефрешь - думал может я что-то не знаю.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
-
Mojo
- Super wx Problem Solver

- Posts: 401
- Joined: Wed Sep 21, 2005 8:17 am
- Location: Rostov-on-Don, Southern Russia
Post
by Mojo » Thu Dec 06, 2012 10:21 am
borr_1 wrote:Какая разница чем он двигается, все равно селектцелл отрабатывает. Refresh/ForceRefresh нормально работает в Win 7 в более старых версиях Win видно мерцание при рефреш. И так бы мне не пришлось обрабатывать SelectCell и втыкать в него этот рефрешь - думал может я что-то не знаю.
Ща проверил в Xubuntu 12.04 вообще не мерцает. Проверил в Win Vista не мерцает, но если клик попадает не в ячейку а на сетку, то заголовки рядов один раз моргает, но и то не каждый раз. Это все если мышкой кликать, если клавой, то вообще ничего не мерцает. Так же попробовал добавить кнопку и в нее рефреш, так же ничего не мерцает. Вечером на Win XP попробую, возможно, где-то у тебя, что-то не так.....
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
-
borr_1
- Super wx Problem Solver

- Posts: 362
- Joined: Wed Mar 07, 2007 8:10 am
- Location: Russia, Shakhty
Post
by borr_1 » Thu Dec 06, 2012 12:23 pm
пошел проверил на машине с XP все нормально... вроде... выходит у меня подсознание что-то не то выдало
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
-
Mojo
- Super wx Problem Solver

- Posts: 401
- Joined: Wed Sep 21, 2005 8:17 am
- Location: Rostov-on-Don, Southern Russia
Post
by Mojo » Thu Dec 06, 2012 2:41 pm
Я тоже проверил на ХР, работает отлично, даже при клике по сетке мерцания нет.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
-
amk_tt
- Earned a small fee

- Posts: 19
- Joined: Sat Nov 28, 2009 4:45 pm
- Location: Russia
Post
by amk_tt » Sun Dec 09, 2012 2:05 pm
Мерцание возникает оттого, что контрол сперва стирается, а на его место рисуется обновлённое изображение. Если на это уходит менее 1/20 секунды, глаз просто ничего не успевает заметить. Но иногда этого времени не хватает.
Двойная буферизация (как в 3D-графике), устраняющая мерцание, при отрисовке GUI как правило не используется.