📄 bqqdlg.cpp
字号:
// BQQDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BQQ.h"
#include "BQQDlg.h"
//#include "computerlist.h"
#include "parameter.h"
#include "mailslot.h"
//#include "mysheet.h"
#include "myAddrDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//===========================================================================
extern BOOL g_bExit;
extern CStringList g_listGroup;
extern BOOL g_bSending;
extern BOOL g_bSendOnly;
extern BOOL g_bAlwaysTop;
extern BOOL g_bHide;
extern BOOL g_bEnableTooltips;
extern BOOL g_bAutoPopup;
extern BOOL g_bAutoPopupMessBox;
extern BOOL g_bCloseDelLast;
extern BOOL g_bUseSmiley;
extern BOOL g_bPlaySound;
extern BOOL m_bEnter2Send;
extern int g_iMaxLast;
extern UINT g_uCloseAfter;
extern CString g_sSignature;
extern BYTE g_buffer[MAX_BUFFER_SIZE+1];
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBQQDlg dialog
CBQQDlg::CBQQDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBQQDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBQQDlg)
m_InOutMsg = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bClose = FALSE;
g_bExit = FALSE;
first = TRUE;
}
void CBQQDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBQQDlg)
DDX_Control(pDX, IDC_ADDRLIST, m_AddrEdit);
DDX_Control(pDX, IDC_SEND, m_Send);
DDX_Control(pDX, IDC_ADDRESS, m_Addr);
DDX_Control(pDX, IDC_ANONYMOUS, m_Anony);
DDX_Control(pDX, IDC_PARAM, m_Param);
DDX_Control(pDX, IDC_INPUTMSG, m_InputMsg);
DDX_Control(pDX, IDC_INCLUDEATTACH, m_IncAttach);
DDX_Control(pDX, IDC_HISTORY, m_History);
//DDX_Control(pDX, IDC_CLEAR, m_Clear);
DDX_Control(pDX, IDC_ATTACH, m_Attach);
DDX_Control(pDX, IDC_INOUT, m_InOutCtrl);
DDX_Text(pDX, IDC_INOUT, m_InOutMsg);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBQQDlg, CDialog)
//{{AFX_MSG_MAP(CBQQDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_HISTORY, OnHistory)
// ON_BN_CLICKED(IDC_CLEAR, OnClear)
ON_BN_CLICKED(IDC_PARAM, OnParam)
ON_BN_CLICKED(IDC_ATTACH, OnAttach)
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_BN_CLICKED(IDC_ADDRESS, OnAddress)
ON_WM_KEYDOWN()
ON_BN_CLICKED(IDC_INPUTMSG, OnInputmsg)
ON_MESSAGE(WM_RECEIVE_MESSAGE, OnSetMessage)
ON_WM_CLOSE()
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_QUERYENDSESSION()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_LIBEN,OnLiben)//reload the window
ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBQQDlg message handlers
BOOL CBQQDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
LOGFONT lf1={12,0,0,0,FW_LIGHT,0,0,0,0,0,0,0,0,"宋体"};
m_Send.SetFont(&lf1);
m_Send.SetToolTipText("发送");
m_Send.SetShade(SHS_SOFTBUMP);
m_Addr.SetFont(&lf1);
m_Addr.SetToolTipText("地址");
m_Addr.SetShade(SHS_SOFTBUMP);
m_Anony.SetFont(&lf1);
m_Anony.SetToolTipText("匿名发送");
m_Anony.SetShade(SHS_METAL,8,30);
m_Anony.SetIcon(IDI_UNCHECKED, BS_LEFT, IDI_CHECKED);
m_Param.SetFont(&lf1);
m_Param.SetToolTipText("设置");
m_Param.SetShade(SHS_SOFTBUMP);
m_InputMsg.SetFont(&lf1);
m_InputMsg.SetToolTipText("回复");
m_InputMsg.SetShade(SHS_SOFTBUMP);
m_IncAttach.SetFont(&lf1);
m_IncAttach.SetToolTipText("没有附件");
m_IncAttach.SetShade(SHS_METAL,8,30);
m_IncAttach.SetIcon(IDI_UNCHECKED, BS_LEFT, IDI_CHECKED);
m_History.SetFont(&lf1);
m_History.SetToolTipText("历史");
m_History.SetShade(SHS_SOFTBUMP);
//m_Clear.SetFont(&lf1);
//m_Clear.SetToolTipText("清空");
//m_Clear.SetShade(SHS_SOFTBUMP);
m_Attach.SetFont(&lf1);
m_Attach.SetToolTipText("附件");
m_Attach.SetShade(SHS_SOFTBUMP);
m_AddrEdit.SetDimText(_T("请输入发送地址"));
//m_InOutCtrl.SetDimText(_T("按键开始输入!"));
///topmost show
int onTop = 0,sav=0,startServ=0;
int x = ::GetSystemMetrics(SM_CXMAXIMIZED);
int y = ::GetSystemMetrics(SM_CYMAXIMIZED);
onTop = ((CBQQApp*)AfxGetApp())->GetProfileInt("privatesetting","onTop",0);
if(onTop == 1)
((CBQQApp*)AfxGetApp())->m_pMainWnd->SetWindowPos(&CWnd::wndTopMost,x/4,y/4,0,0,SWP_NOSIZE);
sav = ((CBQQApp*)AfxGetApp())->GetProfileInt("privatesetting","autoSave",0);
if(sav == 0)
((CBQQApp*)AfxGetApp())->WriteProfileInt("privatesetting","autoSave",1);
startServ = ((CBQQApp*)AfxGetApp())->GetProfileInt("privatesetting","autoRestart",2);
if(startServ ==2)
((CBQQApp*)AfxGetApp())->WriteProfileInt("privatesetting","autoRestart",1);
////////////////
AfxBeginThread( ServerMailslot, this);
//m_nTimer = SetTimer(1,600000,0);
m_nTimer0 = SetTimer(2,1000,0);
if(!CreateListenerSock())//listen
{
MessageBox("创建套接字失败,系统\r\n将不能接受SOCKET消息!","提示",MB_ICONERROR|MB_OK);
}
int tips = ((CBQQApp*)AfxGetApp())->GetProfileInt("privatesetting","Tips",2);
if(tips >= 1)
{
GetDlgItem(IDC_INOUT)->SetWindowText("\t使用手册:\r\n\t\t1、请不要屏蔽2118端口\r\n\t\
2、如果对方没有安装本软件,将不能发送附件,也不能通过IP发送消息\r\n\t\
3、使用本信使前,请关掉其它信使服务,及加入DCOM支持\r\n\t\
4、第一次使用使用时请先设置相应的参数,部分功能右键提供\r\n\t\
5、呼出热键为CTRL+ALT+A、F4,隐藏为ESC键\r\n\t\
6、如果对方没有装本信使且不在一个子网内,发送将失败\r\n\t\
7、频繁关闭并启动本程序的时间间隔请不要小于60秒\r\n\t\
8、任何问题请与作者联系,谢谢\r\n");
if(tips ==2)
((CBQQApp*)AfxGetApp())->WriteProfileInt("privatesetting","Tips",0);
}
GetDlgItem(IDC_INPUTMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_INOUT)->SetFocus();
((CBQQApp*)AfxGetApp())->hasAttachment = hasAttachment = FALSE;
isAnonymous = FALSE;
fileName = _T("");
hostName = _T("");
sendTarget = _T("");
isHistory = FALSE;
sendTarget = _T("");
file="";
///////////////////
//CHAR *hostN = new CHAR[MAX_PATH+1];
//ZeroMemory(hostN,MAX_PATH+1);
//if(SOCKET_ERROR == gethostname(hostN,MAX_PATH))
// ASSERT(0);
CString hostIP="",sName="";
//////////////////////
TCHAR sComputerName[MAX_NAME_SIZE+1];
DWORD nSize = MAX_NAME_SIZE;
if ( !GetComputerName( sComputerName, &nSize) )
strcpy(sComputerName, "iunknown");
//////////////////////
//sName.Format("%s",hostN);
sName.Format("%s",sComputerName);
//////////////////////
((CBQQApp*)AfxGetApp())->senderName=sName;
unsigned long hsIP= GetHsByName(sName);
hostIP.Format("%u",hsIP);
((CBQQApp*)AfxGetApp())->hostIP=hostIP;
//delete hostN;
//HidenIt();
///////////////////////////////////////
//AnimateWindow(this->GetSafeHwnd(),300,AW_SLIDE|AW_CENTER);
///AnimateWindow(this->GetSafeHwnd(),400,AW_BLEND|AW_HIDE|AW_HOR_NEGATIVE|AW_VER_POSITIVE);
return FALSE; // return TRUE unless you set the focus to a control
}
void CBQQDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else if(SC_MINIMIZE ==nID)
{
HidenIt();
}
/*
else if(nID == SC_CLOSE)
{
CDialog::OnClose();
}
*/
/*@**#---2002-09-12 17:18:20 (李春)---#**@
else
{
CDialog::OnSysCommand(nID, lParam);
}
*/}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CBQQDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CBQQDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CBQQDlg::OnHistory()
{
// TODO: Add your control notification handler code here
UpdateData();
if(((CEdit*)GetDlgItem(IDC_INOUT))->GetStyle()&ES_READONLY )
{
OnClear();
GetDlgItem(IDC_INOUT)->SetWindowText(((CBQQApp*)AfxGetApp())->tmpMsg);
((CBQQApp*)AfxGetApp())->tmpMsg ="";
((CButton*)GetDlgItem(IDC_HISTORY))->SetWindowText("历史(&H)");
((CEdit*)GetDlgItem(IDC_INOUT))->SetReadOnly(FALSE);
GetDlgItem(IDC_INOUT)->SetFocus();
}
else
{
//if(!(((CEdit*)GetDlgItem(IDC_INOUT))->GetStyle()&ES_READONLY ))
//CString tt = ((CBQQApp*)AfxGetApp())->tmpMsg;
GetDlgItem(IDC_INOUT)->GetWindowText(((CBQQApp*)AfxGetApp())->tmpMsg);
//tt = ((CBQQApp*)AfxGetApp())->tmpMsg;
CString time="",hisMsg="",log="",workDir=".\\";
///*
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(GetModuleHandle(AfxGetApp()->m_pszAppName),exeFullPath,MAX_PATH);
workDir = CString(exeFullPath);
int curPost=0,posx=0;
while((curPost=workDir.Find('\\',curPost+1))!=-1)
{
posx = curPost;
}
workDir = workDir.Left(posx+1);
//*/
CTime t = CTime::GetCurrentTime();
time = t.Format( "%B");
time+=".log";
log.Format("%s%s",workDir,time);
CFile fp;
fp.Open(log,CFile::modeReadWrite|CFile::modeCreate|CFile::modeNoTruncate);
long fileLeng = fp.GetLength();
fp.ReadHuge(hisMsg.GetBuffer(fileLeng),fileLeng);
hisMsg.ReleaseBuffer();
fp.Close();
hisMsg += ((CBQQApp*)AfxGetApp())->hisMsg;
((CEdit*)GetDlgItem(IDC_INOUT))->SetReadOnly(TRUE);
GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
GetDlgItem(IDC_INOUT)->SetWindowText(hisMsg);
int len = GetDlgItem(IDC_INOUT)->GetWindowTextLength();
((CEdit*)GetDlgItem(IDC_INOUT))->SetSel(len,len);
((CEdit*)GetDlgItem(IDC_INOUT))->ReplaceSel("");
isHistory = TRUE;
//GetDlgItem(IDC_HISTORY)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_HISTORY))->SetWindowText("清除历史(&C)");
GetDlgItem(IDC_INOUT)->SetFocus();
}
}
void CBQQDlg::OnClear()
{
// TODO: Add your control notification handler code here
//((CBQQApp*)AfxGetApp())->tmpMsg="";
GetDlgItem(IDC_INOUT)->SetWindowText("");
GetDlgItem(IDC_SEND)->EnableWindow(TRUE);
GetDlgItem(IDC_INPUTMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_INOUT)->SetFocus();
((CEdit*)GetDlgItem(IDC_INOUT))->SetReadOnly(FALSE);
GetDlgItem(IDC_HISTORY)->EnableWindow(TRUE);
isHistory = FALSE;
}
void CBQQDlg::OnParam()
{
// TODO: Add your control notification handler code here
CParameter paramDlg;
if(paramDlg.DoModal()==IDOK)
{
}
}
void CBQQDlg::OnAttach()
{
// TODO: Add your control notification handler code here
hasAttachment = ((CBQQApp*)AfxGetApp())->hasAttachment;
if(hasAttachment)
{
((CButton*)GetDlgItem(IDC_INCLUDEATTACH))->SetCheck(BST_UNCHECKED);
GetDlgItem(IDC_INCLUDEATTACH)->EnableWindow(FALSE);
GetDlgItem(IDC_ATTACH)->SetWindowText("附件(&F)");
fileName = "";
//((CBQQApp*)AfxGetApp())->sendFileFullName ="";
//((CBQQApp*)AfxGetApp())->sendFileFullName ="";
((CBQQApp*)AfxGetApp())->hasAttachment = hasAttachment = FALSE;
return;
}
CFileDialog flDlg(TRUE, NULL, NULL,
OFN_FILEMUSTEXIST | OFN_ENABLESIZING | OFN_HIDEREADONLY,
"All files|*.*||", this);
if(flDlg.DoModal()==IDOK)
{
((CBQQApp*)AfxGetApp())->sendFileFullName = "";
((CBQQApp*)AfxGetApp())->sendFileName ="";
((CBQQApp*)AfxGetApp())->sendFileFullName = file = flDlg.GetPathName();
((CBQQApp*)AfxGetApp())->sendFileName = fileName = flDlg.GetFileName();
GetDlgItem(IDC_INCLUDEATTACH)->EnableWindow(TRUE);
GetDlgItem(IDC_INCLUDEATTACH)->SetWindowText("发送附件");
GetDlgItem(IDC_ATTACH)->SetWindowText("清除附件(&D)");
((CButton*)GetDlgItem(IDC_INCLUDEATTACH))->SetCheck(BST_UNCHECKED);
((CBQQApp*)AfxGetApp())->hasAttachment = hasAttachment = TRUE;
}
else
{
GetDlgItem(IDC_INCLUDEATTACH)->EnableWindow(FALSE);
GetDlgItem(IDC_INCLUDEATTACH)->SetWindowText("没有附件");
((CButton*)GetDlgItem(IDC_INCLUDEATTACH))->SetCheck(BST_UNCHECKED);
((CBQQApp*)AfxGetApp())->hasAttachment = hasAttachment = FALSE;
//UpdateData(FALSE);
}
}
void CBQQDlg::OnSend()
{
// TODO: Add your control notification handler code here
if(((CEdit*)GetDlgItem(IDC_INOUT))->GetStyle()&ES_READONLY )
{
MessageBox("您还没有输入要发送的消息!","提示",MB_ICONINFORMATION|MB_OK);
return;
}
CString msgStr="",tmpStr="",tm="",sdStr="";
UpdateData();
if(!FormatAddr())
return;
hostName = ((CBQQApp*)AfxGetApp())->senderName;
// if(sendTarget == hostName || hostName=="")
// {
// MessageBox("不用自言自语了吧!","提示");
// return;
// }
//unsigned long hsIP= GetHsByName(hostName);
//hostIP.Format("%d",hsIP);
hostIP=((CBQQApp*)AfxGetApp())->hostIP;
GetDlgItem(IDC_INOUT)->GetWindowText(sdStr);
sdStr.TrimLeft();
sdStr.TrimRight();
if(sdStr.IsEmpty())
{
MessageBox("不能发送空信息!","提示");
return;
}
GetDlgItem(IDC_SEND)->EnableWindow(FALSE);
HidenIt();
this->sendMessageStr = sdStr+"\0";
CStringList psLs;
parsePhrases(FALSE,sendTarget,';',&psLs);
///
//AfxBeginThread(SendData,this);
//return;
////
sendTarget="";
for (int i = 0; i< psLs.GetCount () ; i++ )
{
CString sUser;
sUser = psLs.GetAt (psLs.FindIndex (i));
if(!ConnectServer(sUser))
{
if(psLs.GetCount ()==1)
sendTarget += sUser;
else
sendTarget += sUser+";";
continue;
}
if(!SendTheMsg(sUser))
continue;
//sockClient.Close();
}
sockClient.Close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -