www.pudn.com > TestIPMSG.rar > MainFrm.cpp
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "TestIPMSG.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_SETFOCUS()
ON_WM_DROPFILES()
//}}AFX_MSG_MAP
ON_COMMAND(103,OnExitMainFramAndStrayIcon)
ON_COMMAND(102,OnOpenMainFram)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
::Shell_NotifyIcon(NIM_DELETE,&m_strayIcon);
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
IniStray();
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CWnd::DragAcceptFiles();
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
// forward focus to the view window
m_wndView.SetFocus();
}
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// let the view have first crack at the command
if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
// otherwise, do default handling
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch( message )
{
case UM_STRAY_ICON :
if ( lParam == WM_RBUTTONDOWN )
{
HMENU hMenu;
hMenu = ::CreatePopupMenu();
if ( hMenu == NULL )
break;
AppendMenu(hMenu,MF_STRING,102,_T("打开主截面"));
AppendMenu(hMenu,MF_STRING,103,_T("退出"));
::SetForegroundWindow(m_hWnd);
CPoint pos;
::GetCursorPos(&pos);
::TrackPopupMenuEx(hMenu,TPM_VERTICAL,pos.x,pos.y,m_hWnd,NULL);
}
break;
default:
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
void CMainFrame::IniStray()
{
m_strayIcon.cbSize = sizeof ( NOTIFYICONDATA );
m_strayIcon.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_strayIcon.hWnd = m_hWnd;
m_strayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_strayIcon.uID = IDR_MAINFRAME;
_tcscpy(m_strayIcon.szTip,_T("迅捷"));
m_strayIcon.uCallbackMessage = UM_STRAY_ICON;
::Shell_NotifyIcon(NIM_ADD,&m_strayIcon);
}
void CMainFrame::OnOpenMainFram()
{
CFastTransmit FastTransmit;
FastTransmit.DoModal();
}
void CMainFrame::OnExitMainFramAndStrayIcon()
{
CTestIPMSGApp * testApp = (CTestIPMSGApp *)AfxGetApp();
::Shell_NotifyIcon(NIM_DELETE,&m_strayIcon);
DestroyWindow();
}
void CMainFrame::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default
CFrameWnd::OnDropFiles(hDropInfo);
}