www.pudn.com > mischat.rar > MainFrm.cpp
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "mischat.h"
#include "mischatDoc.h"
#include "MainFrm.h"
#include "mischatView.h"
#include "DrawTypeId.h"
#include ".\mainfrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern CmischatDoc* pDoc;
#define WM_REFRESHCAPTIONBAR WM_USER + 0x7FFF
#define WM_APPENDOUTPUTBARINFO WM_USER + 0x7FFE
#define WM_REFRESHIPBAR WM_USER + 0x7FFD
#define WM_PANEGROGRESSBAR WM_USER + 0x7FFC
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CBCGPFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CBCGPFrameWnd)
ON_WM_CREATE()
ON_REGISTERED_MESSAGE(BCGM_TOOLBARMENU, OnToolbarContextMenu)
ON_COMMAND(ID_VIEW_OUTPUT, OnViewOutput)
ON_UPDATE_COMMAND_UI(ID_VIEW_OUTPUT, OnUpdateViewOutput)
ON_COMMAND(ID_ONLINEIP_BAR, OnLineIPBar)
ON_UPDATE_COMMAND_UI(ID_ONLINEIP_BAR, OnUpdateOnLineIPBar)
ON_COMMAND(ID_VIEW_INPUT, OnViewInput)
ON_UPDATE_COMMAND_UI(ID_VIEW_INPUT, OnUpdateViewInput)
ON_COMMAND(ID_VIEW_CAPTIONBAR, OnViewCaptionBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTIONBAR, OnUpdateViewCaptionBar)
ON_COMMAND(ID_TOOLBOX, OnToolBox)
ON_COMMAND(ID_VIEW_TOOLBOX, OnViewToolbox)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBOX, OnUpdateViewToolbox)
ON_COMMAND(ID_VIEW_PROPERTIES, OnViewProperties)
ON_UPDATE_COMMAND_UI(ID_VIEW_PROPERTIES, OnUpdateViewProperties)
ON_COMMAND(IDM_SERVERCONFIG, OnServerConfig)
ON_COMMAND(IDM_CLIENTCONFIG, OnClientConfig)
ON_WM_TIMER()
ON_COMMAND(ID_VIEW_FULLSCREEN, OnViewFullscreen)
ON_COMMAND(ID_HELP_USING, OnHelpUsing)
ON_MESSAGE(WM_REFRESHCAPTIONBAR, OnRefreshCaptionBar)
ON_MESSAGE(WM_APPENDOUTPUTBARINFO, OnAppendOutputBarInfo)
ON_MESSAGE(WM_REFRESHIPBAR, OnRefreshIPBar)
ON_MESSAGE(WM_PANEGROGRESSBAR, OnPaneProgressBar)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_PROGRESS,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame construction/destruction
CMainFrame* pMainWnd;
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
flashWndCount=5;
m_nTimer=-1;
pMainWnd=this;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CBCGPFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// enable Office 2003 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2003));
if (!m_wndMenuBar.Create (this))
{
TRACE0("Failed to create menubar\n");
return -1; // fail to create
}
m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC);
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
}
m_wndToolBar.EnableCustomizeButton(TRUE,IDR_CUSTOMIZE_TOOLBAR,_T("定制"));
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
}
m_wndStatusBar.EnablePaneProgressBar (1,100,TRUE);
if (!m_wndOutput.Create (_T("接收信息"), this, CSize (150, 150),
TRUE /* Has gripper */, ID_VIEW_OUTPUT,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create output bar\n");
return -1; // fail to create
}
HICON hOutputBarIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),
MAKEINTRESOURCE (IDI_OUTPUT_BAR),
IMAGE_ICON, ::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);
m_wndOutput.SetIcon (hOutputBarIcon, FALSE);
if (!m_wndInput.Create (_T("发送信息"), this, CSize (150, 150),
TRUE /* Has gripper */, ID_VIEW_INPUT,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create input bar\n");
return -1; // fail to create
}
HICON hInputBarIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),
MAKEINTRESOURCE (IDI_INPUT_BAR),
IMAGE_ICON, ::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);
m_wndInput.SetIcon (hInputBarIcon, FALSE);
if (!m_wndToolBoxBar.Create (_T("会商工具箱"), this, CRect (0, 0, 100, 100),
TRUE,
ID_TOOLBOX,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT /*| CBRS_FLOAT_MULTI*/))
{
TRACE0("Failed to create ToolBox Bar\n");
return FALSE; // fail to create
}
HICON hToolBoxBarIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),
MAKEINTRESOURCE (IDI_TOOLBOX_BAR),
IMAGE_ICON, ::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);
m_wndToolBoxBar.SetIcon (hToolBoxBarIcon, FALSE);
CString strMainToolbarTitle;
strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR);
m_wndToolBar.SetWindowText (strMainToolbarTitle);
if (!m_wndPropertiesBar.Create (_T("参数设置"), this, CRect (0, 0, 200, 200),
TRUE,
ID_VIEW_PROPERTIES,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Properties Bar\n");
return FALSE; // fail to create
}
HICON hPropertiesBarIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),
MAKEINTRESOURCE (IDI_PROPERTIES_BAR),
IMAGE_ICON, ::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);
m_wndPropertiesBar.SetIcon (hPropertiesBarIcon, FALSE);
if (!m_wndOnlineIPBar.Create (_T("在线用户"), this, CSize (150, 150),
TRUE /* Has gripper */, ID_ONLINEIP_BAR,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create onlineip bar\n");
return -1; // fail to create
}
HICON hOnlineIPIcon = (HICON) ::LoadImage (::AfxGetResourceHandle (),
MAKEINTRESOURCE (IDI_ONLINEIP_BAR),
IMAGE_ICON, ::GetSystemMetrics (SM_CXSMICON), ::GetSystemMetrics (SM_CYSMICON), 0);
m_wndOnlineIPBar.SetIcon (hOnlineIPIcon, FALSE);
// TODO: Delete these three lines if you don't want the toolbar to be dockable
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
m_wndInput.EnableDocking(CBRS_ALIGN_ANY);
m_wndOnlineIPBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBoxBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);
m_wndPropertiesBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
if (!m_wndCaptionBar.Create (WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this,
ID_VIEW_CAPTIONBAR, -1))
{
TRACE0("Failed to create caption bar\n");
return -1; // fail to create
}
m_wndCaptionBar.SetFlatBorder ();
m_wndCaptionBar.SetText (_T("远程会商 1.3 解放军理工大学气象学院 2006/07/10 版权所有"));
m_bmpCaption.LoadBitmap (IDB_CAPTION);
m_wndCaptionBar.SetBitmap (m_bmpCaption, RGB (255, 0, 255));
EnableAutoHideBars(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMenuBar);
DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndOutput);
DockControlBar(&m_wndInput);
DockControlBar(&m_wndOnlineIPBar);
DockControlBar(&m_wndToolBoxBar);
DockControlBar(&m_wndPropertiesBar);
SetWindowText(_T("远程会商"));
EnableFullScreenMode (ID_VIEW_FULLSCREEN);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CBCGPFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE;
return TRUE;
}
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CBCGPFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CBCGPFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame message handlers
LRESULT CMainFrame::OnToolbarContextMenu(WPARAM,LPARAM lp)
{
CPoint point (BCG_GET_X_LPARAM(lp), BCG_GET_Y_LPARAM(lp));
CMenu menu;
VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CBCGPPopupMenu* pPopupMenu = new CBCGPPopupMenu;
pPopupMenu->Create (this, point.x, point.y, pPopup->Detach ());
return 0;
}
BOOL CMainFrame::OnShowPopupMenu (CBCGPPopupMenu* pMenuPopup)
{
//---------------------------------------------------------
// Replace ID_VIEW_TOOLBARS menu item to the toolbars list:
//---------------------------------------------------------
CBCGPFrameWnd::OnShowPopupMenu (pMenuPopup);
if (pMenuPopup != NULL &&
pMenuPopup->GetMenuBar ()->CommandToIndex (ID_VIEW_TOOLBARS) >= 0)
{
if (CBCGPToolBar::IsCustomizeMode ())
{
//----------------------------------------------------
// Don't show toolbars list in the cuztomization mode!
//----------------------------------------------------
return FALSE;
}
pMenuPopup->RemoveAllItems ();
CMenu menu;
VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pMenuPopup->GetMenuBar ()->ImportFromMenu (*pPopup, TRUE);
}
return TRUE;
}
void CMainFrame::OnViewOutput()
{
ShowControlBar (&m_wndOutput,
!(m_wndOutput.IsVisible ()),
FALSE, TRUE);
RecalcLayout ();
}
void CMainFrame::OnUpdateViewOutput(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndOutput.IsVisible ());
}
void CMainFrame::OnLineIPBar()
{
ShowControlBar (&m_wndOnlineIPBar,
!(m_wndOnlineIPBar.IsVisible ()),
FALSE, TRUE);
RecalcLayout ();
}
void CMainFrame::OnUpdateOnLineIPBar(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndOnlineIPBar.IsVisible ());
}
void CMainFrame::OnViewInput()
{
ShowControlBar (&m_wndInput,
!(m_wndInput.IsVisible ()),
FALSE, TRUE);
RecalcLayout ();
}
void CMainFrame::OnUpdateViewInput(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndInput.IsVisible ());
}
void CMainFrame::OnViewToolbox()
{
ShowControlBar (&m_wndToolBoxBar,
!(m_wndToolBoxBar.IsVisible ()),
FALSE, TRUE);
RecalcLayout ();
}
void CMainFrame::OnUpdateViewToolbox(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndToolBoxBar.IsVisible ());
}
void CMainFrame::OnViewCaptionBar()
{
ShowControlBar (&m_wndCaptionBar,
!(m_wndCaptionBar.IsVisible ()),
FALSE, TRUE);
RecalcLayout ();
}
void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndCaptionBar.IsVisible ());
}
void CMainFrame::OnToolBox()
{
//指针 文本工具 清除工具 铅笔工具 矩形选择 画笔工具 喷枪工具 填充工具 线条工具 空心矩形
//0 1 2 3 4 5 6 7 8 9
//实心矩形 矩形工具 空心圆角矩形 实心圆角矩形 圆角矩形工具 空心椭圆 实心椭圆 椭圆工具
//10 11 12 13 14 15 16 17
int page=m_wndToolBoxBar.GetActivePage ();
int item=m_wndToolBoxBar.GetLastClickedTool (page);
if(page==0)
{
switch(item)
{
case 0:
pDoc->flag=NOTHING;
break;
case 1:
pDoc->flag=DRAWTEXT;
break;
case 2:
pDoc->flag=CLEAR;
pDoc->pView->clearAll ();
if(pDoc->server.isStart())
pDoc->SendMsgToAll (NULL);
if(pDoc->client.isStart())
pDoc->SendMsg(NULL);
break;
case 3:
pDoc->flag=CURVE;
break;
case 4:
pDoc->flag=RECTSELECT;
break;
case 5:
pDoc->flag=PAINTBRUSH;
break;
case 6:
pDoc->flag=SPRAY;
break;
case 7:
pDoc->flag=FILL;
break;
case 8:
pDoc->flag=LINE;
break;
case 9:
pDoc->flag=BLANKRECTANGLE;
break;
case 10:
pDoc->flag=SOLIDRECTANGLE;
break;
case 11:
pDoc->flag=RECTANGLE;
break;
case 12:
pDoc->flag=BLANKROUNDRECT;
break;
case 13:
pDoc->flag=SOLIDROUNDRECT;
break;
case 14:
pDoc->flag=ROUNDRECT;
break;
case 15:
pDoc->flag=BLANKELLIPSE;
break;
case 16:
pDoc->flag=SOLIDELLIPSE;
break;
case 17:
pDoc->flag=ELLIPSE;
break;
case 18:
{
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST,pDoc->strImageFilter);
if(dlg.DoModal() ==IDOK)
{
pDoc->pView->Load (dlg.GetPathName ());
}
}
break;
case 19:
pDoc->OpenWhiteBroad ();
break;
case 20:
pDoc->SaveWhiteBroad ();
break;
case 21:
if(pDoc->server.isStart())
{
pDoc->UpdateAllDrawData();
break;
}
if(pDoc->client.isStart ())
::MessageBox(pMainWnd->GetSafeHwnd(),_T("客户机方式无此功能"),_T("信息"),MB_OK);
break;
}
}
else
{
}
}
void CMainFrame::OnViewProperties()
{
// demonstartes how to make bar active in autohide mode and inactive when non-tabbed
BOOL bAutoHideMode = m_wndPropertiesBar.IsAutoHideMode ();
BOOL bTabbed = m_wndPropertiesBar.IsTabbed ();
ShowControlBar (&m_wndPropertiesBar,
!m_wndPropertiesBar.IsVisible (),
FALSE, bAutoHideMode || !bTabbed);
RecalcLayout ();
}
void CMainFrame::OnUpdateViewProperties(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_wndPropertiesBar.IsVisible ());
}
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
UINT uiCmd = LOWORD (wParam);
switch (uiCmd)
{
case ID_EDIT_PASTE:
::SendMessage (::GetFocus (), WM_PASTE, 0, 0);
return TRUE;
case ID_EDIT_COPY:
::SendMessage (::GetFocus (), WM_COPY, 0, 0);
return TRUE;
case ID_EDIT_CUT:
::SendMessage (::GetFocus (), WM_CUT, 0, 0);
return TRUE;
}
return CWnd::OnCommand(wParam, lParam);
}
void CMainFrame::OnServerConfig()
{
// TODO: 在此添加命令处理程序代码
if(!m_wndPropertiesBar.IsVisible ()){
ShowControlBar (&m_wndPropertiesBar,TRUE,FALSE, TRUE);
RecalcLayout ();
}
m_wndPropertiesBar.SetFocus ();
//if(m_nTimer==-1) m_nTimer=SetTimer(1, 500, NULL);
}
void CMainFrame::OnClientConfig()
{
// TODO: 在此添加命令处理程序代码
if(!m_wndPropertiesBar.IsVisible ()){
ShowControlBar (&m_wndPropertiesBar,TRUE,FALSE, TRUE);
RecalcLayout ();
}
m_wndPropertiesBar.SetFocus ();
//if(m_nTimer==-1) m_nTimer=SetTimer(1, 500, NULL);
}
void CMainFrame::FillOutputBarInfo()
{
CString str,strInfo;
m_wndOutput.m_wndList.DeleteAllItems ();
//pDoc->csOutputInfo.Lock ();
for(int i=0;ioutputInfo.GetUpperBound();i++)
{
strInfo=pDoc->outputInfo.GetAt (i);
if(!strInfo.IsEmpty ()){
str.Format ("%d",i+1);
m_wndOutput.m_wndList.InsertItem(i,str,0);
m_wndOutput.m_wndList.SetItemText(i,1,strInfo);
}else break;
}
pDoc->outInfoIndex =i;
//pDoc->csOutputInfo.Unlock();
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_wndPropertiesBar.FlashWindow (TRUE);
flashWndCount--;
if(flashWndCount==0){
KillTimer (m_nTimer);
flashWndCount=5;
m_nTimer=-1;
}
CBCGPFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::RefreshPropList()
{
m_wndPropertiesBar.RefreshPropList ();
}
void CMainFrame::OnViewFullscreen()
{
// TODO: 在此添加命令处理程序代码
ShowFullScreen ();
}
void CMainFrame::OnHelpUsing()
{
// TODO: 在此添加命令处理程序代码
ShellExecute(NULL,"open","help.chm",NULL,NULL,SW_SHOWNORMAL);
}
LRESULT CMainFrame::OnRefreshCaptionBar(WPARAM wparm, LPARAM lparm)
{
CString strCaption;
LPTSTR p=(LPTSTR)lparm;
strCaption.Format ("远程会商 1.3 解放军理工大学气象学院 2006/07/10 版权所有 当前状态: %s!",p);
m_wndCaptionBar.SetText (strCaption);
m_wndCaptionBar.Invalidate ();
return 1L;
}
LRESULT CMainFrame::OnAppendOutputBarInfo(WPARAM wparm, LPARAM lparm)
{
LPTSTR p=(LPTSTR)lparm;
CString str;
int count=m_wndOutput.m_wndList.GetItemCount ();
str.Format ("%d",count+1);
m_wndOutput.m_wndList.InsertItem(count,str,0);
m_wndOutput.m_wndList.SetItemText(count,1,p);
return 1L;
}
LRESULT CMainFrame::OnRefreshIPBar(WPARAM wparm, LPARAM lparm)
{
m_wndOnlineIPBar.OnLineIPUser();
return 1L;
}
LRESULT CMainFrame::OnPaneProgressBar(WPARAM wparm, LPARAM lparm)
{
m_wndStatusBar.SetPaneProgress (1,(long)lparm);
return 1L;
}