Renew the updater branch
Now with some actual consensus on what the updater will do!
This commit is contained in:
420
mmc_updater/depends/win32cpp/wceframe.h
Normal file
420
mmc_updater/depends/win32cpp/wceframe.h
Normal file
@ -0,0 +1,420 @@
|
||||
// Win32++ Version 7.2
|
||||
// Released: 5th AUgust 2011
|
||||
//
|
||||
// David Nash
|
||||
// email: dnash@bigpond.net.au
|
||||
// url: https://sourceforge.net/projects/win32-framework
|
||||
//
|
||||
//
|
||||
// Copyright (c) 2005-2011 David Nash
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to
|
||||
// any person obtaining a copy of this software and
|
||||
// associated documentation files (the "Software"),
|
||||
// to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify,
|
||||
// merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom
|
||||
// the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice
|
||||
// shall be included in all copies or substantial portions
|
||||
// of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||
// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||
// OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// WceFrame.h
|
||||
// Definitions for the CCmdBar and CWceFrame
|
||||
|
||||
// These classes are provide a frame window for use on Window CE devices such
|
||||
// as Pocket PCs. The frame uses CommandBar (a control unique to the Windows CE
|
||||
// operating systems) to display the menu and toolbar.
|
||||
//
|
||||
// Use the PocketPCWceFrame generic application as the starting point for your own
|
||||
// frame based applications on the Pocket PC.
|
||||
//
|
||||
// Refer to the Scribble demo application for an example of how these classes
|
||||
// can be used.
|
||||
|
||||
|
||||
#ifndef _WIN32XX_WCEFRAME_H_
|
||||
#define _WIN32XX_WCEFRAME_H_
|
||||
|
||||
|
||||
#include "wincore.h"
|
||||
#include <commctrl.h>
|
||||
#include <vector>
|
||||
#include "default_resource.h"
|
||||
|
||||
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
|
||||
#define SHELL_AYGSHELL
|
||||
#endif
|
||||
|
||||
#ifdef SHELL_AYGSHELL
|
||||
#include <aygshell.h>
|
||||
#pragma comment(lib, "aygshell.lib")
|
||||
#endif // SHELL_AYGSHELL
|
||||
|
||||
#if (_WIN32_WCE < 0x500 && defined(SHELL_AYGSHELL)) || _WIN32_WCE == 420
|
||||
#pragma comment(lib, "ccrtrtti.lib")
|
||||
#endif
|
||||
|
||||
|
||||
namespace Win32xx
|
||||
{
|
||||
|
||||
////////////////////////////////////
|
||||
// Declaration of the CCmdBar class
|
||||
//
|
||||
class CCmdBar : public CWnd
|
||||
{
|
||||
public:
|
||||
CCmdBar();
|
||||
virtual ~CCmdBar();
|
||||
virtual BOOL AddAdornments(DWORD dwFlags);
|
||||
virtual int AddBitmap(int idBitmap, int iNumImages, int iImageWidth, int iImageHeight);
|
||||
virtual BOOL AddButtons(int nButtons, TBBUTTON* pTBButton);
|
||||
virtual HWND Create(HWND hwndParent);
|
||||
virtual int GetHeight() const;
|
||||
virtual HWND InsertComboBox(int iWidth, UINT dwStyle, WORD idComboBox, WORD iButton);
|
||||
virtual BOOL IsVisible();
|
||||
virtual BOOL Show(BOOL fShow);
|
||||
|
||||
private:
|
||||
|
||||
#ifdef SHELL_AYGSHELL
|
||||
SHMENUBARINFO m_mbi;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////
|
||||
// Declaration of the CWceFrame class
|
||||
// A mini frame based on CCmdBar
|
||||
class CWceFrame : public CWnd
|
||||
{
|
||||
public:
|
||||
CWceFrame();
|
||||
virtual ~CWceFrame();
|
||||
virtual void AddToolBarButton(UINT nID);
|
||||
CRect GetViewRect() const;
|
||||
CCmdBar& GetMenuBar() const {return (CCmdBar&)m_MenuBar;}
|
||||
virtual void OnActivate(WPARAM wParam, LPARAM lParam);
|
||||
virtual void OnCreate();
|
||||
virtual void PreCreate(CREATESTRUCT &cs);
|
||||
virtual void RecalcLayout();
|
||||
virtual void SetButtons(const std::vector<UINT> ToolBarData);
|
||||
virtual LRESULT WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
protected:
|
||||
std::vector<UINT> m_ToolBarData;
|
||||
|
||||
private:
|
||||
CCmdBar m_MenuBar;
|
||||
tString m_tsAppName;
|
||||
|
||||
#ifdef SHELL_AYGSHELL
|
||||
SHACTIVATEINFO m_sai;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
//////////////////////////////////////////
|
||||
// Definitions for the CCmdBar class
|
||||
// This class wraps CommandBar_Create which
|
||||
// creates a CommandBar at the top of the window
|
||||
inline CCmdBar::CCmdBar()
|
||||
{
|
||||
}
|
||||
|
||||
inline CCmdBar::~CCmdBar()
|
||||
{
|
||||
if (IsWindow())
|
||||
::CommandBar_Destroy(m_hWnd);
|
||||
}
|
||||
|
||||
|
||||
inline BOOL CCmdBar::AddAdornments(DWORD dwFlags)
|
||||
{
|
||||
BOOL bReturn = CommandBar_AddAdornments(m_hWnd, dwFlags, 0);
|
||||
|
||||
if (!bReturn)
|
||||
throw CWinException(_T("AddAdornments failed"));
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
inline int CCmdBar::AddBitmap(int idBitmap, int iNumImages, int iImageWidth, int iImageHeight)
|
||||
{
|
||||
HINSTANCE hInst = GetApp()->GetInstanceHandle();
|
||||
return CommandBar_AddBitmap(m_hWnd, hInst, idBitmap, iNumImages, iImageWidth, iImageHeight);
|
||||
}
|
||||
|
||||
inline BOOL CCmdBar::AddButtons(int nButtons, TBBUTTON* pTBButton)
|
||||
{
|
||||
BOOL bReturn = CommandBar_AddButtons(m_hWnd, nButtons, pTBButton);
|
||||
if (!bReturn)
|
||||
throw CWinException(_T("Failed to add buttons to commandbar"));
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
inline HWND CCmdBar::Create(HWND hParent)
|
||||
{
|
||||
#ifdef SHELL_AYGSHELL
|
||||
SHMENUBARINFO mbi;
|
||||
|
||||
memset(&mbi, 0, sizeof(SHMENUBARINFO));
|
||||
mbi.cbSize = sizeof(SHMENUBARINFO);
|
||||
mbi.hwndParent = hParent;
|
||||
mbi.nToolBarId = IDW_MAIN;
|
||||
mbi.hInstRes = GetApp()->GetInstanceHandle();
|
||||
mbi.nBmpId = 0;
|
||||
mbi.cBmpImages = 0;
|
||||
|
||||
if (SHCreateMenuBar(&mbi))
|
||||
{
|
||||
m_hWnd = mbi.hwndMB;
|
||||
}
|
||||
else
|
||||
throw CWinException(_T("Failed to create MenuBar"));
|
||||
|
||||
#else
|
||||
m_hWnd = CommandBar_Create(GetApp()->GetInstanceHandle(), hParent, IDW_MENUBAR);
|
||||
|
||||
if (m_hWnd == NULL)
|
||||
throw CWinException(_T("Failed to create CommandBar"));
|
||||
|
||||
CommandBar_InsertMenubar(m_hWnd, GetApp()->GetInstanceHandle(), IDW_MAIN, 0);
|
||||
#endif
|
||||
return m_hWnd;
|
||||
}
|
||||
|
||||
inline int CCmdBar::GetHeight() const
|
||||
{
|
||||
return CommandBar_Height(m_hWnd);
|
||||
}
|
||||
|
||||
inline HWND CCmdBar::InsertComboBox(int iWidth, UINT dwStyle, WORD idComboBox, WORD iButton)
|
||||
{
|
||||
HINSTANCE hInst = GetApp()->GetInstanceHandle();
|
||||
HWND hWnd = CommandBar_InsertComboBox(m_hWnd, hInst, iWidth, dwStyle, idComboBox, iButton);
|
||||
|
||||
if (!hWnd)
|
||||
throw CWinException(_T("InsertComboBox failed"));
|
||||
|
||||
return hWnd;
|
||||
}
|
||||
|
||||
inline BOOL CCmdBar::IsVisible()
|
||||
{
|
||||
return ::CommandBar_IsVisible(m_hWnd);
|
||||
}
|
||||
|
||||
inline BOOL CCmdBar::Show(BOOL fShow)
|
||||
{
|
||||
return ::CommandBar_Show(m_hWnd, fShow);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
// Definitions for the CWceFrame class
|
||||
// This class creates a simple frame using CCmdBar
|
||||
inline CWceFrame::CWceFrame()
|
||||
{
|
||||
#ifdef SHELL_AYGSHELL
|
||||
// Initialize the shell activate info structure
|
||||
memset (&m_sai, 0, sizeof (m_sai));
|
||||
m_sai.cbSize = sizeof (m_sai);
|
||||
#endif
|
||||
}
|
||||
|
||||
inline CWceFrame::~CWceFrame()
|
||||
{
|
||||
}
|
||||
|
||||
inline void CWceFrame::AddToolBarButton(UINT nID)
|
||||
// Adds Resource IDs to toolbar buttons.
|
||||
// A resource ID of 0 is a separator
|
||||
{
|
||||
m_ToolBarData.push_back(nID);
|
||||
}
|
||||
|
||||
inline CRect CWceFrame::GetViewRect() const
|
||||
{
|
||||
CRect r;
|
||||
::GetClientRect(m_hWnd, &r);
|
||||
|
||||
#ifndef SHELL_AYGSHELL
|
||||
// Reduce the size of the client rectange, by the commandbar height
|
||||
r.top += m_MenuBar.GetHeight();
|
||||
#endif
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
inline void CWceFrame::OnCreate()
|
||||
{
|
||||
// Create the Commandbar
|
||||
m_MenuBar.Create(m_hWnd);
|
||||
|
||||
// Set the keyboard accelerators
|
||||
HACCEL hAccel = LoadAccelerators(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_MAIN));
|
||||
GetApp()->SetAccelerators(hAccel, this);
|
||||
|
||||
// Add the toolbar buttons
|
||||
if (m_ToolBarData.size() > 0)
|
||||
SetButtons(m_ToolBarData);
|
||||
|
||||
#ifndef SHELL_AYGSHELL
|
||||
// Add close button
|
||||
m_MenuBar.AddAdornments(0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
inline void CWceFrame::OnActivate(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
#ifdef SHELL_AYGSHELL
|
||||
// Notify shell of our activate message
|
||||
SHHandleWMActivate(m_hWnd, wParam, lParam, &m_sai, FALSE);
|
||||
|
||||
UINT fActive = LOWORD(wParam);
|
||||
if ((fActive == WA_ACTIVE) || (fActive == WA_CLICKACTIVE))
|
||||
{
|
||||
// Reposition the window when it's activated
|
||||
RecalcLayout();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void CWceFrame::PreCreate(CREATESTRUCT &cs)
|
||||
{
|
||||
cs.style = WS_VISIBLE;
|
||||
m_tsAppName = _T("Win32++ Application");
|
||||
|
||||
// Choose a unique class name for this app
|
||||
if (LoadString(IDW_MAIN) != _T(""))
|
||||
{
|
||||
m_tsAppName = LoadString(IDW_MAIN);
|
||||
}
|
||||
|
||||
cs.lpszClass = m_tsAppName.c_str();
|
||||
}
|
||||
|
||||
/* inline BOOL CWceFrame::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
HACCEL hAccelTable = ::LoadAccelerators(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDW_MAIN));
|
||||
if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
|
||||
{
|
||||
if (TranslateAccelerator(m_hWnd, hAccelTable, pMsg))
|
||||
return TRUE;
|
||||
}
|
||||
return CWnd::PreTranslateMessage(pMsg);
|
||||
} */
|
||||
|
||||
inline void CWceFrame::RecalcLayout()
|
||||
{
|
||||
HWND hwndCB = m_MenuBar.GetHwnd();
|
||||
if (hwndCB)
|
||||
{
|
||||
CRect rc; // Desktop window size
|
||||
CRect rcMenuBar; // MenuBar window size
|
||||
|
||||
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);
|
||||
::GetWindowRect(hwndCB, &rcMenuBar);
|
||||
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
|
||||
|
||||
MoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
|
||||
}
|
||||
|
||||
ShowWindow(TRUE);
|
||||
UpdateWindow();
|
||||
}
|
||||
|
||||
inline void CWceFrame::SetButtons(const std::vector<UINT> ToolBarData)
|
||||
// Define the resource IDs for the toolbar like this in the Frame's constructor
|
||||
// m_ToolBarData.push_back ( 0 ); // Separator
|
||||
// m_ToolBarData.clear();
|
||||
// m_ToolBarData.push_back ( IDM_FILE_NEW );
|
||||
// m_ToolBarData.push_back ( IDM_FILE_OPEN );
|
||||
// m_ToolBarData.push_back ( IDM_FILE_SAVE );
|
||||
|
||||
{
|
||||
int iImages = 0;
|
||||
int iNumButtons = (int)ToolBarData.size();
|
||||
|
||||
|
||||
if (iNumButtons > 0)
|
||||
{
|
||||
// Create the TBBUTTON array for each button
|
||||
std::vector<TBBUTTON> vTBB(iNumButtons);
|
||||
TBBUTTON* tbbArray = &vTBB.front();
|
||||
|
||||
for (int j = 0 ; j < iNumButtons; j++)
|
||||
{
|
||||
ZeroMemory(&tbbArray[j], sizeof(TBBUTTON));
|
||||
|
||||
if (ToolBarData[j] == 0)
|
||||
{
|
||||
tbbArray[j].fsStyle = TBSTYLE_SEP;
|
||||
}
|
||||
else
|
||||
{
|
||||
tbbArray[j].iBitmap = iImages++;
|
||||
tbbArray[j].idCommand = ToolBarData[j];
|
||||
tbbArray[j].fsState = TBSTATE_ENABLED;
|
||||
tbbArray[j].fsStyle = TBSTYLE_BUTTON;
|
||||
tbbArray[j].iString = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the bitmap
|
||||
GetMenuBar().AddBitmap(IDW_MAIN, iImages , 16, 16);
|
||||
|
||||
// Add the buttons
|
||||
GetMenuBar().AddButtons(iNumButtons, tbbArray);
|
||||
}
|
||||
}
|
||||
|
||||
inline LRESULT CWceFrame::WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case WM_ACTIVATE:
|
||||
OnActivate(wParam, lParam);
|
||||
break;
|
||||
|
||||
#ifdef SHELL_AYGSHELL
|
||||
|
||||
case WM_SETTINGCHANGE:
|
||||
SHHandleWMSettingChange(m_hWnd, wParam, lParam, &m_sai);
|
||||
break;
|
||||
#endif
|
||||
|
||||
}
|
||||
return CWnd::WndProcDefault(uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Win32xx
|
||||
|
||||
#endif // _WIN32XX_WCEFRAME_H_
|
||||
|
Reference in New Issue
Block a user