您的位置:首页 > 其它

ubuntu下codeblocks起步(六)-上

2007-10-06 23:54 519 查看
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类上实现就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: