www.pudn.com > 20041201221023_vczx_progtemplate.rar > PageDlg.cpp


// PageDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "Page.h" 
#include "PageDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// 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() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPageDlg dialog 
 
CPageDlg::CPageDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CPageDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CPageDlg) 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
} 
 
void CPageDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CPageDlg) 
	DDX_Control(pDX, IDC_STATIC_TITLE, m_infoBar); 
	DDX_Control(pDX, IDC_LIST1, m_ChoicesList); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CPageDlg, CDialog) 
	//{{AFX_MSG_MAP(CPageDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1) 
	ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnKeydownList1) 
	ON_WM_LBUTTONDOWN() 
	ON_MESSAGE(MYWM_NOTIFYICON,OnMyIconNotify) 
		ON_MESSAGE(WM_HOTKEY,OnHotKey) 
 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPageDlg message handlers 
 
BOOL CPageDlg::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);			 
	SetIcon(m_hIcon, FALSE); 
	 
	HCURSOR hcur=::LoadCursorFromFile("AniCur.ani");           //加载动画广标 
	::SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur); 
 
/*---------------------状态栏---------------------------------*/		 
	CTime time=CTime::GetCurrentTime();	 
	CString m_strTime=time.Format("%X");	 
	m_strTime="程序启动时间 "+m_strTime; 
	 
	m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM,  CRect(0,0,0,0),  this,  102); 
 
	int strPartDim[4]= {100,300,-1};	      
	m_wndStatusBar.SetParts(3,strPartDim); 
 
	m_wndStatusBar.SetText("欢迎使用",0,0 ); 
	m_wndStatusBar.SetText(m_strTime,1,0); 
	m_wndStatusBar.SetText("作者:三峡大学  程红秀",2,0); 
/*------------------------------------------------------------*/ 
TaskBarAddIcon(GetSafeHwnd(),120,AfxGetApp()->LoadIcon(IDI_ICON2),"程序模板");  //添加任务栏图标 
 
	CRect rc;                 // //设置窗体的 位置; 
	GetWindowRect(rc); 
	::MoveWindow(this->GetSafeHwnd(), 
				::GetPrivateProfileInt("WinPos","x",0,".\\Settings.ini"), 
				::GetPrivateProfileInt("WinPos","y",0,".\\Settings.ini"), 
			    rc.Width(), 
				rc.Height(), 
				true 
				); 
 
	if(m_page2.m_bTopMost)    // 设置窗体是是否在最前面 
		AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE); 
	else 
		AfxGetMainWnd()->SetWindowPos(&CWnd::wndNoTopMost ,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE); 
		 
	if(m_page2.m_check_minimize)       //是否最小化	 
		PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0); 
 
 
 
/******************************************************************************/ 
	Init_List(); //列表框的初始化 
 
	m_page1.Create(IDD_PAGE1, this);     // 创建属性页 
	m_page2.Create(IDD_PAGE2, this); 
	m_page3.Create(IDD_PAGE3, this); 
 
	CRect rcDlgs; 
	GetDlgItem(IDC_DIALOG_AREA)->GetWindowRect(rcDlgs); 
	rcDlgs.DeflateRect(3,3); 
	ScreenToClient(rcDlgs);	 
	 
	m_page1.MoveWindow(rcDlgs);   //定位属性页 
	m_page2.MoveWindow(rcDlgs); 
	m_page3.MoveWindow(rcDlgs);  
 
	ActivatePage(0);  //默认显示的属性页	 
 
/******************************************************************************/ 
 
	if ( ((CPageApp*)AfxGetApp())->pSplashThread != NULL) 
		((CPageApp*)AfxGetApp())->pSplashThread->HideSplash();   
	   //在创建了主对话框 并初始化了各个子对话框以后,隐藏启动画面	 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CPageDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
 
		 
	if(nID==SC_MINIMIZE) 
	{ 
		ShowWindow(SW_HIDE); 
	} 
 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
	 
void CPageDlg::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 CPageDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
 
/**************************激活属性页***************************************/ 
void CPageDlg::ActivatePage(int nIndex)  
{ 
	switch(nIndex) 
	{ 
		case 0: 
			m_page1.ShowWindow(SW_SHOW); 
			m_page2.ShowWindow(SW_HIDE);	 
			m_page3.ShowWindow(SW_HIDE); 
			m_infoBar.SetText(" 欢迎使用"); 
			break; 
		case 1: 
			m_page1.ShowWindow(SW_HIDE); 
			m_page2.ShowWindow(SW_SHOW); 
			m_page3.ShowWindow(SW_HIDE); 
			m_infoBar.SetText(" 程序设置"); 
			break; 
		case 2: 
			m_page1.ShowWindow(SW_HIDE); 
			m_page2.ShowWindow(SW_HIDE);	 
			m_page3.ShowWindow(SW_SHOW);	 
			m_infoBar.SetText(" 软件说明"); 
			break; 
		default: 
			break; 
	} 
} 
void CPageDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	int nIndex = m_ChoicesList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);  
    if(nIndex == -1) 
        return; 
	this->ActivatePage(nIndex); 
	*pResult = 0; 
} 
 
void CPageDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; 
	 
	int nIndex = m_ChoicesList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);  
    if(nIndex == -1) 
        return;   
 
	if (pLVKeyDow->wVKey == VK_DOWN) 	//下	 
		ActivatePage(nIndex+1); 
 
	else if (pLVKeyDow->wVKey == VK_UP)  //上		 
		ActivatePage(nIndex-1); 
 
	else if (pLVKeyDow->wVKey == VK_NEXT)	    
		ActivatePage(m_ChoicesList.GetItemCount()-1); 
 
	else if (pLVKeyDow->wVKey == VK_PRIOR)            
		ActivatePage(0); 
 
	*pResult = 0; 
} 
/**************************激活属性页***************************************/ 
 
void CPageDlg::Init_List() 
{ 
 
//	m_ChoicesList.SetExtendedStyle( LVS_EX_TRACKSELECT);	 
	m_ImageList.Create(32, 32, ILC_COLOR16|ILC_MASK,1, 3); 
    HICON hIcon1 = ::LoadIcon (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON2)); 
			 m_ImageList.Add(hIcon1); 
    HICON hIcon2 = ::LoadIcon (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON3)); 
			 m_ImageList.Add(hIcon2); 
    HICON hIcon3 = ::LoadIcon (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON1)); 
			 m_ImageList.Add(hIcon3); 
	m_ChoicesList.SetImageList(&m_ImageList, LVSIL_NORMAL); 
 
	CRect rc; 
	m_ChoicesList.GetClientRect(rc);	 
	m_ChoicesList.SetIconSpacing(rc.Width(), rc.Height()/5);   //设置新的图标的位置 
 
	m_ChoicesList.SetTextColor(RGB(0,85,229)); 
	m_ChoicesList.SetTextBkColor(RGB(223,223,223)); 
	m_ChoicesList.SetBkColor(RGB(223,223,223)); 
 
	m_ChoicesList.InsertColumn(0, "Choices",LVCFMT_LEFT,30,-1);  //插入卷标    
	m_ChoicesList.InsertItem(0, "欢迎使用", 0); 
	m_ChoicesList.InsertItem(1, "程序设置", 1); 
	m_ChoicesList.InsertItem(2, "软件说明", 2);   
} 
 
 
BOOL CPageDlg::DestroyWindow()  
{ 
	CRect rc;               ////保存窗体的位置信息 
	GetWindowRect(&rc); 
	char szInfo[32];  
	::WritePrivateProfileString("WinPos","x", itoa(rc.left ,szInfo,10),".\\Settings.ini"); 
	::WritePrivateProfileString("WinPos","y", itoa(rc.top  ,szInfo,10),".\\Settings.ini"); 
 
	TaskBarDeleteIcon(GetSafeHwnd(),120);   //删除任务栏的图标  
 
	return CDialog::DestroyWindow(); 
} 
 
