Click here to Skip to main content
15,885,065 members
Articles / Mobile Apps / Windows Mobile

A Picture Viewer for the Pocket PC 2002

Rate me:
Please Sign up or sign in to vote.
4.79/5 (21 votes)
2 Nov 2003CPOL4 min read 496.5K   685   43  
Putting imgdecmp.lib to work with a few extras.
// MainFrm.cpp : implementation of the CMainFrame class
//
//
// Portions � 2001 Pocket PC Developer Network 
//
//

#include "stdafx.h"
#include "PicView.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#define PSPC_TOOLBAR_HEIGHT 24

const DWORD dwAdornmentFlags = 0; // exit button


//---------------------------------------------------------------------------
//
//	CMainFrame
//
//---------------------------------------------------------------------------


IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_NOTIFY(DLN_CE_CREATE, AFXCE_ID_DOCLIST, OnCreateDocList)
	ON_WM_DESTROY()
	ON_UPDATE_COMMAND_UI(ID_FULL_SCREEN, OnUpdateFullScreen)
	ON_COMMAND(ID_FULL_SCREEN, OnFullScreen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//---------------------------------------------------------------------------
//
//	CMainFrame construction/destruction
//
//---------------------------------------------------------------------------


CMainFrame::CMainFrame()
:	m_bFullScreen	(FALSE)
{
}


CMainFrame::~CMainFrame()
{
}


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	m_wndCommandBar.m_bShowSharedNewButton = FALSE;
	m_ToolTipsTable[0] = MakeString(IDS_NEW);
	m_ToolTipsTable[1] = MakeString(IDS_FILE);
	m_ToolTipsTable[2] = MakeString(IDS_ZOOM_PLUS);
	m_ToolTipsTable[3] = MakeString(IDS_ZOOM_MINUS);
	m_ToolTipsTable[4] = MakeString(IDS_FULL_SCREEN);

	if(!m_wndCommandBar.Create(this) ||
	   !m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) ||
	   !m_wndCommandBar.AddAdornments() ||
	   !m_wndCommandBar.LoadToolBar(IDR_MAINFRAME)  ||
		!m_wndCommandBar.SendMessage(TB_SETTOOLTIPS, (WPARAM)(4), (LPARAM)(&m_ToolTipsTable[1])))
	{
		TRACE0("Failed to create CommandBar\n");
		return -1;      // fail to create
	}

	m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

	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


	return TRUE;
}


// CMainFrame::OnCreateDocList
//
//		Removes the 'New' button from the command bar
//		This code was written by Vassili Philipov
//		http://www.pocketpcdn.com/qa/remove_new_button.html
//
void CMainFrame::OnCreateDocList(DLNHDR* pNotifyStruct, LRESULT* result)
{
	CCeDocList* pDocList = (CCeDocList*)FromHandle(pNotifyStruct->nmhdr.hwndFrom);
	ASSERT_KINDOF(CCeDocList, pDocList);

	CCeCommandBar* pDocListCB = pDocList->GetCommandBar();
	ASSERT(pDocListCB != NULL);

	pDocListCB->InsertMenuBar(IDM_DOCLIST);
	pDocListCB->SendMessage(TB_SETTOOLTIPS, (WPARAM)(1), (LPARAM)(m_ToolTipsTable));
	CFrameWnd::OnCreateDocList(pNotifyStruct, result);	

	//
	// Vassili's code starts here.
	// Here we change menu. We set it again and so remove "New" button
	//
	SHMENUBARINFO	smb;
	smb.cbSize		= sizeof(SHMENUBARINFO);
	smb.hwndParent	= pDocListCB->GetSafeHwnd();
	smb.dwFlags		= 0;
	smb.nToolBarId	= IDM_DOCLIST;
	smb.hInstRes	= ::AfxGetInstanceHandle();
	smb.nBmpId		= 0;
	smb.cBmpImages	= 0;
	BOOL bResult	= SHCreateMenuBar(&smb);
}


void CMainFrame::OnDestroy()
{
	for(int i = 0; i < NUM_TOOL_TIPS; i++)
		delete m_ToolTipsTable[i];

	CFrameWnd::OnDestroy();
}


LPTSTR CMainFrame::MakeString(UINT stringID)
{
	TCHAR buffer[255];
	TCHAR* theString;

	::LoadString(AfxGetInstanceHandle(), stringID, buffer, 255);
	theString = new TCHAR[lstrlen(buffer) + 1];
	lstrcpy(theString, buffer);
	return theString;
}   


//---------------------------------------------------------------------------
//
//	CMainFrame diagnostics
//
//---------------------------------------------------------------------------


#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}


void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG


//---------------------------------------------------------------------------
//
//	CMainFrame message handlers
//
//---------------------------------------------------------------------------


// CMainFrame::OnUpdateFullScreen
//
//		Checks / unchecks the Full Screen command
//
void CMainFrame::OnUpdateFullScreen(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bFullScreen);
}


// CMainFrame::OnFullScreen
//
//		Turns to / from Full Screen mode
//
void CMainFrame::OnFullScreen() 
{
	const int	nMenuHeight = 26;
	CRect		rc;

	m_bFullScreen = !m_bFullScreen;

	GetWindowRect(&rc);

	if(m_bFullScreen)
	{
		::SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
		::ShowWindow(m_hCommandBar, SW_HIDE);

		MoveWindow(rc.left, rc.top - nMenuHeight,
				   rc.right, rc.bottom + nMenuHeight, TRUE);
	}
	else
	{
		::SHFullScreen(m_hWnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON);
		::ShowWindow(m_hCommandBar, SW_SHOW);

		MoveWindow(rc.left, rc.top + nMenuHeight,
				   rc.right, rc.bottom - 2 * nMenuHeight, TRUE);
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Frotcom International
Portugal Portugal
I work on R&D for Frotcom International, a company that develops web-based fleet management solutions.

Comments and Discussions