wxWidgets编程时碰到的问题及解答

1.主窗体接收不到按键事件的解决方法:(2009-11-18) wxEvtHandler::SetNextHandler方法。这是指定事件处理链中的下一个处理者的方法。感谢这个比所有窗口的基类wxWindow还祖宗的类所提供的这个设施,让那些子窗体接受到事件后直接串联到主窗体上就行了。遍历主窗体的所有子窗体(用GetChildren方法获得),对每个都调用->SetNextHandler(this),将主窗体串入其事件处理链: MainFrame::MainFrame() { //…… wxWindowList children = GetChildren(); for (wxWindowList::Node *i=children.GetFirst(); i; i=i->GetNext()) { i->GetData()->SetNextHandler(this); } } 实测,问题解决,逻辑正确,不用额外定义函数,不用派生类。另外对于“子又有子”这样的窗体对象结构,这个过程应该改为递归的。也许同样的或更好的解决方案网上早已有了,只是本人太笨而没搜索到,那么下面把我尝试过的关键词尽可能都列出来,以便搜索引擎索引,方便他人:wxWidgets,wxWindow,窗口,窗体,控件,焦点,按键,键盘,事件,拦截,KeyPreview,wxFrame,wxDialog,wxTopLevelWindow,wxKeyEvent,EVT_KEY_DOWN,EVT_KEY_UP,OnKeyUp,OnKeyDown

来自:http://www.cnblogs.com/ioriliao/archive/2009/10/09/1579843.html

2.全屏的实现: WxMediaCtrl控件在wxPanle中,wxPanle控件在wxFrame下面,实现wxMediaCtrl控件全屏的步骤如下:先,保存从wxFrame下面获取到的当前节点接着,隐藏wxFrame中的不应该出现的控件接着,通过ShowFullScreen()获取这个显示器的width和height 然后,移动整个控件的位置到屏幕之外将除去了边框的窗口设置成上一步得到的大小

3.最小化事件的实现: wxIconizeEvent

 4.代码所犯错误:指针未初始化在类中定义了了一个public类型的指针,没有进行初始化,当调用该指针使用的时候,会弹出错误类型。 “0x004141c2 处未处理的异常”。

 5.将子窗口的响应事件传递给上一层父窗口,可采用 在子窗口中设置标志,在父窗口中根据这个标记 进行操作。

6.将父窗口中的 父类对象传递给 子窗体,可以采用在子窗体中实现 setParent(parent* parent);在父窗口中调用该函数,就可以将这个父窗体传递给子窗体了。 7.窗体中的移动事件实现 void PipDialog::OnMove(wxMouseEvent&event) { wxPoint pt = event.GetPosition(); if (event.Dragging() && event.LeftIsDown()) { wxPoint pos = ClientToScreen(pt); Move(wxPoint(pos.x - m_delta.x, pos.y - m_delta.y)); } } void PipDialog::OnLeftDown(wxMouseEvent& evnt) { CaptureMouse(); //printf("Mouse captured/n"); wxPoint pos = ClientToScreen(evnt.GetPosition()); wxPoint origin = GetPosition(); int dx = pos.x - origin.x; int dy = pos.y - origin.y; m_delta = wxPoint(dx, dy); } void PipDialog::OnLeftUp(wxMouseEvent& event) { if(HasCapture()) ReleaseMouse(); } 8.不想让子窗体响应响应的父窗体的事件(例如鼠标的双击事件)只需要在子窗体中添加不想响应的事件(例如鼠标的双击事件),但是函数里面不需要填写代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值