void CPageDlg::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
   
	ReleaseCapture(); 
	SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,0);	 
	CDialog::OnLButtonDown(nFlags, point); 
} 
 
BOOL CPageDlg::TaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) 
{ 
	NOTIFYICONDATA d; 
	d.cbSize=sizeof(NOTIFYICONDATA); 
	d.hWnd=hwnd; 
	d.uID=uID; 
	d.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE; 
	d.uCallbackMessage=MYWM_NOTIFYICON; 
	d.hIcon=hicon; 
	 
	if(lpszTip) 
		lstrcpy(d.szTip,lpszTip); 
	else 
		d.szTip[0]='\0'; 
	return Shell_NotifyIcon(NIM_ADD,&d); 
 
 
} 
 
BOOL CPageDlg::TaskBarDeleteIcon(HWND hwnd, UINT uID) 
{ 
 
		NOTIFYICONDATA d; 
		d.cbSize=sizeof(NOTIFYICONDATA); 
		d.hWnd=hwnd; 
		d.uID=uID; 
 
		return Shell_NotifyIcon(NIM_DELETE,&d); 
} 
 
BOOL CPageDlg::TaskBarModifyIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) 
{ 
	NOTIFYICONDATA d; 
	d.cbSize=sizeof(NOTIFYICONDATA); 
	d.hWnd=hwnd; 
	d.uID=uID; 
	d.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE; 
	d.uCallbackMessage=MYWM_NOTIFYICON; 
	d.hIcon=hicon; 
	 
	if(lpszTip) 
		lstrcpy(d.szTip,lpszTip); 
	else 
		d.szTip[0]='\0'; 
	return Shell_NotifyIcon(NIM_MODIFY,&d); 
 
} 
 
void CPageDlg::OnMyIconNotify(WPARAM wParam,LPARAM lParam) 
{ 
	UINT uMouseMsg=LOWORD(lParam); 
	switch(uMouseMsg) 
	{ 
	case WM_LBUTTONDOWN: 
		{ 
			ShowWindow(IsWindowVisible()? SW_HIDE:SW_SHOWNORMAL); 
		 
		}break; 
 
/*	case WM_RBUTTONDOWN: 
		{ 
			CPoint point; 
			GetCursorPos(&point);			 
	*********************************Office XP风格的菜单*************************** 
						BCMenu m_popmenu; 
						m_popmenu.LoadMenu(IDR_MENU); 
						BCMenu::SetMenuDrawMode(BCMENU_DRAWMODE_XP); //设置菜单的风格,	BCMENU_DRAWMODE_ORIGINAL为普通风格的菜单 
			 
						BCMenu *psub = (BCMenu *)m_popmenu.GetSubMenu(0); //获取第一个子菜单的指针 
						CRect rect; 
						GetWindowRect(rect); 
						DWORD dwID =psub->TrackPopupMenu((TPM_LEFTALIGN|TPM_RIGHTBUTTON), 
                                                  point.x,point.y, this);  
						m_popmenu.DestroyMenu(); 
	*********************************Office XP风格的菜单*************************** 
 
		} 
		break;  */ 
	} 
} 
 
LRESULT CPageDlg::OnHotKey(WPARAM wp,LPARAM lp) 
{ 
	if(wp==400 ) 
	{ 
		if(!IsWindowVisible()) 
		{	 
			ShowWindow(SW_SHOWNORMAL); 
		} 
		else 
		{ 
			ShowWindow(SW_HIDE); 
		} 
	}	  
	return 0; 
} 
 
 
 
BOOL CPageDlg::PreTranslateMessage(MSG* pMsg)  
{ 
 
    if(pMsg -> message == WM_KEYDOWN) 
	{ 
        if(pMsg -> wParam == VK_ESCAPE) 
			return TRUE; 
		if(pMsg -> wParam == VK_RETURN) 
			return TRUE; 
	}	 
	 
	return CDialog::PreTranslateMessage(pMsg); 
}