CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  非技术类

对话框图象生成程序FOR QQ

楼主gwgok(gwg)2005-05-23 14:39:52 在 VC/MFC / 非技术类 提问

对话框图象生成程序FOR   QQ  
  ---  
   
  初学VC,请大家指教.  
  http://paper-plane.vicp.net/qqmsgbox.exe   (连不上说明下班了。)  
  本人QQ:20449990 问题点数:20、回复次数:7Top

1 楼gwgok(gwg)回复于 2005-05-25 11:33:40 得分 0

http://gwgok.home4u.china.com/Top

2 楼qq153788616(啊灌)回复于 2005-05-26 17:59:01 得分 10

帮你顶~~~~~~~~~Top

3 楼gwgok(gwg)回复于 2005-05-27 10:48:02 得分 0

谢谢你。Top

4 楼gwgok(gwg)回复于 2005-05-27 10:52:18 得分 0

public:  
  struct   struct_QQTM  
  {  
  short nProcessNum; //打开的QQ和TM的进程数量  
  short nChatWinNum; //所有当前打开的聊天窗口数量  
  short nMenuSelect; //当前所选择的聊天窗口  
  DWORD dwProcessID[10];       //QQ和TM的进程ID  
  HWND hChatWnd[20]; //聊天窗口句柄  
  HWND hRichEdit[20]; //聊天窗口中输入框句柄  
  CString   csTitle[20]; //聊天窗口标题  
  short nFlag[20]; //标识聊天窗口所属QQ或TM  
  }   s_QQ;Top

5 楼wang_yuanwai(王员外)回复于 2005-05-27 11:11:24 得分 10

ding!Top

6 楼gwgok(gwg)回复于 2005-05-27 11:18:05 得分 0

void   CQqmsgboxDlg::OnOK()    
  {  
  UpdateData();  
  if(s_QQ.nChatWinNum==0   ||   !IsWindow(s_QQ.hChatWnd[s_QQ.nMenuSelect]))  
  switch(GetQQTMChatWindow())  
  {  
  case   -1:  
  ShowErrorMsg("Can't   find   QQ   has   ran.");  
  return;  
  case   0:  
  ShowErrorMsg("Can't   find   QQ   Chat   Window.");  
  return;  
  default:  
  s_QQ.nMenuSelect   =   0;  
  break;  
  }  
   
  //对话框格式  
  GetMsgType();  
  //对话框标题最好不为空  
  if   (m_caption=="")   m_caption="       ";  
  //启用线程弹出对话框,当前进程可以继续执行  
  CWinThread*   pThread   =   AfxBeginThread(DlgThread,this);  
  //调用Sleep函数以使DlgThread进程先执行  
  Sleep(100);    
  CWnd*   pDlgWnd   =   FindWindow(NULL,m_caption);  
  if   (!pDlgWnd)   {  
  ShowErrorMsg("Get   Dialog   Handle   failed.");  
  return;  
  }  
   
  //获取对话框DC以生成图象  
  CDC   memdc,*dc=pDlgWnd->GetWindowDC();  
  CBitmap   Bmp;  
  RECT   r;  
  pDlgWnd->GetWindowRect(&r);  
  int   Width=r.right   -   r.left;  
  int   Height=r.bottom   -   r.top;  
  Bmp.CreateCompatibleBitmap(dc,Width,Height);  
  memdc.CreateCompatibleDC(dc);  
  CBitmap*pOld=memdc.SelectObject(&Bmp);  
  memdc.BitBlt(0,0,Width,Height,dc,0,0,SRCCOPY);  
  memdc.SelectObject(pOld);  
  ReleaseDC(dc);  
   
  //关闭对话框  
  //::SendMessage(pWnd->GetSafeHwnd(),WM_CLOSE,0,0);  
  keybd_event(VK_RETURN,0,0,0);  
  keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);  
  Sleep(50);    
   
  //建立CWnd类变量指向聊天窗口  
  CWnd   *pChatWnd   =   (CWnd*)CWnd::FromHandle(s_QQ.hChatWnd[s_QQ.nMenuSelect]);  
  //建立CRichEditCtrl类变量指向RICHEDIT  
  CRichEditCtrl*   pRichEdit   =   (CRichEditCtrl*)CWnd::FromHandle(s_QQ.hRichEdit[s_QQ.nMenuSelect]);  
   
  //将QQ聊天窗体恢复NORMAL状态,并设置为当前窗体  
  //需要增加对发按键是否可用的判断  
  pChatWnd->ShowWindow(SW_SHOWNORMAL);  
  pChatWnd->SetForegroundWindow();  
  Sleep(100);  
   
  //将鼠标位置定位到输入框上面,然后模拟鼠标左键按下,  
  //使QQ输入框获得焦点   (pRichEdit->SetFocus()无效)  
  pRichEdit->GetWindowRect(&r);  
  SetCursorPos(r.right-10,r.bottom-10);  
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo());  
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo());  
   
  //将生成的图象放入Clipboard  
  OpenClipboard();  
  // EmptyClipboard();  
  SetClipboardData(CF_BITMAP,(HANDLE)Bmp);  
  CloseClipboard();  
   
  //模拟按下CTRL+V键,将Clipboard中数据Paste到QQ输入框中  
  keybd_event(VK_CONTROL,0,0,0);  
  keybd_event('V',0,0,0);  
  keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);  
  keybd_event('V',0,KEYEVENTF_KEYUP,0);  
   
  //如果选中Sended   Immediately,将模拟按下CTRL+ENTER键直接发送图像  
  if   (m_send   ==   TRUE)  
  {  
  keybd_event(VK_CONTROL,0,0,0);  
  keybd_event(VK_RETURN,0,0,0);  
  keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);  
  keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);  
  }  
   
  m_content   =   _T("");  
  UpdateData(FALSE);  
   
  //以下代码实现将图象插入RichEdit控件中(网友提供)  
  //但在QQ2003及其以后版本已屏蔽了外界消息  
  /*LPRICHEDITOLE   pRichEditOle;  
  pRichEditOle   =   pRichEdit->GetIRichEditOle();  
  COleDataSource   src;  
  STGMEDIUM   sm;  
  sm.tymed=TYMED_GDI;  
  sm.hBitmap=(HBITMAP)Bmp.GetSafeHandle();  
  sm.pUnkForRelease=NULL;  
  src.CacheData(CF_BITMAP,   &sm);  
  LPDATAOBJECT   lpDataObject   =   (LPDATAOBJECT)src.GetInterface(&IID_IDataObject);  
  pRichEditOle->ImportDataObject(lpDataObject,   0,   NULL);  
  lpDataObject->Release();   */  
  }  
  Top

