www.gusucode.com > 支持开机运行的VC++6.0早起叫醒程序源码程序 > 支持开机运行的VC++6.0早起叫醒程序/ArmyBugle/ArmyBugle/ArmyBugleDlg.cpp

    // ArmyBugleDlg.cpp : implementation file
// www.srcfans.com

#include "stdafx.h"
#include "ArmyBugle.h"
#include "ArmyBugleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_ONTRAY WM_USER+1113
/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CArmyBugleDlg dialog

CArmyBugleDlg::CArmyBugleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CArmyBugleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CArmyBugleDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CArmyBugleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CArmyBugleDlg)
	DDX_Control(pDX, IDC_CHAUTORUAN, m_autorun);
	DDX_Control(pDX, IDC_CMBMINU, m_minu);
	DDX_Control(pDX, IDC_CMBHOUR, m_hour);
	DDX_Control(pDX, IDC_EDSOUND, m_sound);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CArmyBugleDlg, CDialog)
	//{{AFX_MSG_MAP(CArmyBugleDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTEXIT, OnExit)
	ON_BN_CLICKED(IDC_BTSET, OnSet)
	ON_BN_CLICKED(IDC_BTADD, OnAdd)
	ON_BN_CLICKED(IDC_CHAUTORUAN, OnSetAutoRun)
	ON_MESSAGE(WM_ONTRAY,OnTray)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CArmyBugleDlg message handlers

BOOL CArmyBugleDlg::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
	GetDlgItem(IDC_CMBHOUR)->EnableWindow(FALSE);
	GetDlgItem(IDC_CMBMINU)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDSOUND)->EnableWindow(FALSE);
	NOTIFYICONDATA data;
	data.hWnd=m_hWnd;
	data.uCallbackMessage=WM_ONTRAY;
	data.uFlags=NIF_MESSAGE|NIF_ICON;
	data.hIcon=m_hIcon;
	data.uID=IDR_MAINFRAME;
	Shell_NotifyIcon(NIM_ADD,&data);
	for(int i=0;i<24;i++)
	{
		CString temp;
		temp.Format("%02d",i);
		m_hour.AddString(temp);
	}
	for(int p=0;p<60;p++)
	{
		CString temp;
		temp.Format("%02d",p);
		m_minu.AddString(temp);
	}
	
	char soundbuf[512];
	char timebuf[512];
	//char buf[128];
	//::GetCurrentDirectory(128,buf);
	//strpath.Format("%s\\config.ini",buf);
	char sysbuf[128];
	::GetSystemDirectory(sysbuf,128);
	strcat(sysbuf,"\\Media\\Windows 登录音.wav");
	//::GetPrivateProfileString("myapp","sound",sysbuf,soundbuf,512,strpath);
	//::GetPrivateProfileString("myapp","time","06:04",timebuf,512,strpath);
	::GetPrivateProfileString("myapp","sound",sysbuf,soundbuf,512,NULL);
	::GetPrivateProfileString("myapp","time","06:04",timebuf,512,NULL);
	strtime.Format("%s",timebuf);
	strsound.Format("%s",soundbuf);
	GetDlgItem(IDC_CMBHOUR)->SetWindowText(strtime.Left(2));
	GetDlgItem(IDC_CMBMINU)->SetWindowText(strtime.Right(2));
	GetDlgItem(IDC_EDSOUND)->SetWindowText(strsound);
	SetTimer(1,10000,NULL);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CArmyBugleDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	
//	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	//{
	//	CAboutDlg dlgAbout;
	//	dlgAbout.DoModal();
	//}
	if(nID==SC_CLOSE)
	{
		ShowWindow(SW_HIDE);
	}
	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 CArmyBugleDlg::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 CArmyBugleDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
void CArmyBugleDlg::OnTray(WPARAM wParam,LPARAM lParam)
{
	
	UINT msg=UINT(lParam);
	if(msg==WM_LBUTTONDBLCLK)
	{
	this->ShowWindow(SW_SHOWNOACTIVATE);
	}
}

BOOL CArmyBugleDlg::DestroyWindow() 
{
	NOTIFYICONDATA data;
	data.cbSize=sizeof(NOTIFYICONDATA);
	data.hWnd=m_hWnd;
	data.uID=IDR_MAINFRAME;
	Shell_NotifyIcon(NIM_DELETE,&data);
	KillTimer(1);
	return CDialog::DestroyWindow();
}

void CArmyBugleDlg::OnExit() 
{
	this->OnCancel();	
}

void CArmyBugleDlg::OnSet() 
{
	
	CString name;
	GetDlgItem(IDC_BTSET)->GetWindowText(name);
	if(name=="设置")
	{
	GetDlgItem(IDC_BTSET)->SetWindowText("保存");
	m_hour.EnableWindow();
	m_minu.EnableWindow();
	m_sound.EnableWindow();
	}
	else
	{
	GetDlgItem(IDC_BTSET)->SetWindowText("设置");
	m_hour.EnableWindow(FALSE);
	m_minu.EnableWindow(FALSE);
	m_sound.EnableWindow(FALSE);
	CString sound,hour,minu,time;
	GetDlgItem(IDC_CMBHOUR)->GetWindowText(hour);
	GetDlgItem(IDC_CMBMINU)->GetWindowText(minu);
	GetDlgItem(IDC_EDSOUND)->GetWindowText(sound);
	if(sound.IsEmpty())return;
	if(hour.IsEmpty())return;
	if(minu.IsEmpty())return;
	time.Format("%s:%s",hour,minu);
	strtime=time;
	//::WritePrivateProfileString("myapp","sound",sound,strpath);
	//::WritePrivateProfileString("myapp","time",time,strpath);
	::WritePrivateProfileString("myapp","sound",sound,NULL);
	::WritePrivateProfileString("myapp","time",time,NULL);
	}
}

void CArmyBugleDlg::OnAdd() 
{
	CFileDialog log(TRUE,"文件","*.wav",OFN_HIDEREADONLY,
		"声音文件(*.wav)|*.wav||",NULL);
	if(log.DoModal()==IDOK)
	{
        CString pathname=log.GetPathName();
		GetDlgItem(IDC_EDSOUND)->SetWindowText(pathname);
	}	
}

void CArmyBugleDlg::OnSetAutoRun() 
{
	HKEY sub;
	char bufname[200];
	::GetModuleFileName(NULL,bufname,200);
	CString str;
	str.Format("%s",bufname);
	CString skey= 
        "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
	::RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub);
	if(m_autorun.GetCheck())
	{
	::RegSetValueEx(sub,"ArmyBugle",NULL,REG_SZ,(const BYTE*)str.GetBuffer(0),str.GetLength());
	}
	else
	{
		::RegDeleteValue(sub,"ArmyBugle");
	}
	::RegCloseKey(sub);
}

void CArmyBugleDlg::OnTimer(UINT nIDEvent) 
{
	CTime tt;
	tt=CTime::GetCurrentTime();
	CString tmp=tt.Format("%H:%M");
	if(tmp==strtime)
	{
	KillTimer(1);
	MCIDEVICEID m_nDeviceID;
	MCIDEVICEID m_nElementID;
	MCI_OPEN_PARMS mciOpenParms;

	mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
	mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT,(DWORD)(LPVOID)&mciOpenParms);
	m_nDeviceID=mciOpenParms.wDeviceID;

	MCI_OPEN_PARMS mciOpen;
	memset(&mciOpen,0,sizeof(MCI_OPEN_PARMS));
	mciOpen.lpstrElementName=strsound;
	mciSendCommand(m_nDeviceID,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);
	m_nElementID=mciOpen.wDeviceID;

	MCI_PLAY_PARMS mciPlay;
	mciPlay.dwCallback=(DWORD)this->GetSafeHwnd();
	mciSendCommand(m_nElementID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlay);
	//SetTimer(1,10000,NULL);
	}
	CDialog::OnTimer(nIDEvent);
}