关闭

ubuntu下codeblocks起步(六)-上

1266人阅读 评论(0) 收藏 举报

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类上实现就可以了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:160743次
    • 积分:2066
    • 等级:
    • 排名:第19155名
    • 原创:31篇
    • 转载:54篇
    • 译文:1篇
    • 评论:34条
    最新评论
    休闲