7 楼gwgok(gwg)回复于 2005-05-27 11:20:49 得分 0

int   CQqmsgboxDlg::GetQQTMChatWindow()  
  {  
  //获取打开的QQ及TM的进程ID  
  TCHAR   pModName[_MAX_PATH];  
  CProcessIterator   itp;  
   
  s_QQ.nProcessNum   =   0;  
  for   (DWORD   pid=itp.First();   pid;   pid=itp.Next())    
  {  
  CProcessModuleIterator   itm(pid);  
  HMODULE   hModule   =   itm.First();    
  if   (hModule)   GetModuleBaseName(itm.GetProcessHandle(),hModule,   pModName,_MAX_PATH);  
  if   (!stricmp(pModName,"QQ.exe")   ||   !stricmp(pModName,"TM.exe"))    
  {  
  s_QQ.dwProcessID[s_QQ.nProcessNum++]   =   pid;  
  //break;  
  }  
  }  
  //未找到QQ进程号  
  if   (0   ==   s_QQ.nProcessNum) return   -1;  
   
  s_QQ.nChatWinNum   =   0;  
  ::EnumWindows(EnumWindowsProc,(LPARAM)this);  
    return   s_QQ.nChatWinNum;  
  }  
   
  void   CQqmsgboxDlg::OnDownarrow()    
  {  
  //此函数用于选择聊天窗口  
  HWND   hPriorWnd   =   s_QQ.hChatWnd[s_QQ.nMenuSelect];  
  if   (GetQQTMChatWindow()   >   0)  
  {  
  int   i,j,n=0;  
  //生成弹出菜单  
  //使弹出菜单自动选中上次所选择的菜单项,如果未选择,默认为第一项  
  if   (s_QQ.nChatWinNum   >=   s_QQ.nMenuSelect)   {  
  for(i=0;i<s_QQ.nChatWinNum;i++) {  
  if   (s_QQ.hChatWnd[i]   ==   hPriorWnd)   {    
  n   =   i;  
  break;  
  }    
  }  
  }  
  CMenu   PopMenu;  
  PopMenu.CreatePopupMenu();  
  for(j=0;j<s_QQ.nProcessNum;j++)  
  {  
  for(i=0;i<s_QQ.nChatWinNum;i++)  
  {  
  if(s_QQ.nFlag[i]   ==   j)  
  PopMenu.AppendMenu(i==n   ?   MF_STRING|MF_CHECKED   :   MF_STRING|MF_UNCHECKED,  
  WM_USERMESSAGE   +   i,s_QQ.csTitle[i]);  
  }  
          PopMenu.AppendMenu(MF_SEPARATOR);  
  }  
  PopMenu.DeleteMenu(PopMenu.GetMenuItemCount()   -   1,MF_BYPOSITION);  
  s_QQ.nMenuSelect   =   n;  
   
  POINT   mouse;  
  GetCursorPos(&mouse);  
  PopMenu.TrackPopupMenu(0,mouse.x,mouse.y,this,NULL);  
  PopMenu.DestroyMenu();  
  }  
  }  
  Top

相关问题

  • 动态生成对话框
  • 生成对话框问题
  • 一个的对话框生成问题!!!!
  • 对话框背景图象的加入
  • QQ:76563357在取得路径的情况下,如何在对话框中显示*.bmp格式的图象,但不能把图象做成资源
  • 新手上路:如何生成一个非模态对话框
  • 怎样在对话框上动态生成超级连接
  • 怎样在生成的对话框中显示菜单?
  • 由classwizard生成的对话框类如何删除?
  • 1如何用mfc生成及显示非模态对话框。

关键词

  • 聊天
  • 对话框
  • qq
  • 聊天窗口
  • 进程
  • tm

得分解答快速导航

  • 帖主:gwgok
  • qq153788616
  • wang_yuanwai

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo