使用下面看看链接的函数void kGUISystemX ::环路(无效)
这是我在Linux上使用的X Windows通过键盘和鼠标输入获得主循环。
http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp
这里是一个片段:
if(XPending(m_display))
{
XNextEvent(m_display, &m_e);
switch(m_e.type)
{
case MotionNotify:
m_mousex=m_e.xmotion.x;
m_mousey=m_e.xmotion.y;
break;
case ButtonPress:
switch(m_e.xbutton.button)
{
case Button1:
m_mouseleft=true;
break;
case Button3:
m_mouseright=true;
break;
case Button4:/* middle mouse wheel moved */
m_mousewheel=1;
break;
case Button5:/* middle mouse wheel moved */
m_mousewheel=-1;
break;
}
break;
case ButtonRelease:
switch(m_e.xbutton.button)
{
case Button1:
m_mouseleft=false;
break;
case Button3:
m_mouseright=false;
break;
}
break;
case KeyPress:
{
XKeyEvent *ke;
int ks;
int key;
ke=&m_e.xkey;
kGUI::SetKeyShift((ke->state&ShiftMask)!=0);
kGUI::SetKeyControl((ke->state&ControlMask)!=0);
ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0);
......
我觉得这个问题很广泛。直接与输入设备交谈? (通常对于高级应用程序来说是一个坏主意。)使用X? (如果X,控制台模式下的鼠标需要Xlib,XCB,Gtk +,Qt,...)GPM吗? – asveikau 2012-12-24 01:42:38