⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqchatwnd.cpp

📁 经典的QQ聊天源程序代码,有很大的参考价值
💻 CPP
字号:
// QQChatWnd.cpp: implementation of the CQQChatWnd class.
//
//////////////////////////////////////////////////////////////////////
#include "QQChatWnd.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CQQChatWnd::CQQChatWnd()
{
	m_nSysMode = 0 ;
	m_hChatWnd = NULL ;
	m_hSendButtonWnd = NULL;
	m_hModeWnd =NULL;
	m_hChatRichEditWnd =NULL;
	
}

CQQChatWnd::~CQQChatWnd()
{
	if( m_hChatWnd!= NULL)
		Detach( m_hChatWnd ) ;
}

bool CQQChatWnd::Attatch(HWND hChatWnd)
{
	if( m_hChatWnd!= NULL)
		Detach( m_hChatWnd ) ;
	
	EnumChildWindows( hChatWnd , SearchRichEditEnumProc,(LPARAM)&m_hChatRichEditWnd) ;
	EnumChildWindows( hChatWnd , SearchSysModeEnumProc ,(LPARAM)&m_hModeWnd) ;
	EnumChildWindows( hChatWnd , SearchSendButtonEnumProc ,(LPARAM)&m_hSendButtonWnd) ;
	
	
	TCHAR szDefCaptionName01[]="消息模式(&T)" ;
	TCHAR szDefCaptionName02[]="聊天模式(&T)" ;
	TCHAR szCaptionName[64]  ;
	
	memset( szCaptionName , 0x0 , 64 ) ;
	GetWindowText( m_hModeWnd , szCaptionName , 64 ) ;
	if( _stricmp(szCaptionName, szDefCaptionName01 ) ==0)
	{
		m_nSysMode =MSG_CHAT_MODE  ; 
	}
	if( _stricmp(szCaptionName, szDefCaptionName02 ) ==0)
	{
		m_nSysMode =P2P_CHAT_MODE ;
	}
	
	
	return TRUE ;
}

bool CQQChatWnd::Detach(HWND hChatWnd)
{
	m_nSysMode = 0 ;
	m_hChatWnd = NULL ;
	m_hSendButtonWnd = NULL;
	m_hModeWnd =NULL;
	m_hChatRichEditWnd =NULL;
	
	return TRUE ;
}


bool CQQChatWnd::GetChatRichEditWnd(HWND *pChatRichEditWnd)
{
	if( m_hChatRichEditWnd!=NULL && IsWindow( m_hChatRichEditWnd ) )
	{
		*pChatRichEditWnd = m_hChatRichEditWnd ;
		return TRUE ;
	}
	
	return FALSE ;
}

int CQQChatWnd::GetSysMode()
{
	return m_nSysMode ;
}

bool CQQChatWnd::GetModeWnd(HWND *pModeWnd)
{
	if( m_hModeWnd!=NULL && IsWindow( m_hModeWnd ) )
	{
		*pModeWnd = m_hModeWnd ;
		return TRUE ;
	}
	
	return FALSE ;
}

bool CQQChatWnd::ChangeSysMode(int nSysMode)
{
	if( (nSysMode!= MSG_CHAT_MODE)  && (nSysMode != P2P_CHAT_MODE) )
		return FALSE ;
	if( nSysMode != m_nSysMode && m_hModeWnd!=NULL  && IsWindow(m_hModeWnd) )
	{
		SendMessage( m_hModeWnd , WM_LBUTTONDOWN , NULL ,NULL ) ;
		SendMessage( m_hModeWnd , WM_LBUTTONUP , NULL ,NULL ) ;
		m_nSysMode = nSysMode ;
	}
	return TRUE ;
}

bool CQQChatWnd::GetSendButtonWnd(HWND *pSendButtonWnd)
{
	if( m_hSendButtonWnd!=NULL && IsWindow( m_hSendButtonWnd ) )
	{
		*pSendButtonWnd = m_hSendButtonWnd ;
		return TRUE ;
	}
	
	return FALSE ;
}

bool CQQChatWnd::GetChatText(char **lplpstrText/*out*/)
{
	if(*lplpstrText!=NULL)
		return FALSE ;
	HWND  hRichEditWnd =NULL ;
	if( GetChatRichEditWnd(&hRichEditWnd))
	{
		SendMessage( hRichEditWnd , EM_SETSEL , 0 ,-1 ) ;
		Sleep(100) ;
		PostMessage( hRichEditWnd ,WM_COMMAND , 0XE122 , 0 ) ;
		
		if (!IsClipboardFormatAvailable(CF_TEXT)) 
            return FALSE; 
		
        if (!OpenClipboard(NULL)) 
            return FALSE; 
		
		HGLOBAL hglb = GetClipboardData(CF_TEXT); 
		
        if (hglb != NULL) 
        { 
			LPTSTR lptstr = (char *)GlobalLock(hglb); 
            if (lptstr != NULL) 
            { 
				*lplpstrText = new char[strlen(lptstr)+1] ;
				strcpy( *lplpstrText , lptstr ) ;
				(*lplpstrText)[strlen(lptstr)] = '\0' ;
                GlobalUnlock(hglb); 
				CloseClipboard();
				return TRUE ;
            }
			
        }
		CloseClipboard();
		return FALSE ;
	}
	
	return FALSE ;
}


bool CQQChatWnd::SetChatText(char *lpstrText)
{
	
	HWND  hRichEditWnd =NULL ;
	if( GetChatRichEditWnd(&hRichEditWnd))
	{
		SendMessage( hRichEditWnd , EM_SETSEL , 0 ,-1 ) ;
		Sleep(100) ;
		SendMessage( hRichEditWnd , WM_CLEAR , 0 , 0  ) ;
		
		HGLOBAL hMem;
		LPTSTR pStr =NULL;
		// 分配内存空间
		hMem = GlobalAlloc(GHND | GMEM_SHARE, strlen(lpstrText)+1);
		
		if( hMem!=NULL )
		{
			pStr = (char *)GlobalLock(hMem);
			if( pStr!=NULL )
			{
				strcpy(pStr, lpstrText);
			}
			GlobalUnlock(hMem);
			
			BOOL  bRet = OpenClipboard(NULL);
			
			if( bRet )
			{
				EmptyClipboard();
				// 设置剪贴板文本
				SetClipboardData(CF_TEXT, hMem);
				CloseClipboard();
				
				Sleep(100) ;
				PostMessage( hRichEditWnd ,WM_COMMAND , 0XE125 , 0 ) ;
				return TRUE ;
				
			}
			// 释放内存空间
			GlobalFree(hMem);
		}
	}
	return FALSE ;
	
}

bool CQQChatWnd::AddChatText(char *lpstrText)
{
	char * lpOldText =NULL ;
	
	if( GetChatText( &lpOldText ) ) 
	{
		char *lpNewText = new char[strlen(lpOldText)+strlen(lpstrText)+1] ;
		
		strcpy( lpNewText , lpOldText ) ;
		strcat( lpNewText , lpstrText ) ;
		
		SetChatText( lpNewText ) ;
		
		delete [] lpOldText ;
		delete []  lpNewText ;
		
		return TRUE ;
	}
	
	return FALSE ;
}

bool CQQChatWnd::Chat()
{
	HWND  hSendButton = NULL ;
	if( GetSendButtonWnd(&hSendButton))
	{
		SendMessage( hSendButton , WM_LBUTTONDOWN , NULL ,NULL ) ;
		Sleep(100) ;
		SendMessage( hSendButton , WM_LBUTTONUP , NULL ,NULL ) ;
		return TRUE ;
	}
	return FALSE  ;
}



BOOL CQQChatWnd::SearchRichEditEnumProc(HWND hwnd, LPARAM lParam)
{
	//返回值,没有找到的时候继续查找
	BOOL fRet = TRUE ;
	
	//要寻找的控件的类名
	TCHAR szDefClassName[]="richedit";
	TCHAR szAfxClassName[]="afxwnd42" ;
	
	TCHAR szClassName[64] ;
	memset( szClassName , 0x0 ,64 ) ;
	
	if( hwnd != NULL )
	{
		GetClassName( hwnd , szClassName , 64 ) ;
		if( _stricmp( szClassName , szDefClassName) ==0)
		{
			GetClassName( GetParent(hwnd) , szClassName ,64 ) ;
			if( _stricmp(szClassName , szAfxClassName) ==0)
			{
				*(HWND *)lParam = hwnd ;
				fRet = FALSE ;
			}
		} // end if  strcmp ...
	}// end if hwnd != NULL
	
	return fRet ;
}

BOOL CQQChatWnd::SearchSendButtonEnumProc(HWND hwnd, LPARAM lParam)
{
	//返回值,没有找到的时候继续查找
	BOOL fRet = TRUE ;
	
	//要寻找的控件的类名
	TCHAR szDefClassName[]="Button";
	TCHAR szDefCaptionName[]="发送(&S)" ;
	
	TCHAR szCaptionName[64]  ;
	TCHAR szClassName[64] ;
	memset( szCaptionName , 0x0 , 64 ) ;
	memset( szClassName , 0x0 ,64 ) ;
	
	if( hwnd != NULL )
	{
		GetClassName( hwnd , szClassName , 64 ) ;
		if( _stricmp(szClassName , szDefClassName) ==0)
		{
			GetWindowText( hwnd , szCaptionName , 64 ) ;
			if( _stricmp(szCaptionName, szDefCaptionName ) ==0)
			{
				*(HWND *)lParam = hwnd ;
				fRet = FALSE ;
			}
		} // end if  strcmp ...
	}// end if hwnd != NULL
	return fRet ;
}

BOOL CQQChatWnd::SearchSysModeEnumProc(HWND hwnd, LPARAM lParam)
{
	//返回值,没有找到的时候继续查找
	BOOL fRet = TRUE ;
	
	//要寻找的控件的类名
	TCHAR szDefClassName[]="Button";
	TCHAR szDefCaptionName01[]="消息模式(&T)" ;
	TCHAR szDefCaptionName02[]="聊天模式(&T)" ;
	
	TCHAR szCaptionName[64]  ;
	TCHAR szClassName[64] ;
	memset( szCaptionName , 0x0 , 64 ) ;
	memset( szClassName , 0x0 ,64 ) ;
	
	if( hwnd != NULL )
	{
		GetClassName( hwnd , szClassName , 64 ) ;
		if( _stricmp(szClassName , szDefClassName) ==0)
		{
			GetWindowText( hwnd , szCaptionName , 64 ) ;
			if( _stricmp(szCaptionName, szDefCaptionName01 ) ==0)
			{
				*(HWND *)lParam = hwnd ;
				fRet = FALSE ;
			}
			if( _stricmp(szCaptionName, szDefCaptionName02 ) ==0)
			{
				*(HWND *)lParam = hwnd ;
				fRet = FALSE ;
			}
		} // end if  strcmp ...
	}// end if hwnd != NULL
	return fRet ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -