📄 blueskydlg.cpp
字号:
// BlueSkyDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BlueSky.h"
#include "BlueSkyDlg.h"
#include "DocFileDlg.h"
#include "MusicDlg.h"
#include "WebDlg.h"
#include "EmailDlg.h"
#include "onfig_Dialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
ATTRIBUTION attribution;
/////////////////////////////////////////////////////////////////////////////
// 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()
/////////////////////////////////////////////////////////////////////////////
// CBlueSkyDlg dialog
CBlueSkyDlg::CBlueSkyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBlueSkyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBlueSkyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBlueSkyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBlueSkyDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBlueSkyDlg, CDialog)
//{{AFX_MSG_MAP(CBlueSkyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR()
ON_WM_LBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
ON_WM_CAPTURECHANGED()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBlueSkyDlg message handlers
UINT ReceiveEmailProc(LPVOID pParam)
{
::AfxSocketInit(); //初始化CSocket
CSocket popServer;
char recMsg[1024] = _T("");
char mailText[40000];
char strSend[1024] = _T("");
long len;
char sendBuffer[1024];
char sDate[1024];
char filename[1024] = _T("");
// char *popaddress;
// char *mailboxpass;
char *strQuit = _T("QUIT \r\n");
if (!popServer.Create())
return 0;
/*
if (!GetPopserverSempleAddr(&popaddress))//获取邮件服务器简略地址
{
eciSpeakText(_T("邮箱参数设置错误"),0);
return;
}
if(!GetMailBoxPass(&mailboxpass))//获取邮箱密码
{
eciSpeakText(_T("邮箱密码设置错误"),0);
return;
}
GetFullPopserverAddr(&popaddress);//获取邮件服务器域名
*/
popServer.Connect(_T("pop.sina.com.cn"),110); //建立与邮件服务器的连接
len = popServer.Receive(recMsg,1024);
recMsg[len] = '\0';
if (!len) //连接不成功返回
return 0;
if (strncmp(recMsg,"+OK",3))//邮件服务器出错返回
{
popServer.Send(strQuit,strlen(strQuit));
return 0;
}
strcpy(strSend,_T("USER zencofchina\r\n")); //注册用户名
popServer.Send(strSend,strlen(strSend));
popServer.Receive(recMsg,sizeof(recMsg));
if(strncmp(recMsg,"+OK",3))//注册失败返回
{
popServer.Send(strQuit,strlen(strQuit));
return 0;
}
strcpy(strSend,_T("PASS "));//注册邮箱密码
strcat(strSend,_T("19781017"));
strcat(strSend,_T("\r\n"));
popServer.Send(strSend,strlen(strSend));
popServer.Receive(recMsg,sizeof(recMsg));
if (strncmp(recMsg,"+OK",3))//注册失败返回
{
popServer.Send(strQuit,strlen(strQuit));
return 0;
}
strcpy(strSend,_T("STAT \r\n"));
popServer.Send(strSend,strlen(strSend));
popServer.Receive(recMsg,sizeof(recMsg));
char* p_msg=recMsg+4;
char* q_msg=p_msg;
while(*q_msg!=' ')
q_msg++;
*q_msg='\0';
int mailCount = atoi(p_msg);//获取邮件数
if (!mailCount)//邮件数为0返回
{
popServer.Send(strQuit,strlen(strQuit));
return 0;
}
for (int i=0; i<mailCount; i++)//逐封收取邮件
{
strcpy(sDate,_T(""));
strcpy(filename,_T(""));
sprintf(sendBuffer,_T("RETR %d\r\n"),i+1);
popServer.Send(sendBuffer,strlen(sendBuffer));
popServer.Receive(recMsg,sizeof(recMsg));//接收邮件头
len = popServer.Receive(mailText,40000);
CFile file;
SYSTEMTIME time;
GetLocalTime(&time);
char tp[100];
sprintf(tp,_T("%d年"),time.wYear);
strcat(sDate,tp);
sprintf(tp,_T("%d月"),time.wMonth);
strcat(sDate,tp);
sprintf(tp,_T("%d日"),time.wDay);
strcat(sDate,tp);
sprintf(tp,_T("%d时"),time.wHour);
strcat(sDate,tp);
sprintf(tp,_T("%d分"),time.wMinute);
strcat(sDate,tp);
sprintf(tp,_T("_%03d"),i+1);
strcat(sDate,tp);
strcat(filename,_T("E:\\EMailFile\\"));
strcat(filename,sDate);
strcat(filename,_T(".eml"));
file.Open(filename,CFile::modeReadWrite|CFile::modeCreate);//以邮件发送日期为名建立文件
file.Write(mailText,len);
while (mailText[len-3]!='.')
{
len = popServer.Receive(mailText,40000);
file.SeekToEnd();
file.Write(mailText,len);
}
file.Close();
// sprintf(sendBuffer,_T("DELE %d\r\n"),i+1);//邮件接收完毕从邮箱中删除
// popServer.Send(sendBuffer,strlen(sendBuffer));
}
popServer.Send(strQuit,strlen(strQuit));//断开与邮件服务器的连接
popServer.Close();
sndPlaySound(_T(".\\sound\\ringin.wav"),NULL);//播放提示音
return 0; // ends the thread
}
BOOL CBlueSkyDlg::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);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
hEci = NULL;
brush.CreateSolidBrush(RGB(0,100,200));//初始化背景颜色画刷
m_Timer=SetTimer(1,1000000,NULL);//启用定时器
// RetrieveMail();
SetWindowPos(NULL,0,0,1024,768,0); //满屏显示对话框
ClipWindow();//限定鼠标范围
// AfxBeginThread(ReceiveEmailProc, GetSafeHwnd(),
// THREAD_PRIORITY_NORMAL);
return TRUE; // return TRUE unless you set the focus to a control
}
void CBlueSkyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CBlueSkyDlg::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
{
CPaintDC dc(this);
CPen pen(PS_INSIDEFRAME,5,RGB(200,180,0)),pen2;
CFont font,*pOldFont,font2;
font.CreatePointFont(300,_T("楷体_GB2312"));
pOldFont = dc.SelectObject(&font);
CString s = _T("欢迎使用蓝天语音软件");
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,220,0));
dc.TextOut(315,100,s,s.GetLength());//输出对话框标题
CPen *pOldPen = dc.SelectObject(&pen);
dc.SelectStockObject(NULL_BRUSH);
CBrush brush(RGB(220,230,220));
CBrush *pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(412,300,612,610);
pen2.CreatePen(PS_SOLID,1,RGB(200,180,0));
dc.SelectObject(&pen2);
//画自定义菜单项
for(int i=0; i<5; i++)
{
dc.MoveTo(412,355+50*i);
dc.LineTo(612,355+50*i);
}
font2.CreatePointFont(160,_T("楷体_GB2312"));
dc.SetTextColor(RGB(255,0,0));
dc.SelectObject(&font2);
dc.TextOut(470,320,_T("我的文件"));
dc.TextOut(470,370,_T("我的音乐"));
dc.TextOut(470,420,_T("网上浏览"));
dc.TextOut(470,470,_T("我的邮件"));
dc.TextOut(470,520,_T("系统设置"));
dc.TextOut(470,570,_T("退出系统"));
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldFont);
CDialog::OnPaint();
}
}
HCURSOR CBlueSkyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
HBRUSH CBlueSkyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->m_hWnd == m_hWnd) //设置背景色
return (HBRUSH)brush;
return hbr;
}
void CBlueSkyDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if (point.y<355)
{
//eciSpeakText(_T("进入我的文件界面,请按语音提示选择菜单"),0);
//static bool bIn = false;
CDocFileDlg dfDlg;
dfDlg.DoModal();
ClipWindow();
//eciSpeakText(_T("回到主界面,请按语音提示选择菜单"),0);
}
if (point.y>355 && point.y<405)
{
//eciSpeakText(_T("进入我的音乐界面,请按语音提示选择菜单"),0);
CMusicDlg mscDlg;
mscDlg.DoModal();
ClipWindow();
//eciSpeakText(_T("回到主界面,请按语音提示选择菜单"),0);
}
if (point.y>425 && point.y<455)
{
//eciSpeakText(_T("进入网上浏览界面,请按语音提示选择菜单"),0);
CWebDlg webDlg;
webDlg.DoModal();
ClipWindow();
//eciSpeakText(_T("回到主界面,请按语音提示选择菜单"),0);
}
if (point.y>475 && point.y<505)
{
//eciSpeakText(_T("进入网上浏览界面,请按语音提示选择菜单"),0);
CEmailDlg emailDlg;
emailDlg.DoModal();
ClipWindow();
//eciSpeakText(_T("回到主界面,请按语音提示选择菜单"),0);
}
if (point.y>525 && point.y<555)
{
Config_Dialog configdlg;
configdlg.DoModal();
ClipWindow();
}
if (point.y>575 && point.y<605)
{
CDialog::OnCancel();
}
}
void CBlueSkyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
char c=NULL;
switch ((point.y-305)/50)
{
case 0: c='1'; break;
case 1: c='2'; break;
case 2: c='3'; break;
case 3: c='4'; break;
case 4: c='5'; break;
case 5: c='6'; break;
}
if( c!=pointchar)
{
pointchar=c;
switch(c)
{
case '1': eciSpeakText("我的文件",0); break;
case '2': eciSpeakText("我的音乐",0); break;
case '3': eciSpeakText("网上浏览",0); break;
case '4': eciSpeakText("我的邮件",0); break;
case '5': eciSpeakText("系统设置",0); break;
case '6': eciSpeakText("退出系统",0); break;
}
}
CDialog::OnMouseMove(nFlags, point);
}
void CBlueSkyDlg::OnCaptureChanged(CWnd *pWnd)
{
CDialog::OnCaptureChanged(pWnd);
}
void CBlueSkyDlg::ClipWindow()
{
CRect rect(417,306,608,606);
ClipCursor(&rect);
}
void CBlueSkyDlg::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent);
}
CString CBlueSkyDlg::GetMailBoxParam(CString strItem)
{
//获取邮箱设置,profile的Section参数为"MailParam"
//strItem = "MailAddr" 则取邮箱地址。
//strItem = "Pass" 则取邮箱密码
CWinApp *pApp = AfxGetApp();
return pApp->GetProfileString(_T("MailParam"),strItem);
}
bool CBlueSkyDlg::GetMailBoxUser(char **addr)
{
//获取邮箱地址
int i = 0;
char *szMailAddr = (char*)(LPCTSTR)GetMailBoxParam(_T("MailAddr"));
if (!strlen(szMailAddr))
return false;
while(*szMailAddr)
{
if(*szMailAddr == '@')
break;
i++;
szMailAddr++;
}
szMailAddr -= i;
szMailAddr[i] = '\0';
*addr = szMailAddr;
return true;
}
bool CBlueSkyDlg::GetMailBoxPass(char **pass)
{
//获取邮箱密码
*pass = (char*)(LPCTSTR)GetMailBoxParam(_T("Pass"));
if (!strlen(*pass))
return false;
return true;
}
bool CBlueSkyDlg::GetPopserverSempleAddr(char **addr)
{
//获取邮件服务器地址
int i = 0;
char szMailAddr[1024] = _T("");
char *szTemp = (char*)(LPCTSTR)GetMailBoxParam(_T("MailAddr"));
if (!strlen(szTemp))
return false;
while(*szTemp)
{
if(*szTemp == '@')
break;
i++;
szTemp++;
}
szTemp++;
strcat(szMailAddr,szTemp);
*addr = szMailAddr;
return true;
}
void CBlueSkyDlg::GetFullPopserverAddr(char **addr)
{
//邮件服务器地址转换
if (!strcmp(*addr,"163.com"))
(char*)*addr = "pop.163.com";
if (!strcmp(*addr,"126.com"))
(char*)*addr = "pop3.126.com";
if (!strcmp(*addr,"sohu.com"))
(char*)*addr = "pop3.sohu.com";
if (!strcmp(*addr,"sina.com"))
(char*)*addr = "pop3.sina.com.cn";
if (!strcmp(*addr,"263.net"))
(char*)*addr = "263.net";
if (!strcmp(*addr,"21cn.com"))
(char*)*addr = "pop.21cn.com";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -