星期五, 七月 10, 2009

wxGrid如何catch key event?

在wxWidgets 2.8.10中,
想让wxGrid catch 键盘事件,比如光标,必须在建立wxGrid的时候,需要加入wxWANTS_CHARS.

Grid1 = new wxGrid(Panel1, ID_GRID1, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS, _T("ID_GRID1"));

其次:
加入事件定义,比如如下:

Connect(ID_GRID1,wxEVT_GRID_SELECT_CELL,(wxObjectEventFunction)&bonusFrame::OnGrid1CellLeftClick);

如下:
void bonusFrame::OnGrid1CellLeftClick(wxGridEvent& ev)
{
wxLogMessage(_T("Left click at row %d, col %d"), ev.GetRow(), ev.GetCol());
ev.Skip();//必须的。
}

这样就可以获得键盘光标事件了
经过一些列的需求驱动,发现了如何在wxFrame下,如何定义热键的方法
wxWidgets设计的非常的糟糕。
这里的文章很全面:

http://wiki.wxwidgets.org/Catching_key_events_globally