Class们的分工合作安排,消息的传递。

博客围绕CCursor类和CDesktop类的合作展开,从CCursor类获取鼠标事件信息并传递给CDesktop类执行命令。介绍了CDesktop类保存的桌面数据,还详细阐述了处理鼠标缓冲区数据的函数,该函数能记录鼠标按钮变化等信息,处理结果用于传递给CDesktop处理鼠标事件。

现在,有了CCursor类,有了CDesktop类,要开始考虑它们的合作问题了。

首先我的基本想法是从CCursor类得到鼠标的事件信息,把按钮状态、指针位置的信息传递给CDesktop,CDesktop根据相应的消息,执行指定的命令。

CDesktop类保存的桌面数据:

当前焦点窗口:一个CWin*指针,处于最上方的窗口。
当前焦点控件:一个CWin*指针,当前激活窗口用有焦点的控件。
当前鼠标指针状态:一个bool类型变量,表示正常,拖拽(焦点窗口跟随鼠标指针移动)两种情况。
拖拽源(窗口/控件):一个CWin*指针,在松开鼠标的时候,如果放下的目标区域在一个窗口内,则传递DragDrop消息给目标窗口,参数为拖拽源的指针。拖拽常常应用于装备、物品等等拖放行为之上。
拖拽X偏移,拖拽Y偏移:int变量,鼠标指针拖起窗口时相对窗口left, top的偏移量。用于更新窗口位置。

双击判断的问题:

几经修改,处理鼠标缓冲区的函数已经完善了。它能够记录鼠标按钮变化的次数,以及Z轴的偏移,还有双击次数,单击次数等等。双击由于最长用的是左键双击,所以只关注了左键双击的行为。

处理函数如下:

// 处理鼠标缓冲区的数据
void CCursor::GetMouseData(MOUSE_EVENT_STRUCT *e)
{
 if ( ! e ) // 无效参数
  return ;

 // 清空输出
 memset( e, 0, sizeof( MOUSE_EVENT_STRUCT ) );

 DIDEVICEOBJECTDATA od;
 HRESULT hr;
 DWORD dwCount = 1;    // 缓冲区数据条数
 static DWORD dwLastDown = 0;  // 上次按下的时间
 static DWORD dwLastDblClick = 0; // 上次双击的时间
 DWORD dwNowDown = 0;    // 这次按下的时间
 BOOL  bDblClicked = false;   // 返回是否双击

 while ( TRUE )
 {
  dwCount = 1;
  // 获取鼠标缓冲区数据
  hr = m_lpDIMouse->GetDeviceData( sizeof( DIDEVICEOBJECTDATA ), &od , &dwCount , 0 );
  if ( hr == DIERR_INPUTLOST )
  {
   // 鼠标设备丢失, 恢复并返回
   m_lpDIMouse->Acquire();
   return ;
  }

  // 数据获取失败, 或者缓冲区已经获取完毕
  if ( (FAILED ( hr )) || (dwCount == 0) )
   break;

  // 处理缓冲内容
  switch ( od.dwOfs )
  {
  case DIMOFS_X:
   // X 偏移;

  case DIMOFS_Y:
   // Y 偏移
   break;

  case DIMOFS_Z:
   // Z 偏移 ( 鼠标滚轮 )
   e->nMouseWheel += (short)od.dwData;
   break;

  case DIMOFS_BUTTON0:
   if ( od.dwData & 0x80)
   {
    // 左键按下
    if ( dwLastDown == 0 )
     dwLastDown = od.dwTimeStamp;
    else
     dwNowDown = od.dwTimeStamp;
    e->bLButtonDown ++;
   }else{
    // 左键松开
    e->bRButtonUp ++;
   }
   break;

  case DIMOFS_BUTTON1:
   if ( od.dwData & 0x80)
   {
    // 右键按下
    e->bRButtonDown ++;
   }else{
    // 右键松开
    e->bRButtonUp ++;
   }
   break;
  }

  // 检查是否有双击事件, 时间在 系统设定有效双击区间 的两次点击视为有效双击.
  if ( dwNowDown )
   if ( (dwNowDown - dwLastDown) < m_dblClickTime )
   {
    e->nDblClicked ++;
    dwLastDown = 0;
   } else if ( dwNowDown - dwLastDown > m_dblClickTime ){
    // 超时, 重置时间
    dwLastDown = dwNowDown;
   }

 } // end while
 return ;
}



