|
|
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#define __FILE_ID__ 5
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
extern CClientConsoleApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE() ON_WM_CLOSE() ON_WM_SETTINGCHANGE() ON_WM_SYSCOLORCHANGE() //}}AFX_MSG_MAP
ON_COMMAND(ID_HELP_FINDER, OnHelpContents) ON_MESSAGE(WM_HELP, OnHelp) // F1
ON_COMMAND(ID_VIEW_REFRESH_FOLDER, OnRefreshFolder) ON_COMMAND(ID_SEND_NEW_FAX, OnSendNewFax) ON_COMMAND(ID_RECEIVE_NEW_FAX, OnReceiveNewFax) ON_COMMAND(ID_TOOLS_USER_INFO, OnViewOptions) ON_COMMAND(ID_TOOLS_CONFIG_WIZARD, OnToolsConfigWizard) ON_COMMAND(ID_TOOLS_ADMIN_CONSOLE, OnToolsAdminConsole) ON_COMMAND(ID_TOOLS_MONITOR, OnToolsMonitor) ON_COMMAND(ID_VIEW_COVER_PAGES, OnToolsCoverPages) ON_COMMAND(ID_VIEW_SERVER_STATUS, OnToolsServerStatus) ON_COMMAND(ID_TOOLS_FAX_PRINTER_PROPS, OnToolsFaxPrinterProps) ON_COMMAND(ID_VIEW_SELECT_COLUMNS, OnSelectColumns) ON_COMMAND(ID_IMPORT_INBOX, OnImportInbox) ON_COMMAND(ID_IMPORT_SENT, OnImportSentItems) ON_UPDATE_COMMAND_UI_RANGE(ID_TOOLS_CONFIG_WIZARD, ID_TOOLS_MONITOR, OnUpdateWindowsXPTools) ON_UPDATE_COMMAND_UI(ID_VIEW_SELECT_COLUMNS, OnUpdateSelectColumns) ON_UPDATE_COMMAND_UI(ID_VIEW_SERVER_STATUS, OnUpdateServerStatus) ON_UPDATE_COMMAND_UI(ID_VIEW_REFRESH_FOLDER, OnUpdateRefreshFolder) ON_UPDATE_COMMAND_UI(ID_INDICATOR_FOLDER_ITEMS_COUNT, OnUpdateFolderItemsCount) ON_UPDATE_COMMAND_UI(ID_INDICATOR_ACTIVITY, OnUpdateActivity) ON_UPDATE_COMMAND_UI(ID_SEND_NEW_FAX, OnUpdateSendNewFax) ON_UPDATE_COMMAND_UI(ID_RECEIVE_NEW_FAX, OnUpdateReceiveNewFax) ON_UPDATE_COMMAND_UI(ID_IMPORT_SENT, OnUpdateImportSent) ON_UPDATE_COMMAND_UI(ID_HELP_FINDER, OnUpdateHelpContents) ON_MESSAGE(WM_POPUP_ERROR, OnPopupError) ON_MESSAGE(WM_CONSOLE_SET_ACTIVE_FOLDER, OnSetActiveFolder) ON_MESSAGE(WM_CONSOLE_SELECT_ITEM, OnSelectItem) ON_MESSAGE(WM_QUERYENDSESSION, OnQueryEndSession) ON_NOTIFY(NM_DBLCLK, AFX_IDW_STATUS_BAR, OnStatusBarDblClk ) END_MESSAGE_MAP()
//
// List of indices of items used in the Incoming folder
//
#define INCOMING_DEF_COL_NUM 8
static MsgViewItemType IncomingColumnsUsed[] = { MSG_VIEW_ITEM_ICON, // default 0
MSG_VIEW_ITEM_TRANSMISSION_START_TIME, // default 1
MSG_VIEW_ITEM_TSID, // default 2
MSG_VIEW_ITEM_CALLER_ID, // default 3
MSG_VIEW_ITEM_STATUS, // default 4
MSG_VIEW_ITEM_EXTENDED_STATUS, // default 5
MSG_VIEW_ITEM_CURRENT_PAGE, // default 6
MSG_VIEW_ITEM_SIZE, // default 7
MSG_VIEW_ITEM_SERVER, MSG_VIEW_ITEM_CSID, MSG_VIEW_ITEM_DEVICE, MSG_VIEW_ITEM_ROUTING_INFO, MSG_VIEW_ITEM_SEND_TIME, // schedule time
MSG_VIEW_ITEM_TRANSMISSION_END_TIME, MSG_VIEW_ITEM_ID, MSG_VIEW_ITEM_NUM_PAGES, MSG_VIEW_ITEM_RETRIES, MSG_VIEW_ITEM_END // End of list
};
//
// List of indices of items used in the Inbox folder
//
#define INBOX_DEF_COL_NUM 8
static MsgViewItemType InboxColumnsUsed[] = { MSG_VIEW_ITEM_ICON, // default 0
MSG_VIEW_ITEM_TRANSMISSION_START_TIME, // default 1
MSG_VIEW_ITEM_TSID, // default 2
MSG_VIEW_ITEM_CALLER_ID, // default 3
MSG_VIEW_ITEM_NUM_PAGES, // default 4
MSG_VIEW_ITEM_STATUS, // default 5
MSG_VIEW_ITEM_SIZE, // default 6
MSG_VIEW_ITEM_CSID, // default 7
MSG_VIEW_ITEM_SERVER, MSG_VIEW_ITEM_TRANSMISSION_END_TIME, MSG_VIEW_ITEM_TRANSMISSION_DURATION, MSG_VIEW_ITEM_DEVICE, MSG_VIEW_ITEM_ROUTING_INFO, MSG_VIEW_ITEM_ID, MSG_VIEW_ITEM_END // End of list
};
//
// List of indices of items used in the sent items folder
//
#define SENT_ITEMS_DEF_COL_NUM 8
static MsgViewItemType SentItemsColumnsUsed[] = { MSG_VIEW_ITEM_ICON, // default 0
MSG_VIEW_ITEM_TRANSMISSION_START_TIME,// default 1
MSG_VIEW_ITEM_RECIPIENT_NAME, // default 2
MSG_VIEW_ITEM_RECIPIENT_NUMBER, // default 3
MSG_VIEW_ITEM_SUBJECT, // default 4
MSG_VIEW_ITEM_DOC_NAME, // default 5
MSG_VIEW_ITEM_NUM_PAGES, // default 6
MSG_VIEW_ITEM_SIZE, // default 7
MSG_VIEW_ITEM_SERVER, MSG_VIEW_ITEM_USER, MSG_VIEW_ITEM_PRIORITY, MSG_VIEW_ITEM_CSID, MSG_VIEW_ITEM_TSID, MSG_VIEW_ITEM_ORIG_TIME, MSG_VIEW_ITEM_RETRIES, MSG_VIEW_ITEM_ID, MSG_VIEW_ITEM_BROADCAST_ID, MSG_VIEW_ITEM_SUBMIT_TIME, MSG_VIEW_ITEM_TRANSMISSION_DURATION, MSG_VIEW_ITEM_TRANSMISSION_END_TIME, MSG_VIEW_ITEM_BILLING, MSG_VIEW_ITEM_SENDER_NAME, MSG_VIEW_ITEM_SENDER_NUMBER, MSG_VIEW_ITEM_END // End of list
};
//
// List of indices of items used in the Outbox folder
//
#define OUTBOX_DEF_COL_NUM 9
static MsgViewItemType OutboxColumnsUsed[] = { MSG_VIEW_ITEM_ICON, // default 0
MSG_VIEW_ITEM_SUBMIT_TIME, // default 1
MSG_VIEW_ITEM_RECIPIENT_NAME, // default 2
MSG_VIEW_ITEM_RECIPIENT_NUMBER, // default 3
MSG_VIEW_ITEM_SUBJECT, // default 4
MSG_VIEW_ITEM_DOC_NAME, // default 5
MSG_VIEW_ITEM_STATUS, // default 6
MSG_VIEW_ITEM_EXTENDED_STATUS, // default 7
MSG_VIEW_ITEM_CURRENT_PAGE, // default 8
MSG_VIEW_ITEM_SEND_TIME, MSG_VIEW_ITEM_SERVER, MSG_VIEW_ITEM_NUM_PAGES, MSG_VIEW_ITEM_USER, MSG_VIEW_ITEM_PRIORITY, MSG_VIEW_ITEM_CSID, MSG_VIEW_ITEM_TSID, MSG_VIEW_ITEM_ORIG_TIME, MSG_VIEW_ITEM_SIZE, MSG_VIEW_ITEM_DEVICE, MSG_VIEW_ITEM_RETRIES, MSG_VIEW_ITEM_ID, MSG_VIEW_ITEM_BROADCAST_ID, MSG_VIEW_ITEM_BILLING, MSG_VIEW_ITEM_END // End of list
};
//
// Status bar indicators
//
static UINT indicators[] = { ID_SEPARATOR, // status line indicator (menu item)
ID_INDICATOR_FOLDER_ITEMS_COUNT, // status line indicator (num of folder items)
ID_INDICATOR_ACTIVITY, // status line indicator (Activity)
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame() : m_pInitialRightPaneView (NULL), m_pLeftView (NULL), m_pIncomingView(NULL), m_pInboxView(NULL), m_pSentItemsView(NULL), m_pOutboxView(NULL) {}
CMainFrame::~CMainFrame() { }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { int iRes = 0; DWORD dwRes; DBG_ENTER(TEXT("CMainFrame::OnCreate"), (HRESULT &)iRes);
if (CFrameWnd::OnCreate(lpCreateStruct) == -1) { iRes = -1; CALL_FAIL (STARTUP_ERR, TEXT("CFrameWnd::OnCreate"), iRes); return iRes; }
FrameToSavedLayout();
//
// Create the toolbar
//
if (!m_wndToolBar.CreateEx(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { iRes = -1; CALL_FAIL (STARTUP_ERR, TEXT("CToolBar::CreateEx or CToolBar::LoadToolBar"), iRes); return iRes; } //
// Create the rebar and place the toolbar + dialogbar in it.
//
if (!m_wndReBar.Create(this) || !m_wndReBar.AddBar(&m_wndToolBar)) { iRes = -1; CALL_FAIL (STARTUP_ERR, TEXT("CReBar::Create or CReBar::AddBar"), iRes); return iRes; } //
// Create the status bar
//
if (!m_wndStatusBar.CreateEx (this, SBARS_SIZEGRIP | SBT_TOOLTIPS) || !m_wndStatusBar.SetIndicators (indicators, sizeof(indicators)/sizeof(UINT))) { iRes = -1; CALL_FAIL (STARTUP_ERR, TEXT("CStatusBar::CreateEx or CStatusBar::SetIndicators"), iRes); return iRes; }
//
// set pane width
//
m_wndStatusBar.SetPaneInfo(STATUS_PANE_ITEM_COUNT, ID_INDICATOR_FOLDER_ITEMS_COUNT, SBPS_NORMAL, 80); m_wndStatusBar.SetPaneInfo(STATUS_PANE_ACTIVITY, ID_INDICATOR_ACTIVITY, SBPS_STRETCH, 200);
// TODO: Remove this if you don't want tool tips
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); //
// Load strings used for display throughout the application - priority & job status
//
dwRes = CViewRow::InitStrings (); if (ERROR_SUCCESS != dwRes) { iRes = -1; CALL_FAIL (RESOURCE_ERR, TEXT("CJob::InitStrings"), dwRes); return iRes; } return iRes; }
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { BOOL bRes = TRUE; DBG_ENTER(TEXT("CMainFrame::OnCreateClient"), bRes); //
// Create splitter window
//
if (!m_wndSplitter.CreateStatic(this, 1, 2)) { bRes = FALSE; CALL_FAIL (STARTUP_ERR, TEXT("CSplitterWnd::CreateStatic"), bRes); return bRes; } CRect r; GetWindowRect(r);
int iLeftWidth = int(r.Width()*0.32), iRightWidth = int(r.Width()*0.68);
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(iLeftWidth, r.Height()), pContext ) || !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CClientConsoleView), CSize(iRightWidth, r.Height()), pContext ) ) { m_wndSplitter.DestroyWindow(); bRes = FALSE; CALL_FAIL (STARTUP_ERR, TEXT("CSplitterWnd::CreateView"), bRes); return bRes; } m_pInitialRightPaneView = GetRightPane (); m_pLeftView = (CLeftView *)(m_wndSplitter.GetPane(0,0));
SplitterToSavedLayout();
return bRes; } // CMainFrame::OnCreateClient
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { BOOL bRes = TRUE; DBG_ENTER(TEXT("CMainFrame::PreCreateWindow"), bRes); //
// The following line removes the document name from the application's title.
//
cs.style &= ~FWS_ADDTOTITLE; //
// Use the unique class name so that FindWindow can later locate it.
//
cs.lpszClass = theApp.GetClassName();
if( !CFrameWnd::PreCreateWindow(cs) ) { bRes = FALSE; CALL_FAIL (STARTUP_ERR, TEXT("CFrameWnd::PreCreateWindow"), bRes); return bRes; } return bRes; }
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); }
void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); }
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
CListView* CMainFrame::GetRightPane() { CWnd* pWnd = m_wndSplitter.GetPane(0, 1); return (CListView *)pWnd; }
void CMainFrame::SwitchRightPaneView( CListView *pNewView ) /*++
Routine name : CMainFrame::SwitchRightPaneView
Routine description:
Switches the view displayed in the right pane to a new view
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
pNewView [in] - View to display in the right pane
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::SwitchRightPaneView")); ASSERT_VALID (&m_wndSplitter); if (!pNewView) { //
// Switch back to our initial right pane view
//
pNewView = m_pInitialRightPaneView; } ASSERTION (pNewView); ASSERT_KINDOF (CListView, pNewView); //
// Get window at current pane
//
CWnd *pPaneWnd = m_wndSplitter.GetPane (0,1); ASSERT_VALID (pPaneWnd); CListView *pCurrentView = static_cast<CListView*> (pPaneWnd); //
// Exchange view window ID's so RecalcLayout() works.
//
UINT uCurrentViewId = ::GetWindowLong(pCurrentView->m_hWnd, GWL_ID); UINT uNewViewId = ::GetWindowLong(pNewView->m_hWnd, GWL_ID); if (uCurrentViewId == uNewViewId) { //
// Same view - do nothing
//
return; } ::SetWindowLong(pCurrentView->m_hWnd, GWL_ID, uNewViewId); ::SetWindowLong(pNewView->m_hWnd, GWL_ID, uCurrentViewId); //
// Hide current view and show the new view
//
pCurrentView->ShowWindow(SW_HIDE); pNewView->ShowWindow(SW_SHOW); SetActiveView(pNewView); //
// Cause redraw in new view
//
pNewView->Invalidate(); //
// Recalc frame layout
//
m_wndSplitter.RecalcLayout (); } // CMainFrame::SwitchRightPaneView
void CMainFrame::OnRefreshFolder() /*++
Routine name : CMainFrame::OnRefreshFolder
Routine description:
Called by the framework to refresh the current folder (F5)
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::OnRefreshFolder")); DWORD dwRes = GetLeftView()->RefreshCurrentFolder (); }
void CMainFrame::OnSelectColumns() { DBG_ENTER(TEXT("CMainFrame::OnSelectColumns"));
DWORD dwRes = m_pLeftView->OpenSelectColumnsDlg(); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CLeftView::OpenSelectColumnsDlg"), dwRes); PopupError(dwRes); } }
void CMainFrame::OnUpdateSelectColumns( CCmdUI* pCmdUI ) { DBG_ENTER(TEXT("CMainFrame::OnUpdateSelectColumns"));
pCmdUI->Enable(m_pLeftView->CanOpenSelectColumnsDlg()); }
void CMainFrame::OnUpdateFolderItemsCount( CCmdUI* pCmdUI ) /*++
Routine name : CMainFrame::OnUpdateFolderItemsCount
Routine description:
status bar indication of folder items count
Author:
Alexander Malysh (AlexMay), Jan, 2000
Arguments:
pCmdUI [in/out]
Return Value:
None.
--*/ { CString cstrText; if(NULL != m_pLeftView) { int nItemCount = m_pLeftView->GetDataCount(); //
// if nItemCount < 0 this information is not relevant
//
if(nItemCount >= 0) { CString cstrFormat; DWORD dwRes = LoadResourceString (cstrFormat, (1 == nItemCount) ? IDS_STATUS_BAR_ITEM : IDS_STATUS_BAR_ITEMS); if (ERROR_SUCCESS != dwRes) { goto exit; } try { cstrText.Format(cstrFormat, nItemCount); } catch(...) { dwRes = ERROR_NOT_ENOUGH_MEMORY; goto exit; } } }
exit: pCmdUI->SetText (cstrText); }
void CMainFrame::OnStatusBarDblClk( NMHDR* pNotifyStruct, LRESULT* result ) { POINT pt; GetCursorPos(&pt);
CRect rc; m_wndStatusBar.GetItemRect(STATUS_PANE_ACTIVITY, &rc); m_wndStatusBar.ClientToScreen(&rc);
if(rc.PtInRect(pt)) { OnToolsServerStatus(); } }
void CMainFrame::OnUpdateActivity( CCmdUI* pCmdUI ) { CString cstrText; HICON hIcon = NULL;
if (!m_pLeftView) { //
// No left view yet
//
return; }
if (!m_pLeftView->GetActivity(cstrText, hIcon)) { //
// Activity string is to be ignored
//
cstrText.Empty (); }
CStatusBarCtrl& barCtrl = m_wndStatusBar.GetStatusBarCtrl(); barCtrl.SetIcon(STATUS_PANE_ACTIVITY, hIcon); pCmdUI->SetText (cstrText); }
void CMainFrame::OnUpdateRefreshFolder( CCmdUI* pCmdUI ) /*++
Routine name : CMainFrame::OnUpdateRefreshFolder
Routine description:
Called by the framework to know if the current folder can be refreshed (F5)
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
pCmdUI [in] - Answer buffer
Return Value:
None.
--*/ { pCmdUI->Enable(GetLeftView()->CanRefreshFolder()); }
LRESULT CMainFrame::OnPopupError ( WPARAM wParam, LPARAM lParam) /*++
Routine name : CMainFrame::OnPopupError
Routine description:
Handles the WM_POPUP_ERROR messages
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
wParam [in] - Error code lParam [in] - Hiword contains the __FILE_ID__ and Loword contains the line number
Return Value:
Standard result code
--*/ { DWORD dwErrCode = (DWORD) wParam; WORD wFileId = HIWORD(DWORD(lParam)); WORD wLineNumber = LOWORD(DWORD(lParam));
CErrorDlg ErrDlg(dwErrCode, wFileId, wLineNumber); return ErrDlg.DoModal (); } // CMainFrame::OnPopupError
LRESULT CMainFrame::OnSelectItem ( WPARAM wParam, LPARAM lParam) /*++
Routine name : CMainFrame::OnSelectItem
Routine description:
Handles the WM_CONSOLE_SELECT_ITEM messages
Author:
Eran Yariv (EranY), May, 2001
Arguments:
wParam [in] - Low 32-bits of message id lParam [in] - High 32-bits of message id
Return Value:
Standard result code
--*/ { DBG_ENTER(TEXT("CMainFrame::OnSelectItem"), TEXT("wParam=%ld, lParam=%ld"), wParam, lParam);
ULARGE_INTEGER uli; uli.LowPart = wParam; uli.HighPart = lParam;
if (!m_pLeftView) { return FALSE; }
CFolderListView* pCurView = m_pLeftView->GetCurrentView(); if (!pCurView) { return FALSE; } pCurView->SelectItemById(uli.QuadPart); return TRUE; } // CMainFrame::OnSelectItem
LRESULT CMainFrame::OnSetActiveFolder ( WPARAM wParam, LPARAM lParam) /*++
Routine name : CMainFrame::OnSetActiveFolder
Routine description:
Handles the WM_CONSOLE_SET_ACTIVE_FOLDER messages
Author:
Eran Yariv (EranY), May, 2001
Arguments:
wParam [in] - FolderType value lParam [in] - Unused
Return Value:
Standard result code
--*/ { DBG_ENTER(TEXT("CMainFrame::OnSetActiveFolder"), TEXT("wParam=%ld, lParam=%ld"), wParam, lParam);
if (wParam > FOLDER_TYPE_INCOMING) { VERBOSE (GENERAL_ERR, TEXT("wParam is out of range - message ignored")); return FALSE; } if (!m_pLeftView) { return FALSE; } m_pLeftView->SelectFolder (FolderType(wParam)); return TRUE; } // CMainFrame::OnSetActiveFolder
DWORD CMainFrame::CreateFolderViews ( CDocument *pDoc ) /*++
Routine name : CMainFrame::CreateFolderViews
Routine description:
Creates the 4 global views used for folders display
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
pDoc [in] - Pointer to document to attach to the new views
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::CreateFolderViews"), dwRes);
DWORD dwChildID = AFX_IDW_PANE_FIRST + 10;
ASSERTION (!m_pIncomingView && !m_pInboxView && !m_pSentItemsView && !m_pOutboxView);
//
// Create incoming view
//
dwRes = CreateDynamicView (dwChildID++, CLIENT_INCOMING_VIEW, RUNTIME_CLASS(CFolderListView), pDoc, (PINT)IncomingColumnsUsed, INCOMING_DEF_COL_NUM, (CFolderListView **)&m_pIncomingView, FOLDER_TYPE_INCOMING); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CMainFrame::CreateDynamicView (Incoming)"), dwRes); return dwRes; }
//
// Create inbox view
//
dwRes = CreateDynamicView (dwChildID++, CLIENT_INBOX_VIEW, RUNTIME_CLASS(CFolderListView), pDoc, (PINT)InboxColumnsUsed, INBOX_DEF_COL_NUM, (CFolderListView **)&m_pInboxView, FOLDER_TYPE_INBOX); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CMainFrame::CreateDynamicView (Inbox)"), dwRes); return dwRes; }
//
// Create SentItems view
//
dwRes = CreateDynamicView (dwChildID++, CLIENT_SENT_ITEMS_VIEW, RUNTIME_CLASS(CFolderListView), pDoc, (PINT)SentItemsColumnsUsed, SENT_ITEMS_DEF_COL_NUM, (CFolderListView **)&m_pSentItemsView, FOLDER_TYPE_SENT_ITEMS); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CMainFrame::CreateDynamicView (SentItems)"), dwRes); return dwRes; }
//
// Create Outbox view
//
dwRes = CreateDynamicView (dwChildID++, CLIENT_OUTBOX_VIEW, RUNTIME_CLASS(CFolderListView), pDoc, (PINT)OutboxColumnsUsed, OUTBOX_DEF_COL_NUM, (CFolderListView **)&m_pOutboxView, FOLDER_TYPE_OUTBOX); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CMainFrame::CreateDynamicView (Outbox)"), dwRes); return dwRes; }
return dwRes; } // CMainFrame::CreateFolderViews
DWORD CMainFrame::CreateDynamicView ( DWORD dwChildId, LPCTSTR lpctstrName, CRuntimeClass* pViewClass, CDocument* pDoc, int* pColumnsUsed, DWORD dwDefaultColNum, CFolderListView** ppNewView, FolderType type ) /*++
Routine name : CMainFrame::CreateDynamicView
Routine description:
Creates a new view dynamically
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
dwChildId [in ] - New child id (within the splitter) of the view lpctstrName [in ] - Name of the view pViewClass [in ] - Class of the view pDoc [in ] - Pointer to document to attach to the new view pColumnsUsed [in ] - List of columns to use in the view dwDefaultColNum [in ] - default column number ppNewView [out] - Pointer to newly created view
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::CreateDynamicView"), dwRes);
ASSERTION (pDoc);
CCreateContext contextT; contextT.m_pNewViewClass = pViewClass; contextT.m_pCurrentDoc = pDoc; contextT.m_pNewDocTemplate = pDoc->GetDocTemplate(); contextT.m_pLastView = NULL; contextT.m_pCurrentFrame = NULL; try { *ppNewView = (CFolderListView*)(pViewClass->CreateObject()); if (NULL == *ppNewView) { dwRes = ERROR_NOT_ENOUGH_MEMORY; CALL_FAIL (MEM_ERR, TEXT ("CRuntimeClass::CreateObject"), dwRes); return dwRes; } } catch (CException *pException) { TCHAR wszCause[1024];
pException->GetErrorMessage (wszCause, 1024); pException->Delete (); VERBOSE (EXCEPTION_ERR, TEXT("CreateObject caused exception : %s"), wszCause); dwRes = ERROR_NOT_ENOUGH_MEMORY; return dwRes; }
(*ppNewView)->SetType(type);
ASSERT((*ppNewView)->m_hWnd == NULL); // Not yet created
DWORD dwStyle = WS_CHILD | // Child window (of splitter)
WS_BORDER | // Has borders
LVS_REPORT | // Report style
LVS_SHAREIMAGELISTS | // All views use one global image list
LVS_SHOWSELALWAYS; // Always show selected items
//
// Create the view
//
CRect rect; if (!(*ppNewView)->Create(NULL, lpctstrName, dwStyle, rect, &m_wndSplitter, dwChildId, &contextT)) { dwRes = ERROR_GEN_FAILURE; CALL_FAIL (WINDOW_ERR, TEXT("CFolderListView::Create"), dwRes); //
// pWnd will be cleaned up by PostNcDestroy
//
return dwRes; }
//
// Init the columns
//
dwRes = (*ppNewView)->InitColumns (pColumnsUsed, dwDefaultColNum); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::InitColumns"), dwRes); }
dwRes = (*ppNewView)->ReadLayout(lpctstrName); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::ReadLayout"), dwRes); }
(*ppNewView)->ColumnsToLayout();
return dwRes; } // CMainFrame::CreateDynamicView
void CMainFrame::SaveLayout() /*++
Routine name : CMainFrame::SaveLayout
Routine description:
saves windows layout to the registry
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::SaveLayout"));
DWORD dwRes = ERROR_SUCCESS;
//
// save folders layout
//
dwRes = m_pIncomingView->SaveLayout(CLIENT_INCOMING_VIEW); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::SaveLayout"), dwRes); } dwRes = m_pInboxView->SaveLayout(CLIENT_INBOX_VIEW); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::SaveLayout"), dwRes); }
dwRes = m_pSentItemsView->SaveLayout(CLIENT_SENT_ITEMS_VIEW); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::SaveLayout"), dwRes); }
dwRes = m_pOutboxView->SaveLayout(CLIENT_OUTBOX_VIEW); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CFolderListView::SaveLayout"), dwRes); } //
// save main frame layout
//
WINDOWPLACEMENT wndpl; if(!GetWindowPlacement(&wndpl)) { CALL_FAIL (WINDOW_ERR, TEXT("CMainFrame::GetWindowPlacement"), 0); } else { BOOL bRes = TRUE; bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_MAXIMIZED, (SW_SHOWMAXIMIZED == wndpl.showCmd)); bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_TOP, wndpl.rcNormalPosition.top); bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_RIGHT, wndpl.rcNormalPosition.right); bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_BOTTOM, wndpl.rcNormalPosition.bottom); bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_LEFT, wndpl.rcNormalPosition.left);
int cxCur, cxMin; m_wndSplitter.GetColumnInfo(0, cxCur, cxMin); bRes &= theApp.WriteProfileInt(CLIENT_MAIN_FRAME, CLIENT_SPLITTER_POS, cxCur); if (!bRes) { VERBOSE (DBG_MSG, TEXT("Could not save one or more window positions")); } } }
LRESULT CMainFrame::OnQueryEndSession( WPARAM, LPARAM ) /*++
Routine name : CMainFrame::OnQueryEndSession
Routine description:
The system shutdown message handler Saves windows layout to the registry
Return Value:
TRUE If the application can terminate conveniently FALSE otherwise
--*/ { DBG_ENTER(TEXT("CMainFrame::OnQueryEndSession"));
SaveLayout();
return TRUE; }
void CMainFrame::OnClose() /*++
Routine name : CMainFrame::OnClose
Routine description:
saves windows layout to the registry
Author:
Alexander Malysh (AlexMay), Jan, 2000
Arguments:
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::OnClose"));
SaveLayout();
CFrameWnd::OnClose(); }
void CMainFrame::FrameToSavedLayout() /*++
Routine name : CMainFrame::FrameToSavedLayout
Routine description:
reads main frame size and position from registry and resize the window
Author:
Alexander Malysh (AlexMay), Jan, 2000
Arguments:
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::FrameToSavedLayout"));
WINDOWPLACEMENT wndpl; if(!GetWindowPlacement(&wndpl)) { CALL_FAIL (WINDOW_ERR, TEXT("CMainFrame::GetWindowPlacement"), 0); return; }
wndpl.rcNormalPosition.top = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_TOP, -1); wndpl.rcNormalPosition.right = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_RIGHT, -1); wndpl.rcNormalPosition.bottom = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_BOTTOM, -1); wndpl.rcNormalPosition.left = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_NORMAL_POS_LEFT, -1);
if(wndpl.rcNormalPosition.top < 0 || wndpl.rcNormalPosition.right < 0 || wndpl.rcNormalPosition.bottom < 0 || wndpl.rcNormalPosition.left < 0) { VERBOSE (DBG_MSG, TEXT("Could not load one or more window positions")); return; }
if(!SetWindowPlacement(&wndpl)) { CALL_FAIL (WINDOW_ERR, TEXT("CMainFrame::SetWindowPlacement"), 0); } }
void CMainFrame::SplitterToSavedLayout() { DBG_ENTER(TEXT("CMainFrame::SplitterToSavedLayout")); //
// set splitter position according to saved value
//
int xPos = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_SPLITTER_POS, -1); if(xPos < 0) { VERBOSE (DBG_MSG, TEXT("Could not load splitter position")); return; } m_wndSplitter.SetColumnInfo(0, xPos, 10); }
void CMainFrame::ActivateFrame( int nCmdShow ) { //
// maximize according to saved value
//
BOOL bMaximized = theApp.GetProfileInt(CLIENT_MAIN_FRAME, CLIENT_MAXIMIZED, 0); if (bMaximized) { nCmdShow = SW_SHOWMAXIMIZED; } CFrameWnd::ActivateFrame(nCmdShow); }
//
// MAX_NUM_SERVERS is defined to limit the range of messages we consider
// as server notification.
//
#define MAX_NUM_SERVERS 256
LRESULT CMainFrame::WindowProc( UINT message, WPARAM wParam, LPARAM lParam ) /*++
Routine name : CMainFrame::WindowProc
Routine description:
Handle windows messages before MFC dispatches them. Here we handle notification messages from the servers.
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
message [in] - Specifies the Windows message to be processed wParam [in] - lParam [in] -
Return Value:
TRUE if mesage was handled by the function, FALSE otherwise.
--*/ { BOOL bRes = FALSE; BOOL bBadMsg = FALSE; if ((WM_SERVER_NOTIFY_BASE > message) || (WM_SERVER_NOTIFY_BASE + MAX_NUM_SERVERS < message)) { //
// This is not a server notification message
//
return CFrameWnd::WindowProc(message, wParam, lParam); } //
// From now on, we're dealing with a server notification
//
DBG_ENTER(TEXT("CMainFrame::WindowProc"), bRes, TEXT("Msg=0x%08x, lParam=0x%08x, wParam=0x%08x"), message, lParam, wParam);
//
// This message should not be processed any more
//
bRes = TRUE; //
// Try looking up the server node for which this message is intended
//
CServerNode *pServer = CServerNode::LookupServerFromMessageId (message); FAX_EVENT_EX *pEvent = (FAX_EVENT_EX *)(lParam); ASSERTION (pEvent); ASSERTION (sizeof (FAX_EVENT_EX) == pEvent->dwSizeOfStruct); if (pServer) { //
// Tell the server a notification has arrived for it
//
VERBOSE (DBG_MSG, TEXT("Message was coming from %s"), pServer->Machine()); try { //
// Protect against bogus messages
//
DWORD dwRes = pServer->OnNotificationMessage (pEvent); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CServerNode::OnNotificationMessage"), dwRes); } } catch (...) { bBadMsg = TRUE; } } else { VERBOSE (DBG_MSG, TEXT("Got server notification - No server found as sink")); } //
// Processed or not - delete the message
//
if (!bBadMsg) { try { //
// Protect against bogus messages
// ... and ...
// Plant a special value here to catch reuse of the same pointer
//
pEvent->dwSizeOfStruct = 0xbabe; FaxFreeBuffer (pEvent); } catch (...) { bBadMsg = TRUE; } } if (bBadMsg) { VERBOSE (GENERAL_ERR, TEXT("Exception while processing windows message as notification")); ASSERTION_FAILURE; } return bRes; } // CMainFrame::WindowProc
void CMainFrame::OnToolsAdminConsole() { DBG_ENTER(TEXT("CMainFrame::OnToolsAdminConsole")); InvokeServiceManager(m_hWnd, GetResourceHandle(), IDS_ADMIN_CONSOLE_TITLE); }
void CMainFrame::OnToolsConfigWizard() /*++
Routine name : CMainFrame::OnToolsConfigWizard
Routine description:
Fax Configuration Wizard invocation
Return Value:
none
--*/ { DBG_ENTER(TEXT("CMainFrame::OnToolsConfigWizard"));
//
// explicit launch
//
theApp.LaunchConfigWizard(TRUE); }
void CMainFrame::OnToolsMonitor() /*++
Routine name : CMainFrame::OnToolsMonitor
Routine description:
Open Fax Monitor dialog
Return Value:
none
--*/ { DBG_ENTER(TEXT("CMainFrame::OnToolsMonitor"));
HWND hWndFaxMon = ::FindWindow(FAXSTAT_WINCLASS, NULL); if (hWndFaxMon) { ::PostMessage(hWndFaxMon, WM_FAXSTAT_OPEN_MONITOR, 0, 0); } }
void CMainFrame::OnToolsFaxPrinterProps() /*++
Routine name : CMainFrame::OnToolsFaxPrinterProps
Routine description:
Open Fax Printer Properties dialog
Return Value:
none
--*/ { DBG_ENTER(TEXT("CMainFrame::OnToolsMonitor")); //
// Open fax printer properties
//
FaxPrinterProperty(0); }
void CMainFrame::OnUpdateWindowsXPTools( CCmdUI* pCmdUI ) /*++
Routine name : CMainFrame::OnToolsConfigWizard
Routine description:
Delete Fax Configuration Wizard and Admin Console menu items for non Windows XP plarform
Return Value:
none
--*/ { DBG_ENTER(TEXT("CMainFrame::OnUpdateConfigWizard")); if(pCmdUI->m_pMenu) { if(!IsWinXPOS()) { pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_CONFIG_WIZARD, MF_BYCOMMAND); pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_ADMIN_CONSOLE, MF_BYCOMMAND); pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_MONITOR, MF_BYCOMMAND); pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_FAX_PRINTER_PROPS, MF_BYCOMMAND); } else { //
// Windows XP OS - check SKU
//
if (IsDesktopSKU() || !IsFaxComponentInstalled(FAX_COMPONENT_ADMIN)) { pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_ADMIN_CONSOLE, MF_BYCOMMAND); }
if(!IsFaxComponentInstalled(FAX_COMPONENT_CONFIG_WZRD)) { pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_CONFIG_WIZARD, MF_BYCOMMAND); }
if(!IsFaxComponentInstalled(FAX_COMPONENT_MONITOR)) { pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_MONITOR, MF_BYCOMMAND); }
//
// Local fax printer properties
//
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(NULL == pDoc) { ASSERTION_FAILURE; return; } //
// Find local fax server
// if it is not installed disable the menu item
//
if(!pDoc->FindServerByName(NULL) || !IsFaxComponentInstalled(FAX_COMPONENT_DRIVER_UI)) { pCmdUI->m_pMenu->DeleteMenu(ID_TOOLS_FAX_PRINTER_PROPS, MF_BYCOMMAND); } }
if(pCmdUI->m_pMenu->GetMenuItemCount() == 4) { //
// delete the menu separator
//
pCmdUI->m_pMenu->DeleteMenu(3, MF_BYPOSITION); } } }
void CMainFrame::OnUpdateSendNewFax( CCmdUI* pCmdUI ) { BOOL bEnable = FALSE;
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(NULL != pDoc) { bEnable = pDoc->IsSendFaxEnable(); }
pCmdUI->Enable(bEnable); }
void CMainFrame::OnUpdateReceiveNewFax( CCmdUI* pCmdUI ) { BOOL bEnable = FALSE;
if (IsWinXPOS ()) { //
// Receive now works only in Windows XP
//
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(NULL != pDoc) { bEnable = pDoc->CanReceiveNow(); } } pCmdUI->Enable(bEnable); }
void CMainFrame::OnReceiveNewFax() /*++
Routine name : CMainFrame::OnReceiveNewFax
Routine description:
Starts receiving now
Author:
Eran Yariv (EranY). Mar, 2001
Arguments:
Return Value:
None.
--*/ { DBG_ENTER(TEXT("CMainFrame::OnReceiveNewFax"));
HWND hWndFaxMon = ::FindWindow(FAXSTAT_WINCLASS, NULL); if (hWndFaxMon) { ::PostMessage(hWndFaxMon, WM_FAXSTAT_RECEIVE_NOW, 0, 0); } } // CMainFrame::OnReceiveNewFax
void CMainFrame::OnSendNewFax() /*++
Routine name : CMainFrame::OnSendNewFax
Routine description:
start send fax wizard
Author:
Alexander Malysh (AlexMay), Feb, 2000
Arguments:
Return Value:
None.
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::OnSendNewFax")); //
// get send fax wizard location
//
CString cstrFaxSend; dwRes = GetAppLoadPath(cstrFaxSend); if(ERROR_SUCCESS != dwRes) { PopupError(dwRes); CALL_FAIL (GENERAL_ERR, TEXT("GetAppLoadPath"), dwRes); return; }
try { cstrFaxSend += FAX_SEND_IMAGE_NAME; } catch(...) { dwRes = ERROR_NOT_ENOUGH_MEMORY; PopupError(dwRes); CALL_FAIL (MEM_ERR, TEXT("CString::operator+"), dwRes); return ; }
//
// start send fax wizard
//
HINSTANCE hWizard = ShellExecute(NULL, TEXT("open"), cstrFaxSend, NULL, NULL, SW_RESTORE ); if((DWORD_PTR)hWizard <= 32) { //
// error
//
dwRes = PtrToUlong(hWizard); PopupError(dwRes); CALL_FAIL (GENERAL_ERR, TEXT("ShellExecute"), dwRes); return; }
} // CMainFrame::OnSendNewFax
void CMainFrame::OnViewOptions() { DBG_ENTER(TEXT("CMainFrame::OnViewOptions"));
CUserInfoDlg userInfo; if(userInfo.DoModal() == IDABORT) { DWORD dwRes = userInfo.GetLastDlgError(); CALL_FAIL (GENERAL_ERR, TEXT("CUserInfoDlg::DoModal"), dwRes); PopupError(dwRes); } }
void CMainFrame::OnToolsCoverPages() { DBG_ENTER(TEXT("CMainFrame::OnToolsCoverPages"));
CCoverPagesDlg cpDlg; if(cpDlg.DoModal() == IDABORT) { DWORD dwRes = cpDlg.GetLastDlgError(); CALL_FAIL (GENERAL_ERR, TEXT("CCoverPagesDlg::DoModal"), dwRes); PopupError(dwRes); } }
void CMainFrame::OnSettingChange( UINT uFlags, LPCTSTR lpszSection ) { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::OnSettingChange"));
CFrameWnd::OnSettingChange(uFlags, lpszSection);
if(lpszSection && !_tcscmp(lpszSection, TEXT("devices"))) { //
// some change in the system devices
//
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(NULL != pDoc) { dwRes = pDoc->RefreshServersList(); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CClientConsoleDoc::RefreshServersList"), dwRes); } } } } // CMainFrame::OnSettingChange
LONG CMainFrame::OnHelp( UINT wParam, LONG lParam ) /*++
Routine name : CMainFrame::OnHelp
Routine description:
F1 key handler
Author:
Alexander Malysh (AlexMay), Mar, 2000
Arguments:
wParam [in] - lParam [in] - LPHELPINFO
Return Value:
LONG
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::OnHelp"));
if(!IsFaxComponentInstalled(FAX_COMPONENT_HELP_CLIENT_CHM)) { //
// The help file is not installed
//
return TRUE; }
if(NULL != m_pLeftView) { dwRes = m_pLeftView->OpenHelpTopic(); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CLeftView::OpenHelpTopic"),dwRes); } } else { OnHelpContents(); }
return TRUE; }
void CMainFrame::OnUpdateHelpContents(CCmdUI* pCmdUI) { pCmdUI->Enable(IsFaxComponentInstalled(FAX_COMPONENT_HELP_CLIENT_CHM)); }
void CMainFrame::OnHelpContents() /*++
Routine name : CMainFrame::OnHelpContents
Routine description:
Help Contents menu item handler
Author:
Alexander Malysh (AlexMay), Mar, 2000
Arguments:
Return Value:
None.
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::OnHelpContents"));
dwRes = ::HtmlHelpTopic(m_hWnd, FAX_HELP_WELCOME); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("HtmlHelpTopic"),dwRes); } }
void CMainFrame::OnUpdateServerStatus( CCmdUI* pCmdUI ) { BOOL bEnable = FALSE;
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(NULL != pDoc) { bEnable = pDoc->GetServerCount() > 0; }
pCmdUI->Enable(bEnable); }
void CMainFrame::OnToolsServerStatus() { DBG_ENTER(TEXT("CMainFrame::OnToolsServerStatus"));
CClientConsoleDoc* pDoc = (CClientConsoleDoc*)GetActiveDocument(); if(pDoc->GetServerCount() == 0) { //
// no fax printer install
//
return; }
CServerStatusDlg srvStatus(pDoc); if(srvStatus.DoModal() == IDABORT) { DWORD dwRes = srvStatus.GetLastDlgError(); CALL_FAIL (GENERAL_ERR, TEXT("CServerStatusDlg::DoModal"), dwRes); PopupError(dwRes); } } void CMainFrame::OnImportSentItems() { ImportArchive(TRUE); }
void CMainFrame::OnImportInbox() { ImportArchive(FALSE); }
void CMainFrame::ImportArchive( BOOL bSentArch ) /*++
Routine name : CMainFrame::ImportArchive
Routine description:
Import W2K MS faxes into the fax archive
Arguments:
bSentArch - [in] TRUE for Sent Items, FALSE for Inbox
Return Value:
None.
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CMainFrame::ImportArchive"));
#ifdef UNICODE
HKEY hRegKey; DWORD dwSize; DWORD dwFlags = 0; WCHAR* pszFolder = NULL;
CFolderDialog dlgFolder;
//
// Read initial import folder
//
if ((hRegKey = OpenRegistryKey(HKEY_LOCAL_MACHINE, REGKEY_FAX_SETUP, TRUE, KEY_QUERY_VALUE))) { if(bSentArch) { pszFolder = GetRegistryString(hRegKey, REGVAL_W2K_SENT_ITEMS, NULL); } else { pszFolder = GetRegistryStringMultiSz(hRegKey, REGVAL_W2K_INBOX, NULL, &dwSize); }
RegCloseKey(hRegKey); } else { CALL_FAIL(GENERAL_ERR, TEXT("OpenRegistryKey"), GetLastError()); } dwRes = dlgFolder.Init(pszFolder, bSentArch ? IDS_IMPORT_TITLE_SENTITEMS : IDS_IMPORT_TITLE_INBOX); if(ERROR_SUCCESS != dwRes) { CALL_FAIL(GENERAL_ERR, TEXT("CMainFrame::ImportArchive"), dwRes); goto exit; }
//
// Display Browse for folder dialog
//
if (IsWinXPOS()) { //
// The new BIF_NONEWFOLDERBUTTON is only defined for WinXP and above
//
dwFlags = BIF_NONEWFOLDERBUTTON; }
if(IDOK != dlgFolder.DoModal(dwFlags)) { goto exit; }
//
// Import the selected folder
//
dwRes = ImportArchiveFolderUI(dlgFolder.GetSelectedFolder(), bSentArch, m_hWnd); if(ERROR_SUCCESS != dwRes) { CALL_FAIL(GENERAL_ERR, TEXT("ImportArchiveFolderUI"), dwRes); }
exit:
MemFree(pszFolder);
#endif // UNICODE
}
void CMainFrame::OnUpdateImportSent(CCmdUI* pCmdUI) { if(pCmdUI->m_pMenu) { if(!IsWinXPOS()) {
//
// Delete the Import menu item and separator for non Windows XP OS
//
pCmdUI->m_pMenu->DeleteMenu(15, MF_BYPOSITION); pCmdUI->m_pMenu->DeleteMenu(14, MF_BYPOSITION); } } }
afx_msg void CMainFrame::OnSysColorChange() { //
// Refresh the image lists we use - force it to refresh
// Since the image list are static FolderListView members (shared between all instances),
// we just pick any instance and call it's refresh function with bForce=TRUE.
//
if (m_pIncomingView) { m_pIncomingView->RefreshImageLists(TRUE); m_pIncomingView->Invalidate (); } if (m_pInboxView) { m_pInboxView->RefreshImageLists(FALSE); m_pInboxView->Invalidate (); } if (m_pSentItemsView) { m_pSentItemsView->RefreshImageLists(FALSE); m_pSentItemsView->Invalidate (); } if (m_pOutboxView) { m_pOutboxView->RefreshImageLists(FALSE); m_pOutboxView->Invalidate (); } if (m_pLeftView) { m_pLeftView->RefreshImageList (); m_pLeftView->Invalidate(); } if (m_pInitialRightPaneView) { m_pInitialRightPaneView->GetListCtrl().SetBkColor(::GetSysColor(COLOR_WINDOW)); } } // CMainFrame::OnSysColorChange
|