wxGridCellStringRenderer и SelectCell Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Re: wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Re: wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Re: wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Re: wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Re: wxGridCellStringRenderer и SelectCell

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
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Re: wxGridCellStringRenderer и SelectCell

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
Earned a small fee
Posts: 19
Joined: Sat Nov 28, 2009 4:45 pm
Location: Russia

Re: wxGridCellStringRenderer и SelectCell

Post by amk_tt » Sun Dec 09, 2012 2:05 pm

Мерцание возникает оттого, что контрол сперва стирается, а на его место рисуется обновлённое изображение. Если на это уходит менее 1/20 секунды, глаз просто ничего не успевает заметить. Но иногда этого времени не хватает.
Двойная буферизация (как в 3D-графике), устраняющая мерцание, при отрисовке GUI как правило не используется.

Post Reply