其中参数 e 是一个 MOUSE_EVENT_STRUCT,这个参数将会返回这次缓冲区数据处理的结果,用于跟指针坐标一齐传递CDesktop处理鼠标事件。这个变量结构如下:

 static struct MOUSE_EVENT_STRUCT{
  BOOL DblClicked; // 有效双击(次数)
  BOOL LButtonUp; // 左键曾经松开
  BOOL RButtonUp; // 右键曾经松开
  BOOL LButtonDown; // 左键曾经按下 (单击次数, 单击.)
  BOOL RButtonDown; // 右键曾经按下
  int nMouseWheel; // 滚轮偏移量
 };

<think>嗯,用户想基于DeepSeek部署一个问答系统,同时还要有数字人形象和语音交互功能,再加上爬取就业信息和优化简历的功能,分成六个并行任务模块。首先,我得理清楚各个部分之间的关系和依赖。 首先,知识库构建是关键,可能需要数据爬取和清洗。然后,问答系统需要模型接口开发,可能用DeepSeek-R1或者API。数字人形象可能需要3D建模和动画引擎,比如Unity或者UE。语音交互的话,语音合成和识别模块需要集成,比如用Azure或阿里云的API。 接下来,优化简历功能需要自然语言处理来分析职位要求,可能用NLP模型来匹配关键词。任务分工方面,得考虑哪些模块可以并行开发。比如数据爬取和知识库构建可以同时进行,数字人形象和语音交互可能也是独立的模块。最后整合测试阶段需要协调各个模块。 需要确保每个模块之间有清晰的接口,比如知识库的API如何被问答系统调用,语音交互如何触发数字人的动画。可能还需要考虑多线程或分布式处理,特别是爬虫部分可能需要并发抓取数据。另外,简历优化部分可能需要机器学习模型,这部分的数据训练和部署也要安排好。 还要注意用户提到的结合优化简历主题,所以在任务分工里可能需要一个专门的模块来处理简历分析和优化逻辑。最后,系统整合的时候要测试各个模块的协同工作,比如用户通过语音提问,数字人回应,同时系统能提供简历建议。 可能的问题是如何处理不同模块之间的通信和数据格式统一,比如语音识别的结果如何传递给问答系统,知识库的数据如何被简历优化模块使用。需要定义好API的数据结构,确保兼容性。另外,部署时可能需要考虑服务器资源分配,特别是同时运行多个模块时的性能问题。</think>基于DeepSeek构建智能问答系统可分为以下6个可并行开发的任务模块: ### 一、核心架构模块 1. **知识库构建组**:使用DeepSeek-R1模型建立领域知识图谱 - 部署ElasticSearch实现文档检索 - 构建$RAG(retrieval-augmented\ generation)$架构 - 设计prompt工程模板[^2] 2. **对话系统组**: ```python class DialogSystem: def __init__(self): self.tts = AzureSpeech() self.nlp = DeepSeekAPI() def process_query(self, text): intent = self.nlp.classify(text) return self.knowledge_graph.query(intent) ``` ### 二、交互功能模块 3. **数字人开发组**: - 使用UE5/MetaHuman创建3D形象 - 集成面部捕捉系统(ARKit/MediaPipe) - 开发表情驱动算法: $$f_{blendshape} = \sum_{i=1}^{52}w_iB_i(x)$$ 4. **语音交互组**: - 集成ASR/TTS引擎(阿里云/讯飞) - 开发声纹识别模块 - 实现多轮对话状态管理 ### 三、业务功能模块 5. **数据爬取组**: - 构建分布式爬虫集群 - 设计岗位信息抽取模型: $$P(label|text) = softmax(W\cdot BERT(text))$$ - 部署反爬策略(Rotating Proxy) 6. **简历优化组**: - 开发NLP分析引擎 - 实现岗位匹配度计算: $$similarity = \frac{A\cdot B}{\|A\|\|B\|}$$ - 构建智能排版系统 ### 系统整合阶段 各模块通过gRPC接口对接,使用Kubernetes进行容器化部署,最终通过WebRTC实现多端交互。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值