0

我有另一个关于事件和焦点的 wxWidgets 问题。

我已经在这里查看了教程和这个老问题,但我仍然遇到问题C++ 事件(焦点)处理

基本上我有一个包含两个 wxTextCtrl 元素和一个按钮的对话框。我想要实现的是,当我单击按钮时,它需要告诉我两个元素中的哪一个先前具有焦点。

在我的对话框的构造函数中,我创建了所有元素,然后将它们连接到事件处理程序,如下所示:Ttop->Connect(TOP,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus); Tbottom->Connect(BOTTOM,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus);

然后有一个事件处理程序可以确保 id 成为焦点

void UI_ADDENTRY::hasfocus(wxFocusEvent& event){
    focus= event.GetId();
    event.Skip();}

但是,当我尝试在 Button 函数中访问焦点时,它总是告诉我:0 而不是 TOP 或 BOTTOM / 我给 textcontrols 的 id

void UI_ADDENTRY::OnRecord(wxCommandEvent &event){
     wxString tmp;
     tmp << this->focus;
     wxMessageBox(tmp);}

我究竟做错了什么?有没有另一种方法可以找出两个文本框中的哪一个最后成为焦点?

谢谢

4

2 回答 2

0

最简单的方法是抓住EVT_SET_FOCUS你的文本控件并记住最后一个收到它的控件。这并不比您正在做的事情更困难,但应该可以毫无问题地工作。

不幸的是, FWIWEVT_KILL_FOCUS不能在所有平台上一致地实现,特别是 GTK+ 没有提供任何关于窗口焦点丢失的信息。

于 2013-09-13T11:11:31.947 回答
0

在想你的意思是 event.GetWindow().GetId()。虽然我不确定你是如何从 int 转换为 string 的。

于 2013-09-14T12:17:47.170 回答