Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1633621
  • 博文数量: 584
  • 博客积分: 13857
  • 博客等级: 上将
  • 技术积分: 11883
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 09:34

分类: WINDOWS

2011-04-23 23:44:08

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

bool QApplication::winEventFilter ( MSG * ) [虚] 

消息程序在每次接受到消息时调个函数。如果你想Qt理的窗口消息msg重新实现这个函数。 

  1. bool MainWindow::winEvent(MSG* pMsg)
  2. {
  3.  if ( pMsg->message == WM_COPYDATA )
  4.  {
  5.   COPYDATASTRUCT* pCopyDataStruct;
  6.   POSTERS_REC_STRUCT* pRec;
  7.   unsigned char* odapMsgPtr[MAX_POSTERS_SIZE];
  8.   QString str;
  9.   pCopyDataStruct = (COPYDATASTRUCT*) pMsg->lParam;

  10.   switch (pCopyDataStruct->dwData)
  11.   {
  12.   case VALID_REC1 :
  13.   case VALID_REC2 :
  14.    {
  15.     (void)memcpy(odapMsgPtr, pCopyDataStruct->lpData, pCopyDataStruct->cbData);

  16.     if (odapMsgPtr != NULL)
  17.     {
  18.      pRec = (POSTERS_REC_STRUCT *)odapMsgPtr;
  19.      class_data1 = pRec->var1;
  20.      class_data2 = pRec->var2;
  21.     }
  22.    }
  23.   }

  24.   return true;
  25.  }
  26.  else
  27.   return false;
  28. }

  29. Some Code on the web gives another example

  30. #ifdef HAVE_WIN32_API
  31.   virtual bool winEventFilter(MSG * msg) {
  32.     SPW_InputEvent sbEvent;
  33.     if (SPW_TranslateEventWin32(msg, &sbEvent)) {
  34.       QWidget * focus = this->focusWidget();
  35.       if (!focus) focus = this->activeWindow();
  36.       if (focus) {
  37.         QCustomEvent qevent((QEvent::Type)SoQtInternal::SPACEBALL_EVENT,
  38.                             (void *)&sbEvent);
  39.         QApplication::sendEvent(focus, &qevent);
  40.       }
  41.     }
  42. #if (QT_VERSION >= 0x040000)
  43.     long result = 0;
  44.     return QApplication::winEventFilter(msg, &result);
  45. #else
  46.     return QApplication::winEventFilter(msg);
  47. #endif

The  class provides an icon for an application in the system tray.

Modern operating systems usually provide a special area on the desktop, called the system tray or notification area, where long-running applications can display icons and short messages.


  1. /* translates a Win32 event to a SPW_InputEvent. */
  2. int SPW_TranslateEventWin32(MSG * msg, SPW_InputEvent * sbEvent)
  3. {
  4.   SiSpwEvent spwEvent;
  5.   SiGetEventData eventdata;

  6.   if (Spw_DeviceHandle != SI_NO_HANDLE) {

  7.     SiGetEventWinInit (&eventdata, msg->message, msg->wParam, msg->lParam);
  8.     if (SiGetEvent (Spw_DeviceHandle, 0, &eventdata, &spwEvent) == SI_IS_EVENT) {

  9.       int i;
  10.       switch(spwEvent.type) {
  11.         case SI_MOTION_EVENT:
  12.           sbEvent->type = SPW_InputMotionEvent;
  13.           for(i=0; i<6; i++) {
  14.             sbEvent->sData[i] = (short)spwEvent.u.spwData.mData[i];
  15.           }
  16.           break;
  17.         case SI_BUTTON_EVENT:
  18.           sbEvent->type = SPW_InputButtonPressEvent;
  19.           sbEvent->buttonState.pressed = (SiButtonPressed(&spwEvent) != SI_NO_BUTTON);
  20.           sbEvent->buttonState.released = (SiButtonReleased(&spwEvent) != SI_NO_BUTTON);
  21.           break;
  22.       }
  23.       return TRUE;
  24.     }
  25.   }
  26.   return FALSE;
  27. }


阅读(1893) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~