如何在Qt中处理Windows消息

 我来答
红茶_禹滖
2013-10-28 · TA获得超过123个赞
知道答主
回答量:189
采纳率:50%
帮助的人:122万
展开全部
1. 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 QSystemTrayIcon 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. } 小结:QT源码解析之Qt处理Windows消息的内容介绍完了,希望本文对你有帮助。来源:网络
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式