ubuntu下codeblocks起步(六)-上

ubuntu下codeblocks起步-按键响应


关于跨平台程序设计,下面是一网友说的一段话:

“跨平台也没有想象中的简单,所谓跨平台是通过大量的宏和条件编译实现的,很多类的数据和成员函数不是每个平台下都相同的,就连事件也是不同的平台各不一致,并且没有模拟实现。界面构件也没有模拟实现,这个平台有的别的平台没有。

例如指定的字体颜色常量比如wxLIGHT_GREY,在windows底下非常正常,转到GTK+2环境中简直暗淡得可以。还有许多,所以其跨平台的前提是你非常精通各个平台,在每个平台上都有相当经验,你才能在写代码之前非常明确的知道要注意什么,什么能写什么不能写。比如非windows平台的环境中窗体(wxFrame)本身就很有可能没有焦点的概念,捕抓不到键盘消息,要用wxPanel才可以。”

对于“非windows平台的环境中窗体(wxFrame)本身就很有可能没有焦点的概念”,我在ubuntu上实验过, wxFrame确实捕获不到按键消息。或是水平有限,没有发现,如果哪位大虾知道,还望指点小弟一二。:-) 所以本文的按键响应也是通过wxPanel来实现的。

下面的这个程序和上一篇文章(http://blog.csdn.net/Q_Jizi/archive/2007/10/05/1812062.aspx)的原理类似,只不过是通过键盘来控制物体的运动。


新建wxWidgets工程的Frame应用,方法如上篇文章。


向窗体中拖入一个wxPanel控件。

 

分别建立wxPanel控件的EVT_PAINT和EVT_KEY_DOWN事件的响应函数OnPanel1Paint和OnPanel1KeyDown函数。

修改Main.h文件:

为Frame类添加两个成员变量

private:

wxBitmap m_bmp;

wxPoint move;


打来Main.cpp文件,在frame的构造函数中初始化这两个变量:

m_bmp.LoadFile( _T("./bitmap1.bmp"),wxBITMAP_TYPE_BMP); //装载图片

move.x=70;

move.y=70; //设置图片的初始位置

下面是OnPanel1Paint函数:

void keyboardFrame::OnPanel1Paint(wxPaintEvent& event)

{


wxPaintDC dc(Panel1);

//因为要在 Panel1上显示图片,所以此处不是获得this的,而是 Panel1的

dc.DrawBitmap(m_bmp, move.x, move.y, true); //显示图片

}

OnPanel1KeyDown函数:

void keyboardFrame::OnPanel1KeyDown(wxKeyEvent& event)

{

long keycode;

keycode = event.GetKeyCode(); //获得键值

switch (keycode)

{

case WXK_LEFT:

move.x=move.x-5;

break;

case WXK_RIGHT:

move.x=move.x+5;

break;

case WXK_UP:

move.y=move.y-5;

break;

case WXK_DOWN:

move.y=move.y+5;

break;

}

Refresh();

Update(); //记住,此处Refresh()和Update()要一起用

}

此部分请参见:

http://www.wxwidgets.org/manuals/2.8.0/wx_wxkeyevent.html

http://www.wxwidgets.org/manuals/2.8.0/wx_keycodes.html#keycodes

最后别忘了头文件要

#include <wx/wx.h>

#include <wx/panel.h>

编译运行

 


这样,就可以通过上下左右键来控制“狮子”的运动了。其他的按键处理也类似。

在下一篇,我转载了一篇组合键响应,应该是在windows下实现的,因为在ubuntu下codeblocks的wxDialog类也不能接收按键响应。但原理和在windows下是一样的拉,只是在wxPanel类上实现就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值