Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS

Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
This commit is contained in:
Cyd
2026-06-24 21:28:16 -05:00
commit 2b8ca921cb
66341 changed files with 7923174 additions and 0 deletions
@@ -0,0 +1,79 @@
// ChildFrm.cpp : implementation of the CChildFrame class
//
#include "stdafx.h"
#include "Multitron.h"
#include "ChildFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChildFrame
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
ON_WM_MDIACTIVATE()
ON_WM_SHOWWINDOW()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChildFrame construction/destruction
CChildFrame::CChildFrame()
{
}
CChildFrame::~CChildFrame()
{
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CChildFrame diagnostics
#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}
void CChildFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChildFrame message handlers
void CChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
}
void CChildFrame::OnShowWindow(BOOL bShow, UINT nStatus)
{
CMDIChildWnd::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
}
@@ -0,0 +1,53 @@
// ChildFrm.h : interface of the CChildFrame class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_CHILDFRM_H__E2CBE31A_A96D_4D4F_A243_F8632FDB3DBE__INCLUDED_)
#define AFX_CHILDFRM_H__E2CBE31A_A96D_4D4F_A243_F8632FDB3DBE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CChildFrame : public CMDIChildWnd
{
DECLARE_DYNCREATE(CChildFrame)
public:
CChildFrame();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CChildFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CChildFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CChildFrame)
afx_msg void OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd);
afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CHILDFRM_H__E2CBE31A_A96D_4D4F_A243_F8632FDB3DBE__INCLUDED_)
@@ -0,0 +1,637 @@
// DlgProject.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "DlgProject.h"
#include <imagelib\image.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgProject dialog
CDlgProject::CDlgProject(CWnd* pParent /*=NULL*/)
: CDialog(CDlgProject::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgProject)
//}}AFX_DATA_INIT
m_pNoteFile = NULL;
m_pDocument = (CMultitronDoc *)-1;
}
void CDlgProject::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgProject)
DDX_Control(pDX, IDC_TREE_DATA, m_wndTreeData);
DDX_Control(pDX, IDC_PREVIEW, m_wndPreview);
DDX_Control(pDX, IDC_LIST_HINTPAGE, m_wndListHintPage);
DDX_Control(pDX, IDC_COMBO_HINTFILENAME, m_wndComboHintFileName);
DDX_Control(pDX, IDC_TREE_FILES, m_wndTreeFiles);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgProject, CDialog)
//{{AFX_MSG_MAP(CDlgProject)
ON_CBN_SELENDOK(IDC_COMBO_HINTFILENAME, OnSelendokComboHintfilename)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_FILES, OnSelchangedTreeFiles)
ON_LBN_SELCHANGE(IDC_LIST_HINTPAGE, OnSelchangeListHintpage)
ON_WM_DRAWITEM()
ON_LBN_DBLCLK(IDC_LIST_HINTPAGE, OnDblclkListHintpage)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_ADD_MEGATEXTURE, OnAddMegatexture)
ON_COMMAND(ID_ADD_TEXTUREHINT, OnAddTexturehint)
ON_COMMAND(ID_REMOVE_TEXTUREHINT, OnRemoveTexturehint)
ON_NOTIFY(NM_DBLCLK, IDC_TREE_DATA, OnDblclkTreeData)
ON_COMMAND(ID_OPEN_TEXTURE, OnOpenTexture)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgProject message handlers
int CDlgProject::AddItem(CFileNode *pNode,HTREEITEM hParent)
{
int count = 0;
if (pNode)
{
count++;
CString name = pNode->strName;
if (TVI_ROOT != hParent)
{
char fname[MAX_PATH];
_splitpath(name,NULL,NULL,fname,NULL);
name = fname;
}
HTREEITEM hItem = m_wndTreeFiles.InsertItem(name,hParent);
if (TVI_ROOT != hParent)
m_wndTreeFiles.SetItemData(hItem,(DWORD)pNode);
POSITION pos = pNode->listChildren.GetHeadPosition();
while (pos)
{
CFileNode *pChild = (CFileNode *)pNode->listChildren.GetNext(pos);
count += AddItem(pChild,hItem);
}
}
return count;
}
void CDlgProject::OnSelchangedTreeFiles(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CFileNode *pNode = (CFileNode *)pNMTreeView->itemNew.lParam;
m_wndComboHintFileName.ResetContent();
if (pNode)
{
int count = 0;
Stuff::NotationFile::PageIterator *pages = pNode->pFile->MakePageIterator();
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
CString pagename = page->GetName();
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
const char *entry;
note->GetEntry(&entry);
int index = m_wndComboHintFileName.AddString(entry);
m_wndComboHintFileName.SetItemData(index,(DWORD)note);
// Set texturepool by default
if (0==stricmp(note->GetName(),"texturepool"))
{
count++;
m_wndComboHintFileName.SetCurSel(index);
}
}
delete notes;
/*
const char *entry;
if (page->GetEntry("texturepool",&entry))
{
count++;
int index = m_wndComboHintFileName.AddString(entry);
CString filename("content\\");
filename+=entry;
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
Stuff::NotationFile *pHintFile = pApp->GetHintFile(filename);
m_wndComboHintFileName.SetItemData(index,(DWORD)pHintFile);
}*/
}
delete pages;
if ((0==count)&&m_wndComboHintFileName.GetCount())
m_wndComboHintFileName.SetCurSel(0);
}
OnSelendokComboHintfilename();
*pResult = 0;
}
void CDlgProject::OnSelendokComboHintfilename()
{
m_wndListHintPage.ResetContent();
m_BackBuffer.DeleteObject();
m_wndPreview.Invalidate();
m_pNoteFile=NULL;
int sel = m_wndComboHintFileName.GetCurSel();
if (CB_ERR != sel)
{
Stuff::Note *pNote = (Stuff::Note *)m_wndComboHintFileName.GetItemData(sel);
if (pNote)
{
Check_Object(pNote);
const char *entry;
pNote->GetEntry(&entry);
CString filename("content\\");
filename+=entry;
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CMultitronDoc *pMDoc = (CMultitronDoc *)m_pDocument;
Stuff::NotationFile *pFile = pMDoc->GetHintFile(filename);
m_pNoteFile = pFile;
CString notename = pNote->GetName();
if (0==stricmp(notename,"texturepool"))
SetDataTexturepool(pFile);
else if (0==stricmp(notename,"data"))
SetDataBrowseNotation(pFile);
else if (0==stricmp(notename,"instance"))
SetDataBrowseNotation(pFile);
else if (0==stricmp(notename,"notation"))
SetDataBrowseNotation(pFile);
else
{
m_wndTreeData.ShowWindow(SW_HIDE);
m_wndListHintPage.ShowWindow(SW_HIDE);
}
DWORD attrib = GetFileAttributes(filename);
if (-1 != attrib)
{
if (attrib & FILE_ATTRIBUTE_READONLY)
{
CString str;
str.Format("%s is Read-Only. Would you like to enable write permission?",filename);
if (IDYES == MessageBox(str,"Read Hint File",MB_YESNO))
{
attrib &= ~FILE_ATTRIBUTE_READONLY;
SetFileAttributes(filename,attrib);
}
}
}
}
}
else
{
m_wndTreeData.ShowWindow(SW_HIDE);
m_wndListHintPage.ShowWindow(SW_HIDE);
}
}
void CDlgProject::OnSelchangeListHintpage()
{
int nCount = m_wndListHintPage.GetSelCount();
int *items = new int[nCount];
int err = m_wndListHintPage.GetSelItems(nCount,items);
CPtrList list;
for (int x=0;x<nCount;x++)
{
DWORD data = m_wndListHintPage.GetItemData(items[x]);
list.AddTail((LPVOID)data);
}
delete items;
m_BackBuffer.DeleteObject();
m_wndPreview.Invalidate();
Image image;
if (list.GetCount())
{
Stuff::Page *page = (Stuff::Page *)list.GetHead();
if (page)
{
CString imagename = page->GetName();
const char *entry;
if (page->GetEntry("Alias",&entry))
{
imagename = entry;
}
CString path = "content\\textures\\"+imagename;
image.Delete();
CString fullname = path+".png";
if (gos_DoesFileExist(fullname))
{
image.Load((char *)(LPCTSTR)fullname);
}
else
{
fullname = path+".tga";
if (gos_DoesFileExist(fullname))
{
image.Load((char *)(LPCTSTR)fullname);
}
else
{
return;
}
}
if(image.GetBpp()==32)
image.MaskTo(RGBMask(0x00ff0000,0x0000ff00,0x000000ff,0xff000000));
else
image.MaskTo(RGBMask(0x00ff0000,0x0000ff00,0x000000ff));
CDC memDC,*hfDC;
hfDC=GetDC();
BOOL bres;
bres=m_BackBuffer.CreateCompatibleBitmap(hfDC,image.GetWidth(),image.GetHeight());
Verify(bres);
memDC.CreateCompatibleDC(hfDC);
memDC.SelectObject(&m_BackBuffer);
BITMAPINFOHEADER bhd;
BITMAPINFO binf;
bhd.biSize=sizeof(BITMAPINFOHEADER);
bhd.biWidth=image.GetWidth(); bhd.biHeight=-image.GetHeight();
bhd.biPlanes=1;
bhd.biBitCount=image.GetBpp();
bhd.biCompression=BI_RGB;
bhd.biSizeImage=0;
bhd.biClrImportant=0;
binf.bmiHeader=bhd;
BYTE *imgdat=(BYTE *)(image.Lock());
DWORD isize = image.GetWidth()*image.GetHeight()*(image.GetBpp()>>3);
if (32==image.GetBpp())
{
m_BackBuffer.SetBitmapBits(isize,imgdat);
}
else
{
SetDIBitsToDevice(memDC,0,0,image.GetWidth(),
image.GetHeight(),0,0,0,image.GetWidth(),imgdat,
&binf,DIB_RGB_COLORS);
}
image.UnLock();
memDC.DeleteDC();
ReleaseDC(hfDC);
}
}
}
void CDlgProject::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
switch (lpDrawItemStruct->CtlID)
{
case IDC_PREVIEW:
{
HBITMAP hBitmap = m_BackBuffer;
if (hBitmap)
{
CDC memDC;
int res;
BITMAP bmp;
res=m_BackBuffer.GetBitmap(&bmp);
Verify(res);
BOOL bres;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
bres=memDC.CreateCompatibleDC(pDC);
Verify(bres);
memDC.SelectObject(&m_BackBuffer);
CRect hfrct;
m_wndPreview.GetClientRect(&hfrct);
pDC->SetStretchBltMode(COLORONCOLOR);
bres=pDC->StretchBlt(0,0,hfrct.Width(),hfrct.Height(),&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//bres=pDC->BitBlt(0,0,hfrct.Width(),hfrct.Height(),NULL,0,0,BLACKNESS);
//bres=pDC->BitBlt(0,0,hfrct.Width(),hfrct.Height(),&memDC,0,0,SRCCOPY);
Verify(bres);
memDC.DeleteDC();
}
return;
}
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
void CDlgProject::OnDblclkListHintpage()
{
OnOpenTexture();
}
void CDlgProject::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu *pMenu = AfxGetMainWnd()->GetMenu();
int i = 0;
switch (pMenu->GetMenuItemCount())
{
case 4:i=2;break;
case 6:i=3;break;
case 10:i=4;break;
}
if (i)
{
CMenu *pSubMenu = pMenu->GetSubMenu(i);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x, point.y, this, NULL);
}
}
void CDlgProject::OnAddMegatexture()
{
int nCount = m_wndListHintPage.GetSelCount();
int *items = new int[nCount];
int err = m_wndListHintPage.GetSelItems(nCount,items);
CPtrList list;
for (int x=0;x<nCount;x++)
{
DWORD data = m_wndListHintPage.GetItemData(items[x]);
list.AddTail((LPVOID)data);
}
delete items;
if (0==nCount)
return;
Stuff::Page *page = (Stuff::Page *)list.GetHead();
Check_Object(page);
// Create a megatexture with the name of the first item with underscore first character
CString meganame = CString("_")+page->GetName();
int index = m_wndComboHintFileName.GetCurSel();
if (CB_ERR != index)
{
Stuff::NotationFile *pFile = m_pNoteFile;
if (pFile)
{
// Put all of the textures at 0 0 and let the TextureView arrange them
Stuff::Page *megapage = pFile->AddPage(meganame);
megapage->AppendEntry("PageSize","512 512");
POSITION pos = list.GetHeadPosition();
while (pos)
{
Stuff::Page *page = (Stuff::Page *)list.GetNext(pos);
Check_Object(page);
CString name = page->GetName();
const char *entry;
if (page->GetEntry("Alias",&entry))
{
name = entry;
}
megapage->AppendEntry(name,"");
}
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CDocTemplate *pTemplate = (CDocTemplate *)pApp->m_mapTemplate[ID_FILE_NEW];
pTemplate->OpenDocumentFile((LPCTSTR)megapage);
OnSelendokComboHintfilename();
int count = m_wndListHintPage.GetCount();
for (int x=0;x<count;x++)
{
LPVOID lp = (LPVOID)m_wndListHintPage.GetItemData(x);
if (lp == (LPVOID)megapage)
{
m_wndListHintPage.SetSel(x);
OnSelchangeListHintpage();
break;
}
}
}
}
}
void CDlgProject::OnAddTexturehint()
{
int index = m_wndComboHintFileName.GetCurSel();
if (CB_ERR != index)
{
Stuff::NotationFile *pFile = m_pNoteFile;
if (pFile)
{
CFileDialog dlg(true,".png","content\\textures\\*.*",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,"Image Files (*.png;*.tga)|*.png;*.tga||",AfxGetMainWnd());
if (IDOK == dlg.DoModal())
{
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CDocTemplate *pTemplate = (CDocTemplate *)pApp->m_mapTemplate[ID_FILE_NEW];
SetCurrentDirectory(pApp->m_strRunDir);
CPtrList list;
POSITION pos = dlg.GetStartPosition();
while (pos)
{
CString pathname = dlg.GetNextPathName(pos);
char name[MAX_PATH];
_splitpath(pathname,NULL,NULL,name,NULL);
Stuff::Page *page = pFile->AddPage(name);
list.AddTail((LPVOID)page);
pTemplate->OpenDocumentFile((LPCTSTR)page);
}
OnSelendokComboHintfilename();
int count = m_wndListHintPage.GetCount();
for (int x=0;x<count;x++)
{
LPVOID lp = (LPVOID)m_wndListHintPage.GetItemData(x);
pos = list.Find(lp);
if (pos)
{
list.RemoveAt(pos);
m_wndListHintPage.SetSel(x);
}
if (list.GetCount()==0)
break;
}
OnSelchangeListHintpage();
}
}
}
}
void CDlgProject::OnRemoveTexturehint()
{
int index = m_wndComboHintFileName.GetCurSel();
if (CB_ERR != index)
{
Stuff::NotationFile *pFile = m_pNoteFile;
if (pFile)
{
CMultitronDoc *pDoc = (CMultitronDoc *)m_pDocument;
int nCount = m_wndListHintPage.GetSelCount();
int *items = new int[nCount];
int err = m_wndListHintPage.GetSelItems(nCount,items);
for (int x=0;x<nCount;x++)
{
Stuff::Page *page = (Stuff::Page *)m_wndListHintPage.GetItemData(items[x]);
Check_Object(page);
pDoc->RemoveTexture(page);
}
delete items;
pDoc->UpdateAllViews(NULL);
}
}
}
int CDlgProject::SetDataTexturepool(Stuff::NotationFile *pFile)
{
m_wndListHintPage.ResetContent();
m_wndListHintPage.ShowWindow(SW_SHOW);
m_wndTreeData.ShowWindow(SW_HIDE);
Stuff::NotationFile::PageIterator *pages = pFile->MakePageIterator();
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
CString pagename = page->GetName();
int index = m_wndListHintPage.AddString(pagename);
m_wndListHintPage.SetItemData(index,(DWORD)page);
}
delete pages;
return 0;
}
int CDlgProject::SetDataBrowseNotation(Stuff::NotationFile *pFile)
{
m_wndTreeData.DeleteAllItems();
m_wndTreeData.ShowWindow(SW_SHOW);
m_wndListHintPage.ShowWindow(SW_HIDE);
Stuff::NotationFile::PageIterator *pages = pFile->MakePageIterator();
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
CString pagename = page->GetName();
HTREEITEM hPage = m_wndTreeData.InsertItem(pagename,TVI_ROOT);
m_wndTreeData.SetItemData(hPage,(DWORD)page);
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
CString notename = note->GetName();
const char *entry;
note->GetEntry(&entry);
CString str;
str.Format("%s=%s",notename,entry);
HTREEITEM hNote = m_wndTreeData.InsertItem(str,hPage);
m_wndTreeData.SetItemData(hNote,(DWORD)note);
}
delete notes;
m_wndTreeData.Expand(hPage,TVE_EXPAND);
}
delete pages;
return 0;
}
void CDlgProject::OnDblclkTreeData(NMHDR* pNMHDR, LRESULT* pResult)
{
OnOpenTexture();
*pResult = 0;
}
CDocument *CDlgProject::SetDocument(CMultitronDoc *pDoc)
{
BOOL bReset = true;
if (pDoc == m_pDocument)
bReset = false;
CMultitronDoc *pBack = m_pDocument;
if (-1 != (DWORD)pDoc)
m_pDocument = pDoc;
else
{
bReset = false;
}
if (m_wndTreeFiles.GetSafeHwnd())
{
if (bReset)
m_wndTreeFiles.DeleteAllItems();
if (pDoc)
{
if (bReset)
{
CFileNode *pNode = m_pDocument->GetFileNode();
AddItem(pNode);
}
OnSelendokComboHintfilename();
}
}
return pBack;
}
void CDlgProject::OnOpenTexture()
{
if (m_wndListHintPage.GetSafeHwnd())
{
CDocument *pDoc = NULL;
int nCount = m_wndListHintPage.GetSelCount();
if (nCount)
{
int *items = new int[nCount];
int err = m_wndListHintPage.GetSelItems(nCount,items);
for (int x=0;x<nCount;x++)
{
DWORD data = m_wndListHintPage.GetItemData(items[x]);
if (0==x)
pDoc = m_pDocument->OpenTexture((Stuff::Page *)data);
else
pDoc->SetPathName((LPCTSTR)data);
}
delete items;
}
if (pDoc)
pDoc->UpdateAllViews(NULL);
}
if (m_wndTreeData.GetSafeHwnd())
{
HTREEITEM hItem = m_wndTreeData.GetSelectedItem();
if (hItem)
{
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CDocTemplate *pTemplate = (CDocTemplate *)pApp->m_mapTemplate[ID_FILE_NEW_NOTEFILE];
DWORD data = m_wndTreeData.GetItemData(hItem);
if (data)
pTemplate->OpenDocumentFile((LPCTSTR)data);
}
}
m_pDocument->UpdateAllViews(NULL);
}
@@ -0,0 +1,69 @@
#if !defined(AFX_DLGPROJECT_H__69A490AA_C4B4_4608_8DB8_13BB135D8EAE__INCLUDED_)
#define AFX_DLGPROJECT_H__69A490AA_C4B4_4608_8DB8_13BB135D8EAE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DlgProject.h : header file
//
#include "filenode.h"
#include "MultitronDoc.h"
/////////////////////////////////////////////////////////////////////////////
// CDlgProject dialog
class CDlgProject : public CDialog
{
// Construction
public:
CDlgProject(CWnd* pParent = NULL); // standard constructor
CDocument *SetDocument(CMultitronDoc *);
// Dialog Data
//{{AFX_DATA(CDlgProject)
enum { IDD = IDD_PROJECT };
CTreeCtrl m_wndTreeData;
CButton m_wndPreview;
CListBox m_wndListHintPage;
CComboBox m_wndComboHintFileName;
CTreeCtrl m_wndTreeFiles;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDlgProject)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
CMultitronDoc *m_pDocument;
int SetDataBrowseNotation(Stuff::NotationFile *);
int SetDataTexturepool(Stuff::NotationFile *);
int AddItem(CFileNode *pNode,HTREEITEM hParent = TVI_ROOT);
CBitmap m_BackBuffer;
Stuff::NotationFile *m_pNoteFile;
// Generated message map functions
//{{AFX_MSG(CDlgProject)
afx_msg void OnSelendokComboHintfilename();
afx_msg void OnSelchangedTreeFiles(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSelchangeListHintpage();
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg void OnDblclkListHintpage();
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
afx_msg void OnAddMegatexture();
afx_msg void OnAddTexturehint();
afx_msg void OnRemoveTexturehint();
afx_msg void OnDblclkTreeData(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnOpenTexture();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DLGPROJECT_H__69A490AA_C4B4_4608_8DB8_13BB135D8EAE__INCLUDED_)
@@ -0,0 +1,81 @@
// FileNode.cpp: implementation of the CFileNode class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileNode.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFileNode::CFileNode(CString filename)
{
strName = filename;
pFile = new Stuff::NotationFile(filename);
ReadBuildFile(pFile);
pParent = NULL;
}
CFileNode::~CFileNode()
{
pFile->IgnoreChanges();
delete pFile;
POSITION pos = listChildren.GetHeadPosition();
while (pos)
{
CFileNode *pChild = (CFileNode *)listChildren.GetNext(pos);
delete pChild;
}
}
/*******************************************************************************
/* function name: ReadBuildFile
/* description: Read a build file, and build a file hierarchy
/*******************************************************************************/
int CFileNode::ReadBuildFile(Stuff::NotationFile *notefile)
{
int count = 0;
Stuff::NotationFile::PageIterator *pages = notefile->MakePageIterator();
Register_Object(pages);
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
CString pagename = page->GetName();
if (pagename.GetLength() ==0)
{
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
count++;
CString notename = note->GetName();
notename = "content\\"+notename;
CFileNode *pNode = new CFileNode(notename);
listChildren.AddHead(pNode);
pNode->pParent = this;
{
Stuff::NotationFile entryfile;
note->GetEntry(&entryfile);
{
CString entryfilename = entryfile.GetFileName();
count += pNode->ReadBuildFile(&entryfile);
}
}
}
delete notes;
}
}
Unregister_Object(pages);
delete pages;
return count;
}
@@ -0,0 +1,29 @@
// FileNode.h: interface for the CFileNode class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FILENODE_H__1B761B42_F341_4600_982B_84D3CD584863__INCLUDED_)
#define AFX_FILENODE_H__1B761B42_F341_4600_982B_84D3CD584863__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <stuff\stuff.hpp>
class CFileNode : public CObject
{
public:
CFileNode(CString);
virtual ~CFileNode();
CString strName;
CFileNode *pParent;
Stuff::NotationFile *pFile;
CObList listChildren;
int ReadBuildFile(Stuff::NotationFile *notefile);
};
#endif // !defined(AFX_FILENODE_H__1B761B42_F341_4600_982B_84D3CD584863__INCLUDED_)
@@ -0,0 +1,171 @@
// MultitronDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "FileOpenDlg.h"
#include "MainFrm.h"
#include <GameOs\TooLOS.hpp>
#include <imagelib\image.h>
#include <direct.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFileOpenDlg dialog
CFileOpenDlg::CFileOpenDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFileOpenDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFileOpenDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pFileNode = NULL;
}
CFileOpenDlg::~CFileOpenDlg()
{
if (m_pFileNode) {
delete m_pFileNode;
m_pFileNode = NULL;
}
}
void CFileOpenDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileOpenDlg)
DDX_Control(pDX, IDC_TREE_FILES, m_wndTreeFiles);
DDX_Control(pDX, IDC_HINTFILENAME, m_wndHintFileName);
DDX_Control(pDX, IDC_BUILDFILENAME, m_wndBuildFileName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileOpenDlg, CDialog)
//{{AFX_MSG_MAP(CFileOpenDlg)
ON_WM_DRAWITEM()
ON_WM_CONTEXTMENU()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_FILES, OnSelchangedTreeFiles)
ON_COMMAND(IDC_FILEBROWSE, OnBrowse)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileOpenDlg message handlers
/*******************************************************************************
/* function name: OnInitDialog
/* description: Open content\Mechwarrior4.build if none is opened
/*******************************************************************************/
BOOL CFileOpenDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (!m_pFileNode) {
CFileNode *pNode = new CFileNode("content\\Mechwarrior4.build");
m_pFileNode = pNode;
}
AddTreeFileItem(m_pFileNode);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/*******************************************************************************
/* function name: OnSelchangedTreeFiles
/* description: User selects a node in the build file tree, look in the selected
/* build file for the entry "texturepool" to see if there is a hint file referenced
/*******************************************************************************/
void CFileOpenDlg::OnSelchangedTreeFiles(NMHDR* pNMHDR, LRESULT* pResult)
{
m_wndHintFileName.SetWindowText("");
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CFileNode *pNode = (CFileNode *)pNMTreeView->itemNew.lParam;
if (pNode) {
m_wndBuildFileName.SetWindowText(pNode->strName);
Stuff::NotationFile::PageIterator *pages = pNode->pFile->MakePageIterator();
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
const char *entry;
if (page->GetEntry("texturepool",&entry))
{
CString filename("content\\");
filename+=entry;
m_wndHintFileName.SetWindowText(filename);
break;
}
}
delete pages;
}
m_wndHintFileName.GetWindowText(m_HintFileName);
GetDlgItem(IDOK)->EnableWindow(m_HintFileName.GetLength());
}
/*******************************************************************************
/* function name: AddTreeFileItem
/* description: Recursively add a file node to the the tree view
/*******************************************************************************/
int CFileOpenDlg::AddTreeFileItem(CFileNode *pNode,HTREEITEM hParent)
{
int count = 0;
if (pNode)
{
count++;
CString name = pNode->strName;
if (TVI_ROOT != hParent)
{
char fname[MAX_PATH];
_splitpath(name,NULL,NULL,fname,NULL);
name = fname;
}
HTREEITEM hItem = m_wndTreeFiles.InsertItem(name,hParent);
m_wndTreeFiles.SetItemData(hItem,(DWORD)pNode);
POSITION pos = pNode->listChildren.GetHeadPosition();
while (pos)
{
CFileNode *pChild = (CFileNode *)pNode->listChildren.GetNext(pos);
count += AddTreeFileItem(pChild,hItem);
}
}
return count;
}
/*******************************************************************************
/* function name: OnBrowse
/* description: User browse for a build file with a file open dialog
/*******************************************************************************/
void CFileOpenDlg::OnBrowse()
{
CFileDialog dlg(true, NULL, "mechwarrior4.build", 0, "build Files (*.build)|*.build");
if (IDCANCEL != dlg.DoModal()) {
CString FileName = dlg.GetPathName();
m_wndBuildFileName.SetWindowText(FileName);
char path[MAX_PATH];
_splitpath(FileName, NULL, path, NULL, NULL);
CString strPath(path);
strPath.MakeLower();
chdir(strPath.Left(strPath.Find("content")));
CFileNode *pNode = new CFileNode(FileName);
if (m_pFileNode)
delete m_pFileNode;
m_pFileNode = pNode;
m_wndTreeFiles.DeleteAllItems();
AddTreeFileItem(m_pFileNode);
}
}
@@ -0,0 +1,63 @@
#if !defined(AFX_FILEOPENDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_)
#define AFX_FILEOPENDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MultitronDlg.h : header file
//
#include "MultitronDoc.h"
/////////////////////////////////////////////////////////////////////////////
// CFileOpenDlg dialog
class CFileOpenDlg : public CDialog
{
// Construction
public:
CFileOpenDlg(CWnd* pParent = NULL); // standard constructor
~CFileOpenDlg(); // standard destructor
// Dialog Data
//{{AFX_DATA(CFileOpenDlg)
enum { IDD = IDD_FILEOPEN };
CTreeCtrl m_wndTreeFiles;
CEdit m_wndBuildFileName;
CEdit m_wndHintFileName;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFileOpenDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
int AddTreeFileItem(CFileNode *pNode,HTREEITEM hParent = TVI_ROOT);
// Generated message map functions
//{{AFX_MSG(CFileOpenDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSelchangedTreeFiles(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnBrowse();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CFileNode* m_pFileNode;
CString m_HintFileName;
public:
CString GetFileName() {return m_HintFileName;}
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FILEOPENDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_)
@@ -0,0 +1,120 @@
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Multitron.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_CLOSE()
ON_WM_SIZE()
ON_WM_ACTIVATE()
//}}AFX_MSG_MAP
// Global help commands
ON_COMMAND(ID_HELP_FINDER, CMDIFrameWnd::OnHelpFinder)
ON_COMMAND(ID_HELP, CMDIFrameWnd::OnHelp)
ON_COMMAND(ID_CONTEXT_HELP, CMDIFrameWnd::OnContextHelp)
ON_COMMAND(ID_DEFAULT_HELP, CMDIFrameWnd::OnHelpFinder)
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()
{
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
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
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnClose()
{
/* m_wndDlgProject.DestroyWindow();*/
CMDIFrameWnd::OnClose();
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWnd::OnSize(nType, cx, cy);
}
void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CMDIFrameWnd::OnActivate(nState, pWndOther, bMinimized);
}
@@ -0,0 +1,60 @@
// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MAINFRM_H__EC4520F0_7AA3_43C9_BED3_3E854B6D69D3__INCLUDED_)
#define AFX_MAINFRM_H__EC4520F0_7AA3_43C9_BED3_3E854B6D69D3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Afxpriv.h"
#include "multitronDlg.h"
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClose();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MAINFRM_H__EC4520F0_7AA3_43C9_BED3_3E854B6D69D3__INCLUDED_)
@@ -0,0 +1,39 @@
@echo off
REM -- First make map file from Microsoft Visual C++ generated resource.h
echo // MAKEHELP.BAT generated Help Map file. Used by MULTITRON.HPJ. >"hlp\Multitron.hm"
echo. >>"hlp\Multitron.hm"
echo // Commands (ID_* and IDM_*) >>"hlp\Multitron.hm"
makehm ID_,HID_,0x10000 IDM_,HIDM_,0x10000 resource.h >>"hlp\Multitron.hm"
echo. >>"hlp\Multitron.hm"
echo // Prompts (IDP_*) >>"hlp\Multitron.hm"
makehm IDP_,HIDP_,0x30000 resource.h >>"hlp\Multitron.hm"
echo. >>"hlp\Multitron.hm"
echo // Resources (IDR_*) >>"hlp\Multitron.hm"
makehm IDR_,HIDR_,0x20000 resource.h >>"hlp\Multitron.hm"
echo. >>"hlp\Multitron.hm"
echo // Dialogs (IDD_*) >>"hlp\Multitron.hm"
makehm IDD_,HIDD_,0x20000 resource.h >>"hlp\Multitron.hm"
echo. >>"hlp\Multitron.hm"
echo // Frame Controls (IDW_*) >>"hlp\Multitron.hm"
makehm IDW_,HIDW_,0x50000 resource.h >>"hlp\Multitron.hm"
REM -- Make help for Project MULTITRON
echo Building Win32 Help files
start /wait hcw /C /E /M "hlp\Multitron.hpj"
if errorlevel 1 goto :Error
if not exist "hlp\Multitron.hlp" goto :Error
if not exist "hlp\Multitron.cnt" goto :Error
echo.
if exist Debug\nul copy "hlp\Multitron.hlp" Debug
if exist Debug\nul copy "hlp\Multitron.cnt" Debug
if exist Release\nul copy "hlp\Multitron.hlp" Release
if exist Release\nul copy "hlp\Multitron.cnt" Release
echo.
goto :done
:Error
echo hlp\Multitron.hpj(1) : error: Problem encountered creating help file
:done
echo.
@@ -0,0 +1,280 @@
// Multitron.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "Multitron.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "MultitronFrm.h"
#include "MultitronDoc.h"
#include "TextureDoc.h"
#include "MultitronView.h"
#include "TextureView.h"
#include <GameOS\GameOS.hpp>
#include <DLLPlatform\DLLPlatform.hpp>
#include <stuff\stuff.hpp>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMultitronApp
BEGIN_MESSAGE_MAP(CMultitronApp, CWinApp)
//{{AFX_MSG_MAP(CMultitronApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSave)
//}}AFX_MSG_MAP
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMultitronApp construction
CMultitronApp::CMultitronApp()
{
m_pMainDoc = NULL;
m_FileOPendlg = NULL;
m_mapHintParams["mipmap"]="Default|None|Explicit";
m_mapHintParams["reloadfromdisk"]="false|true";
m_mapHintParams["readonly"]="true|false";
m_mapHintParams["memory"]="Default|AGP|Video";
m_mapHintParams["pageout"]="Default|First|Last";
m_mapHintParams["mipfilter"]="Box|Point";
m_mapHintParams["pinkisalpha"]="false|true";
m_mapHintParams["blueisalpha"]="false|true";
m_mapHintParams["nogamma"]="false|true";
m_mapHintParams["format"]="Alpha|Solid|Keyed|Bump";
m_mapHintParams["resourcify"]="true|false";
m_mapHintParams["bias"]="-3|-2|-1|0|1|2|3";
}
CMultitronApp::~CMultitronApp()
{
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CMultitronApp object
CMultitronApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CMultitronApp initialization
BOOL CMultitronApp::InitInstance()
{
char buf[MAX_PATH];
GetCurrentDirectory(MAX_PATH,buf);
InitGameOS( AfxGetInstanceHandle(), NULL, "\0" );
Stuff::ArmorLevel = 4;
Stuff::InitializeClasses();
SetCurrentDirectory(buf);
m_strRunDir = buf;
AfxEnableControlContainer();
// Standard initialization
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// Change the registry key under which our settings are stored.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(8); // Load standard INI file options (including MRU)
// Register document templates
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MULTITTYPE,
RUNTIME_CLASS(CTextureDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTextureView));
AddDocTemplate(pDocTemplate);
m_mapTemplate[ID_FILE_NEW] = pDocTemplate;
// ****Be sure that this doc template is last so that it is closed last and all previous documents that use the
// pages dependent on the main doc don't assert that they are corrupted ****
m_pMainDoc = pDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMultitronDoc),
RUNTIME_CLASS(CMultitronFrm), // custom MDI child frame
RUNTIME_CLASS(CMultitronView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
CRect rc;
pMainFrame->GetWindowRect(&rc);
rc.right = rc.right-rc.left;
rc.bottom = rc.bottom-rc.top;
rc.left = 0;
rc.top = 0;
pMainFrame->MoveWindow(rc);
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
return TRUE;
}
int CMultitronApp::ExitInstance()
{
if (m_FileOPendlg) {
delete m_FileOPendlg;
m_FileOPendlg = NULL;
}
Stuff::TerminateClasses();
ExitGameOS();
return CWinApp::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// App command to run the dialog
void CMultitronApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronApp message handlers
void CMultitronApp::OnFileNew()
{
WPARAM wParam = MAKELPARAM(ID_FILE_MRU_FILE1,0);
AfxGetMainWnd()->SendMessage(WM_COMMAND,wParam,NULL);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void __stdcall GetGameOSEnvironment(char* CommandLine)
{
//
//----------------------------------------------------------
// This is where to set GOS environment settings.
//----------------------------------------------------------
//
Environment.applicationName = "Multitron";
Environment.screenWidth = 640;
Environment.screenHeight = 480;
Environment.bitDepth = 16;
}
void CMultitronApp::OnFileOpen()
{
if (!m_FileOPendlg) {
m_FileOPendlg = new CFileOpenDlg;
}
if (IDOK == m_FileOPendlg->DoModal()) {
OpenDocumentFile(m_FileOPendlg->GetFileName());
}
}
CDocument* CMultitronApp::OpenDocumentFile(LPCTSTR lpszFileName)
{
return m_pMainDoc->OpenDocumentFile(lpszFileName);
}
void CMultitronApp::OnFileSave()
{
if (m_pMainDoc)
{
POSITION pos = m_pMainDoc->GetFirstDocPosition();
while (pos)
{
CDocument *pDoc = m_pMainDoc->GetNextDoc(pos);
pDoc->SaveModified();
}
}
}
void CMultitronApp::RefreshFiles()
{
if (m_pMainDoc)
{
POSITION pos = m_pMainDoc->GetFirstDocPosition();
while (pos)
{
CDocument *pDoc = m_pMainDoc->GetNextDoc(pos);
pDoc->UpdateAllViews(NULL);
}
}
}
@@ -0,0 +1,280 @@
# Microsoft Developer Studio Project File - Name="Multitron" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=Multitron - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Multitron.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Multitron.mak" CFG="Multitron - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Multitron - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "Multitron - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "Multitron - Win32 Release"
# PROP BASE Use_MFC 6
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 6
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "../../../rel.bin"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
# ADD LINK32 /nologo /subsystem:windows /machine:I386
!ELSEIF "$(CFG)" == "Multitron - Win32 Debug"
# PROP BASE Use_MFC 6
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 6
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "../../../dbg.bin"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /G6 /Zp4 /MDd /W4 /Gm /GR /GX /Zi /Od /I "." /I "..\..\Libraries" /I "..\..\..\CoreTech\Libraries" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_AFXDLL" /D "MULTI_PLAYER" /D "USE_PROTOTYPES" /D "STRICT" /D TEST_CLASS=50 /D "_ARMOR" /Yu"stdafx.h" /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:windows /incremental:no /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "Multitron - Win32 Release"
# Name "Multitron - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\ChildFrm.cpp
# End Source File
# Begin Source File
SOURCE=.\FileNode.cpp
# End Source File
# Begin Source File
SOURCE=.\FileOpenDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\MainFrm.cpp
# End Source File
# Begin Source File
SOURCE=.\Multitron.cpp
# End Source File
# Begin Source File
SOURCE=.\Multitron.rc
# End Source File
# Begin Source File
SOURCE=.\MultitronDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\MultitronDoc.cpp
# End Source File
# Begin Source File
SOURCE=.\MultitronFrm.cpp
# End Source File
# Begin Source File
SOURCE=.\MultitronView.cpp
# End Source File
# Begin Source File
SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# Begin Source File
SOURCE=.\TextureDoc.cpp
# End Source File
# Begin Source File
SOURCE=.\TextureView.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\ChildFrm.h
# End Source File
# Begin Source File
SOURCE=.\FileNode.h
# End Source File
# Begin Source File
SOURCE=.\FileOpenDlg.h
# End Source File
# Begin Source File
SOURCE=.\MainFrm.h
# End Source File
# Begin Source File
SOURCE=.\Multitron.h
# End Source File
# Begin Source File
SOURCE=.\MultitronDlg.h
# End Source File
# Begin Source File
SOURCE=.\MultitronDoc.h
# End Source File
# Begin Source File
SOURCE=.\MultitronFrm.h
# End Source File
# Begin Source File
SOURCE=.\MultitronView.h
# End Source File
# Begin Source File
SOURCE=.\Resource.h
!IF "$(CFG)" == "Multitron - Win32 Release"
# PROP Ignore_Default_Tool 1
# Begin Custom Build - Making help include file...
TargetName=Multitron
InputPath=.\Resource.h
"hlp\$(TargetName).hm" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
echo. >"hlp\$(TargetName).hm"
echo // Commands (ID_* and IDM_*) >>"hlp\$(TargetName).hm"
makehm ID_,HID_,0x10000 IDM_,HIDM_,0x10000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Prompts (IDP_*) >>"hlp\$(TargetName).hm"
makehm IDP_,HIDP_,0x30000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Resources (IDR_*) >>"hlp\$(TargetName).hm"
makehm IDR_,HIDR_,0x20000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Dialogs (IDD_*) >>"hlp\$(TargetName).hm"
makehm IDD_,HIDD_,0x20000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Frame Controls (IDW_*) >>"hlp\$(TargetName).hm"
makehm IDW_,HIDW_,0x50000 resource.h >>"hlp\$(TargetName).hm"
# End Custom Build
!ELSEIF "$(CFG)" == "Multitron - Win32 Debug"
# PROP Ignore_Default_Tool 1
# Begin Custom Build - Making help include file...
TargetName=Multitron
InputPath=.\Resource.h
"hlp\$(TargetName).hm" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
echo. >"hlp\$(TargetName).hm"
echo // Commands (ID_* and IDM_*) >>"hlp\$(TargetName).hm"
makehm ID_,HID_,0x10000 IDM_,HIDM_,0x10000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Prompts (IDP_*) >>"hlp\$(TargetName).hm"
makehm IDP_,HIDP_,0x30000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Resources (IDR_*) >>"hlp\$(TargetName).hm"
makehm IDR_,HIDR_,0x20000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Dialogs (IDD_*) >>"hlp\$(TargetName).hm"
makehm IDD_,HIDD_,0x20000 resource.h >>"hlp\$(TargetName).hm"
echo. >>"hlp\$(TargetName).hm"
echo // Frame Controls (IDW_*) >>"hlp\$(TargetName).hm"
makehm IDW_,HIDW_,0x50000 resource.h >>"hlp\$(TargetName).hm"
# End Custom Build
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
# Begin Source File
SOURCE=.\TextureDoc.h
# End Source File
# Begin Source File
SOURCE=.\TextureView.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\hlp\Multitron.hm
# End Source File
# Begin Source File
SOURCE=.\res\Multitron.ico
# End Source File
# Begin Source File
SOURCE=.\res\Multitron.rc2
# End Source File
# Begin Source File
SOURCE=.\res\MultitronDoc.ico
# End Source File
# Begin Source File
SOURCE=.\res\Toolbar.bmp
# End Source File
# End Group
# End Target
# End Project
@@ -0,0 +1,89 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "DLLPlatform"=..\..\..\CoreTech\Libraries\DLLPlatform\DLLPlatform.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "GameOS"=..\..\..\CoreTech\Libraries\GameOS\GameOS.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "ImageLib"=..\..\Libraries\ImageLib\ImageLib.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "Multitron"=.\Multitron.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name DLLPlatform
End Project Dependency
Begin Project Dependency
Project_Dep_Name GameOS
End Project Dependency
Begin Project Dependency
Project_Dep_Name ImageLib
End Project Dependency
Begin Project Dependency
Project_Dep_Name Stuff
End Project Dependency
}}}
###############################################################################
Project: "Stuff"=..\..\Libraries\Stuff\Stuff.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################
@@ -0,0 +1,67 @@
// Multitron.h : main header file for the MULTITRON application
//
#if !defined(AFX_MULTITRON_H__60718FCF_44E0_4971_835D_CE2786970EB6__INCLUDED_)
#define AFX_MULTITRON_H__60718FCF_44E0_4971_835D_CE2786970EB6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
#include "FileOpenDlg.h"
#include <stuff\stuff.hpp>
/////////////////////////////////////////////////////////////////////////////
// CMultitronApp:
// See Multitron.cpp for the implementation of this class
//
class CMultitronApp : public CWinApp
{
public:
CMultitronApp();
~CMultitronApp();
CString m_strRunDir;
CMapWordToOb m_mapTemplate;
CMapStringToString m_mapHintParams;
CMultiDocTemplate* m_pMainDoc;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMultitronApp)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
virtual CDocument* OpenDocumentFile(LPCTSTR lpszFileName);
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CMultitronApp)
afx_msg void OnAppAbout();
afx_msg void OnFileNew();
afx_msg void OnFileOpen();
afx_msg void OnFileSave();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
void RefreshFiles();
protected:
CFileOpenDlg* m_FileOPendlg;
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MULTITRON_H__60718FCF_44E0_4971_835D_CE2786970EB6__INCLUDED_)
@@ -0,0 +1,595 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\Multitron.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#include ""afxprint.rc"" // printing/print preview resources\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "res\\Multitron.ico"
IDR_MULTITTYPE ICON DISCARDABLE "res\\MultitronDoc.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_MAINFRAME BITMAP MOVEABLE PURE "res\\Toolbar.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
//
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15
BEGIN
BUTTON ID_FILE_NEW
BUTTON ID_FILE_OPEN
BUTTON ID_FILE_SAVE
SEPARATOR
BUTTON ID_EDIT_CUT
BUTTON ID_EDIT_COPY
BUTTON ID_EDIT_PASTE
SEPARATOR
BUTTON ID_FILE_PRINT
SEPARATOR
BUTTON ID_APP_ABOUT
BUTTON ID_CONTEXT_HELP
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", ID_FILE_NEW
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Close", ID_FILE_CLOSE
MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE
MENUITEM "Save &As...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit", ID_APP_EXIT
END
POPUP "&Edit"
BEGIN
MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT
MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE
END
POPUP "&View"
BEGIN
MENUITEM "&Toolbar", ID_VIEW_TOOLBAR
MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR
END
POPUP "Action"
BEGIN
MENUITEM "Create MegaTexture Hint", ID_ADD_MEGATEXTURE
MENUITEM "Add EntriesTo Hint File", ID_ADD_TEXTUREHINT
MENUITEM "Romove Entries From Hint File", ID_REMOVE_TEXTUREHINT
MENUITEM "Delete Textures", ID_DELETEFROMDISK
END
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", ID_HELP_FINDER
MENUITEM SEPARATOR
MENUITEM "&About Multitron...", ID_APP_ABOUT
END
END
IDR_MULTITTYPE MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", ID_FILE_NEW
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Close", ID_FILE_CLOSE
MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE
MENUITEM "Save &As...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit", ID_APP_EXIT
END
POPUP "&Edit"
BEGIN
MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT
MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE
END
POPUP "&View"
BEGIN
MENUITEM "&Toolbar", ID_VIEW_TOOLBAR
MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR
END
POPUP "Action"
BEGIN
POPUP "Add Hint Entry"
BEGIN
MENUITEM "MipMap", ID_ADD_MIPMAP
MENUITEM "ReloadFromDisk", ID_ADD_RELOADFROMDISK
MENUITEM "ReadOnly", ID_ADD_READONLY
MENUITEM "Memory", ID_ADD_MEMORY
MENUITEM "PageOut", ID_ADD_PAGEOUT
MENUITEM "MipFilter", ID_ADD_MIPFILTER
MENUITEM "PinkIsAlpha", ID_ADD_PINKISALPHA
MENUITEM "BlueIsAlpha", ID_ADD_BLUEISALPHA
MENUITEM "NoGamma", ID_ADD_NOGAMMA
MENUITEM "Format", ID_ADD_FORMAT
MENUITEM "Resourcify", ID_ADD_RESOURCIFY
END
END
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", ID_HELP_FINDER
MENUITEM SEPARATOR
MENUITEM "&About Multitron...", ID_APP_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
"N", ID_FILE_NEW, VIRTKEY, CONTROL
"O", ID_FILE_OPEN, VIRTKEY, CONTROL
"S", ID_FILE_SAVE, VIRTKEY, CONTROL
"P", ID_FILE_PRINT, VIRTKEY, CONTROL
"Z", ID_EDIT_UNDO, VIRTKEY, CONTROL
"X", ID_EDIT_CUT, VIRTKEY, CONTROL
"C", ID_EDIT_COPY, VIRTKEY, CONTROL
"V", ID_EDIT_PASTE, VIRTKEY, CONTROL
VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT
VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT
VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL
VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT
VK_F6, ID_NEXT_PANE, VIRTKEY
VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT
VK_F1, ID_CONTEXT_HELP, VIRTKEY, SHIFT
VK_F1, ID_HELP, VIRTKEY
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Multitron"
FONT 8, "MS Sans Serif"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT "Multitron Version 1.0",IDC_STATIC,40,10,119,8,
SS_NOPREFIX
LTEXT "Copyright (C) 2000",IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP
END
IDD_MULITRONDOC DIALOG DISCARDABLE 0, 0, 300, 351
STYLE DS_MODALFRAME | WS_CHILD | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
LISTBOX IDC_LIST_UNUSED,5,212,181,134,LBS_SORT |
LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
WS_HSCROLL | WS_TABSTOP
CONTROL "Button1",IDC_PREVIEW_UNUSED,"Button",BS_OWNERDRAW |
BS_BITMAP | BS_FLAT | WS_TABSTOP,194,211,100,100
LISTBOX IDC_LIST_USED,5,37,181,134,LBS_SORT |
LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL |
WS_HSCROLL | WS_TABSTOP
CONTROL "Button1",IDC_PREVIEW_USED,"Button",BS_OWNERDRAW |
BS_BITMAP | BS_FLAT | WS_TABSTOP,194,36,100,100
LTEXT "Unused Texture Files:",IDC_STATIC,5,198,70,8
LTEXT "Used Textures:",IDC_STATIC,5,9,49,8
PUSHBUTTON "Add To Hint File",ID_ADD_TEXTUREHINT,85,177,58,14,
BS_MULTILINE | WS_DISABLED
PUSHBUTTON "Remove From Hint File",ID_REMOVE_TEXTUREHINT,5,177,79,
14,BS_MULTILINE
PUSHBUTTON "Create MegaTexture Hint",ID_ADD_MEGATEXTURE,144,177,87,
14,BS_MULTILINE | WS_DISABLED
PUSHBUTTON "Delete From Disk",ID_DELETEFROMDISK,232,177,61,14,
WS_DISABLED
CONTROL "Non-resourcified textures",IDC_CHECK_SHOWSEUDO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,200,9,94,10
CONTROL "Search in all subdirectories",IDC_CHECK_SEARCHSUB,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,83,197,100,10
LISTBOX IDC_USED_IMAGEPROP,194,136,100,35,LBS_NOINTEGRALHEIGHT |
LBS_NOSEL | WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_UNUSED_IMAGEPROP,194,311,100,35,LBS_NOINTEGRALHEIGHT |
LBS_NOSEL | WS_VSCROLL | WS_TABSTOP
CONTROL "Mipmaps",IDC_CHECK_SHOWMIPMAP,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,156,9,44,10
LTEXT "Show as Separate Entries:",IDC_STATIC,66,9,84,8
CONTROL "Show Alpha Textures",IDC_CHECK_SHOWALPHA,"Button",
BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,87,21,83,10
CONTROL "Show Solid Textures",IDC_CHECK_SHOWSOLID,"Button",
BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,5,21,81,10
CONTROL "Preview Alpha Channel",IDC_CHECK_PREVIEWALPHA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,200,22,89,10
END
IDD_FILEOPEN DIALOG DISCARDABLE 0, 0, 220, 183
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,163,146,50,14,WS_DISABLED
PUSHBUTTON "Cancel",IDCANCEL,163,162,50,14
CONTROL "Tree1",IDC_TREE_FILES,"SysTreeView32",TVS_HASBUTTONS |
TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS |
TVS_TRACKSELECT | TVS_FULLROWSELECT | WS_BORDER |
WS_TABSTOP,7,29,206,112
LTEXT "Hint File Name:",IDC_STATIC,7,149,49,8
EDITTEXT IDC_HINTFILENAME,7,161,149,15,ES_AUTOHSCROLL
EDITTEXT IDC_BUILDFILENAME,7,7,187,14,ES_AUTOHSCROLL
PUSHBUTTON ". . .",IDC_FILEBROWSE,194,7,19,14
END
IDD_TEXTURE_PROPERTIES DIALOG DISCARDABLE 0, 0, 136, 316
STYLE DS_MODALFRAME | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
LISTBOX IDC_LIST_PAGE,2,117,129,157,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add Entry",IDC_ADD,16,297,50,14
PUSHBUTTON "Delete Entry",IDC_DELETE,68,297,50,14
COMBOBOX IDC_COMBO_VALUE,2,279,129,50,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_EDIT_PAGENAME,2,28,129,14,ES_AUTOHSCROLL
PUSHBUTTON "Apply",IDC_APPLY,2,47,35,14
LTEXT "Original Texture Name:",IDC_STATIC,4,18,73,8
LTEXT "Output Alias (optional):",IDC_STATIC,2,68,72,8
EDITTEXT IDC_EDIT_ALIASNAME,2,79,129,14,ES_AUTOHSCROLL
PUSHBUTTON "Apply",IDC_APPLY_ALIAS,2,97,35,14
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "Multitron MFC Application\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "Multitron\0"
VALUE "LegalCopyright", "Copyright (C) 2000\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "Multitron.EXE\0"
VALUE "ProductName", "Multitron Application\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 228
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_MULITRONDOC, DIALOG
BEGIN
LEFTMARGIN, 5
RIGHTMARGIN, 294
TOPMARGIN, 4
BOTTOMMARGIN, 346
END
IDD_FILEOPEN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 213
TOPMARGIN, 7
BOTTOMMARGIN, 176
END
IDD_TEXTURE_PROPERTIES, DIALOG
BEGIN
LEFTMARGIN, 2
RIGHTMARGIN, 131
TOPMARGIN, 7
BOTTOMMARGIN, 311
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME "\nHint File\nHint File\nHint Files (*.hint)\n.hint\nMultitron.Document\nMultit Document"
IDR_MULTITTYPE "\n"
IDR_SUBDOCTYPE "\n"
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE "Multitron"
AFX_IDS_IDLEMESSAGE "For Help, press F1"
AFX_IDS_HELPMODEMESSAGE "Select an object on which to get Help"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_INDICATOR_EXT "EXT"
ID_INDICATOR_CAPS "CAP"
ID_INDICATOR_NUM "NUM"
ID_INDICATOR_SCRL "SCRL"
ID_INDICATOR_OVR "OVR"
ID_INDICATOR_REC "REC"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW "Create a new document\nNew"
ID_FILE_OPEN "Open an existing document\nOpen"
ID_FILE_CLOSE "Close the active document\nClose"
ID_FILE_SAVE "Save the active document\nSave"
ID_FILE_SAVE_AS "Save the active document with a new name\nSave As"
ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup"
ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup"
ID_FILE_PRINT "Print the active document\nPrint"
ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_APP_ABOUT "Display program information, version number and copyright\nAbout"
ID_APP_EXIT "Quit the application; prompts to save documents\nExit"
ID_HELP_INDEX "Opens Help\nHelp Topics"
ID_HELP_FINDER "List Help topics\nHelp Topics"
ID_HELP_USING "Display instructions about how to use help\nHelp"
ID_CONTEXT_HELP "Display help for clicked on buttons, menus and windows\nHelp"
ID_HELP "Display help for current task or command\nHelp"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_MRU_FILE1 "Open this document"
ID_FILE_MRU_FILE2 "Open this document"
ID_FILE_MRU_FILE3 "Open this document"
ID_FILE_MRU_FILE4 "Open this document"
ID_FILE_MRU_FILE5 "Open this document"
ID_FILE_MRU_FILE6 "Open this document"
ID_FILE_MRU_FILE7 "Open this document"
ID_FILE_MRU_FILE8 "Open this document"
ID_FILE_MRU_FILE9 "Open this document"
ID_FILE_MRU_FILE10 "Open this document"
ID_FILE_MRU_FILE11 "Open this document"
ID_FILE_MRU_FILE12 "Open this document"
ID_FILE_MRU_FILE13 "Open this document"
ID_FILE_MRU_FILE14 "Open this document"
ID_FILE_MRU_FILE15 "Open this document"
ID_FILE_MRU_FILE16 "Open this document"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_NEXT_PANE "Switch to the next window pane\nNext Pane"
ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_WINDOW_NEW "Open another window for the active document\nNew Window"
ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons"
ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows"
ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows"
ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows"
ID_WINDOW_SPLIT "Split the active window into panes\nSplit"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_EDIT_CLEAR "Erase the selection\nErase"
ID_EDIT_CLEAR_ALL "Erase everything\nErase All"
ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy"
ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut"
ID_EDIT_FIND "Find the specified text\nFind"
ID_EDIT_PASTE "Insert Clipboard contents\nPaste"
ID_EDIT_REPEAT "Repeat the last action\nRepeat"
ID_EDIT_REPLACE "Replace specific text with different text\nReplace"
ID_EDIT_SELECT_ALL "Select the entire document\nSelect All"
ID_EDIT_UNDO "Undo the last action\nUndo"
ID_EDIT_REDO "Redo the previously undone action\nRedo"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar"
ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCSIZE "Change the window size"
AFX_IDS_SCMOVE "Change the window position"
AFX_IDS_SCMINIMIZE "Reduce the window to an icon"
AFX_IDS_SCMAXIMIZE "Enlarge the window to full size"
AFX_IDS_SCNEXTWINDOW "Switch to the next document window"
AFX_IDS_SCPREVWINDOW "Switch to the previous document window"
AFX_IDS_SCCLOSE "Close the active window and prompts to save the documents"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCRESTORE "Restore the window to normal size"
AFX_IDS_SCTASKLIST "Activate Task List"
AFX_IDS_MDICHILD "Activate this window"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_PREVIEW_CLOSE "Close print preview mode\nCancel Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_ADD "Add Texture Hint Entry"
ID_ADD_MIPMAP "MipMap Entry"
ID_ADD_RELOADFROMDISK "Reload From Disk Entry"
ID_ADD_READONLY "Read Only Entry"
ID_ADD_MEMORY "Memory Entry"
ID_ADD_PAGEOUT "Page Out Entry"
ID_ADD_MIPFILTER "Mip Filter Entry"
ID_ADD_PINKISALPHA "Pink Is Alpha Entry"
ID_ADD_BLUEISALPHA "Blue Is Alpha Entry"
ID_ADD_NOGAMMA "No Gamma Entry"
ID_ADD_FORMAT "Format Entry"
ID_ADD_RESOURCIFY "Resourcify Entry"
ID_ADD_MEGATEXTURE "Create MegaTexture Hint"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_ADD_TEXTUREHINT "Add EntriesTo Hint File"
ID_REMOVE_TEXTUREHINT "Romove Entries From Hint File"
ID_OPEN_TEXTURE "Open Selected Texture"
ID_DELETEFROMDISK "Delete Textures From Disk"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\Multitron.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#include "afxprint.rc" // printing/print preview resources
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,87 @@
#if !defined(AFX_MULTITRONDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_)
#define AFX_MULTITRONDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MultitronDlg.h : header file
//
#include "MultitronDoc.h"
#include <imagelib\image.h>
/////////////////////////////////////////////////////////////////////////////
// CMultitronDlg dialog
class CMultitronDlg : public CDialog
{
// Construction
public:
CMultitronDlg(CWnd* pParent = NULL); // standard constructor
void UpdateUsedList(CObject* pHint = NULL);
void UpdateUnusedList(CObject* pHint = NULL);
CDocument* SetDocument(CMultitronDoc *pDoc);
// Dialog Data
//{{AFX_DATA(CMultitronDlg)
enum { IDD = IDD_MULITRONDOC };
CButton m_wndPreviewUsed;
CButton m_wndPreviewUnused;
CListBox m_wndUsed;
CListBox m_wndUnused;
CListBox m_wndUsedImageProp;
CListBox m_wndUnusedImageProp;
CButton m_checkShowSeudo;
CButton m_checkShowMipmap;
CButton m_checkSearchSubDir;
CButton m_checkShowSolid;
CButton m_checkShowAlpha;
CButton m_checkPreviewAlpha;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMultitronDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
CMapStringToString m_mapAliasNames;
CStringList m_listTextures;
CStringList m_listUsed;
CBitmap m_bmUnused;
CBitmap m_bmUsed;
Stuff::NotationFile *m_pNoteFile;
CMultitronDoc *m_pDocument;
void FindAllTextures();
void FindTextures(CString dir);
void ListExplicitMipmaps(CStringList* pMipmaps, int);
void UpdateImageProp(CListBox *pList, Image* pImage, Stuff::Page* pPage=NULL);
void UpdateImageBitmap(CBitmap* pBitmap, Image* pImage, bool bPreviewAlpha=false);
// Generated message map functions
//{{AFX_MSG(CMultitronDlg)
virtual BOOL OnInitDialog();
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg void OnSelchangeListUnused();
afx_msg void OnSelchangeListUsed();
afx_msg void OnCheckPreviewAlpha();
afx_msg void OnAdd();
afx_msg void OnRemove();
afx_msg void OnDeleteTextureFromDisk();
afx_msg void OnEditTextureHint();
afx_msg void OnAddMegatexture();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MULTITRONDLG_H__D39C91CE_CB20_44B7_BAC2_FF05580AB19F__INCLUDED_)
@@ -0,0 +1,215 @@
// MultitronDoc.cpp : implementation of the CMultitronDoc class
//
#include "stdafx.h"
#include <direct.h>
#include "Multitron.h"
#include "MultitronDoc.h"
#include "MainFrm.h"
#include <GameOS\toolOS.hpp>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMultitronDoc
IMPLEMENT_DYNCREATE(CMultitronDoc, CDocument)
BEGIN_MESSAGE_MAP(CMultitronDoc, CDocument)
//{{AFX_MSG_MAP(CMultitronDoc)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMultitronDoc construction/destruction
CMultitronDoc::CMultitronDoc()
{
m_pNoteFile = NULL;
m_pTexturePageDoc = NULL;
}
CMultitronDoc::~CMultitronDoc()
{
if (m_pNoteFile->IsChanged())
{
m_pNoteFile->IgnoreChanges();
}
delete m_pNoteFile;
}
BOOL CMultitronDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronDoc serialization
void CMultitronDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
}
else
{
}
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronDoc diagnostics
#ifdef _DEBUG
void CMultitronDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMultitronDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMultitronDoc commands
/*******************************************************************************
/* function name: OnCloseDocument
/* description: Close the hint file
/*******************************************************************************/
void CMultitronDoc::OnCloseDocument()
{
if (m_pTexturePageDoc)
m_pTexturePageDoc->OnCloseDocument();
CDocument::OnCloseDocument();
}
/*******************************************************************************
/* function name: OnSaveDocument
/* description: Save the hint file
/*******************************************************************************/
BOOL CMultitronDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
if (::gos_FileReadOnly(lpszPathName))
::gos_FileSetReadWrite(lpszPathName);
m_pNoteFile->SaveAs(lpszPathName);
return TRUE;
}
/*******************************************************************************
/* function name: OnOpenDocument
/* description: Open a hint file
/*******************************************************************************/
BOOL CMultitronDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
char path[MAX_PATH];
_splitpath(lpszPathName, NULL, path, NULL, NULL);
CString strPath(path);
strPath.MakeLower();
chdir(strPath.Left(strPath.Find("content")));
m_pNoteFile = new Stuff::NotationFile(lpszPathName);
return TRUE;
}
/*******************************************************************************
/* function name: SetPathName
/* description: Called when a file is opened
/*******************************************************************************/
void CMultitronDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)
{
CDocument::SetPathName(lpszPathName, bAddToMRU);
CString path(lpszPathName);
path.MakeLower();
SetTitle(path.Right(path.GetLength() - path.Find("content")));
}
/*******************************************************************************
/* function name: SaveModified
/* description: Called when a modified hint file is being closed
/*******************************************************************************/
BOOL CMultitronDoc::SaveModified()
{
if (m_pNoteFile->IsChanged())
{
CString str = m_pNoteFile->GetFileName();
if (IDYES == MessageBox(NULL,str+" has changed. Save changes?","Texture Hint File",MB_YESNO))
{
if (::gos_FileReadOnly(m_pNoteFile->GetFileName()))
::gos_FileSetReadWrite(m_pNoteFile->GetFileName());
m_pNoteFile->Save();
}
}
return CDocument::SaveModified();
}
/*******************************************************************************
/* function name: CanCloseFrame
/* description:
/*******************************************************************************/
BOOL CMultitronDoc::CanCloseFrame(CFrameWnd* pFrame)
{
//return false;
return CDocument::CanCloseFrame(pFrame);
}
/*******************************************************************************
/* function name: RemoveTexture
/* description: Delete a hint page from the file
/*******************************************************************************/
CString CMultitronDoc::RemoveTexture(Stuff::Page *page)
{
CString name = page->GetName();
const char *entry;
if (page->GetEntry("alias",&entry))
{
name = entry;
}
if (m_pNoteFile) {
m_pNoteFile->DeletePage(page->GetName());
}
return name;
}
/*******************************************************************************
/* function name: OpenTexture
/* description: Open a texture hint page in the texture view panel
/*******************************************************************************/
CDocument *CMultitronDoc::OpenTexture(Stuff::Page *page)
{
if (m_pTexturePageDoc)
{
m_pTexturePageDoc->SetPathName((LPCTSTR) page);
return m_pTexturePageDoc;
}
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CDocTemplate *pTemplate = (CDocTemplate *)pApp->m_mapTemplate[ID_FILE_NEW];
m_pTexturePageDoc = pTemplate->OpenDocumentFile((LPCTSTR)page);
return m_pTexturePageDoc;
}
/*******************************************************************************
/* function name: CloseTexture
/* description: Close a texture hint page in the texture view panel
/*******************************************************************************/
void CMultitronDoc::CloseTexture(CDocument *pDoc)
{
CDocument *pValueDoc = (CDocument *)m_pTexturePageDoc;
if (pValueDoc == pDoc)
m_pTexturePageDoc = NULL;
}
@@ -0,0 +1,69 @@
// MultitronDoc.h : interface of the CMultitronDoc class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MULTITRONDOC_H__DF72422E_B51F_4848_90DE_0AB71E52FD34__INCLUDED_)
#define AFX_MULTITRONDOC_H__DF72422E_B51F_4848_90DE_0AB71E52FD34__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "FileNode.h"
class CMultitronDoc : public CDocument
{
protected: // create from serialization only
CMultitronDoc();
DECLARE_DYNCREATE(CMultitronDoc)
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMultitronDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void OnCloseDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
virtual BOOL CanCloseFrame(CFrameWnd* pFrame);
protected:
virtual BOOL SaveModified();
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMultitronDoc();
CDocument *GetTextureDoc() {return m_pTexturePageDoc;}
Stuff::NotationFile *GetHintFile() {return m_pNoteFile;}
CString RemoveTexture(Stuff::Page *);
CDocument *OpenTexture(Stuff::Page *);
void CloseTexture(CDocument *);
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
Stuff::NotationFile *m_pNoteFile;
CDocument *m_pTexturePageDoc;
// Generated message map functions
protected:
//{{AFX_MSG(CMultitronDoc)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
void SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU = TRUE);
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MULTITRONDOC_H__DF72422E_B51F_4848_90DE_0AB71E52FD34__INCLUDED_)
@@ -0,0 +1,69 @@
// MultitronFrm.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "MultitronFrm.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMultitronFrm
IMPLEMENT_DYNCREATE(CMultitronFrm, CMDIChildWnd)
CMultitronFrm::CMultitronFrm()
{
}
CMultitronFrm::~CMultitronFrm()
{
}
BEGIN_MESSAGE_MAP(CMultitronFrm, CMDIChildWnd)
//{{AFX_MSG_MAP(CMultitronFrm)
ON_WM_CREATE()
ON_WM_MDIACTIVATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMultitronFrm message handlers
BOOL CMultitronFrm::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CMDIFrameWnd* pParentWnd, CCreateContext* pContext)
{
return CMDIChildWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, pContext);
}
int CMultitronFrm::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
BOOL CMultitronFrm::PreCreateWindow(CREATESTRUCT& cs)
{
return CMDIChildWnd::PreCreateWindow(cs);
}
void CMultitronFrm::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
/* CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
if (bActivate)
{
pFrame->m_wndDlgProject.SetDocument(GetActiveDocument());
}
else
{
if (NULL == pActivateWnd)
pFrame->m_wndDlgProject.SetDocument(NULL);
}*/
}
@@ -0,0 +1,51 @@
#if !defined(AFX_MULTITRONFRM_H__33C5EED8_85F9_4F52_B370_A34484379654__INCLUDED_)
#define AFX_MULTITRONFRM_H__33C5EED8_85F9_4F52_B370_A34484379654__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MultitronFrm.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CMultitronFrm frame
class CMultitronFrm : public CMDIChildWnd
{
DECLARE_DYNCREATE(CMultitronFrm)
protected:
CMultitronFrm(); // protected constructor used by dynamic creation
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMultitronFrm)
public:
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, const RECT& rect = rectDefault, CMDIFrameWnd* pParentWnd = NULL, CCreateContext* pContext = NULL);
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CMultitronFrm();
// Generated message map functions
//{{AFX_MSG(CMultitronFrm)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MULTITRONFRM_H__33C5EED8_85F9_4F52_B370_A34484379654__INCLUDED_)
@@ -0,0 +1,138 @@
// MultitronView.cpp : implementation of the CMultitronView class
//
#include "stdafx.h"
#include "Multitron.h"
#include "MultitronDoc.h"
#include "MultitronView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMultitronView
IMPLEMENT_DYNCREATE(CMultitronView, CView)
BEGIN_MESSAGE_MAP(CMultitronView, CView)
//{{AFX_MSG_MAP(CMultitronView)
//}}AFX_MSG_MAP
// Standard printing commands
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMultitronView construction/destruction
CMultitronView::CMultitronView()
{
}
CMultitronView::~CMultitronView()
{
}
BOOL CMultitronView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronView drawing
void CMultitronView::OnDraw(CDC* pDC)
{
//CMultitronDoc* pDoc = GetDocument();
//ASSERT_VALID(pDoc);
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronView printing
BOOL CMultitronView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMultitronView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
void CMultitronView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
/////////////////////////////////////////////////////////////////////////////
// CMultitronView diagnostics
#ifdef _DEBUG
void CMultitronView::AssertValid() const
{
CView::AssertValid();
}
void CMultitronView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMultitronDoc* CMultitronView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMultitronDoc)));
return (CMultitronDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMultitronView message handlers
/*******************************************************************************
/* function name: OnInitialUpdate
/* description: Called when window is displayed for the first time,
/* set up window size and position
/*******************************************************************************/
void CMultitronView::OnInitialUpdate()
{
if (m_dlgMultitron.Create(IDD_MULITRONDOC,this))
{
}
CRect rc;
m_dlgMultitron.GetClientRect(&rc);
rc.right +=20;
rc.bottom+=35;
CWnd *pWnd = GetParent();
pWnd->MoveWindow(rc);
while(pWnd->GetParent())
pWnd = pWnd->GetParent();
rc.right+=220;
rc.bottom+=90;
pWnd->MoveWindow(rc);
CMultitronDoc *pDoc = GetDocument();
m_dlgMultitron.SetDocument(pDoc);
}
/*******************************************************************************
/* function name: OnUpdate
/* description: Called when hosted documents are updated
/*******************************************************************************/
void CMultitronView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
switch(lHint) {
// update the used list
case 0:
m_dlgMultitron.UpdateUsedList(pHint);
break;
// update the unused list
case 1:
m_dlgMultitron.UpdateUnusedList(pHint);
break;
}
}
@@ -0,0 +1,69 @@
// MultitronView.h : interface of the CMultitronView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_MULTITRONVIEW_H__A172B339_61A8_4DC7_958C_FD577FB06666__INCLUDED_)
#define AFX_MULTITRONVIEW_H__A172B339_61A8_4DC7_958C_FD577FB06666__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "MultitronDlg.h"
class CMultitronView : public CView
{
protected: // create from serialization only
CMultitronView();
DECLARE_DYNCREATE(CMultitronView)
// Attributes
public:
CMultitronDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMultitronView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnInitialUpdate();
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMultitronView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
CMultitronDlg m_dlgMultitron;
// Generated message map functions
protected:
//{{AFX_MSG(CMultitronView)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // debug version in MultitronView.cpp
inline CMultitronDoc* CMultitronView::GetDocument()
{ return (CMultitronDoc*)m_pDocument; }
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MULTITRONVIEW_H__A172B339_61A8_4DC7_958C_FD577FB06666__INCLUDED_)
@@ -0,0 +1,100 @@
// NotationDoc.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "NotationDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNotationDoc
IMPLEMENT_DYNCREATE(CNotationDoc, CDocument)
CNotationDoc::CNotationDoc()
{
m_pNoteFile = NULL;
m_pPage = NULL;
m_pNote = NULL;
}
BOOL CNotationDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
CNotationDoc::~CNotationDoc()
{
}
BEGIN_MESSAGE_MAP(CNotationDoc, CDocument)
//{{AFX_MSG_MAP(CNotationDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNotationDoc diagnostics
#ifdef _DEBUG
void CNotationDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CNotationDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CNotationDoc serialization
void CNotationDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CNotationDoc commands
BOOL CNotationDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
Stuff::Plug *plug = (Stuff::Plug *)lpszPathName;
Check_Object(plug);
m_pNote = dynamic_cast<Stuff::Note *>(plug);
if (m_pNote)
{
m_pPage = m_pNote->GetPage();
}
else
{
m_pPage = dynamic_cast<Stuff::Page *>(plug);
}
if (m_pPage)
m_pNoteFile = m_pPage->GetNotationFile();
return TRUE;
}
void CNotationDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)
{
CString name = m_pNoteFile->GetFileName();
CDocument::SetPathName(name, false);
}
@@ -0,0 +1,61 @@
#if !defined(AFX_NOTATIONDOC_H__8943068C_F629_41C6_917E_A79967AE86EC__INCLUDED_)
#define AFX_NOTATIONDOC_H__8943068C_F629_41C6_917E_A79967AE86EC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// NotationDoc.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CNotationDoc document
#include <stuff\stuff.hpp>
class CNotationDoc : public CDocument
{
protected:
CNotationDoc(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CNotationDoc)
// Attributes
public:
Stuff::Page *m_pPage;
Stuff::Note *m_pNote;
Stuff::NotationFile *GetNotationFile() {return m_pNoteFile;}
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CNotationDoc)
public:
virtual void Serialize(CArchive& ar); // overridden for document i/o
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual void SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU = TRUE);
protected:
virtual BOOL OnNewDocument();
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CNotationDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
Stuff::NotationFile *m_pNoteFile;
//{{AFX_MSG(CNotationDoc)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_NOTATIONDOC_H__8943068C_F629_41C6_917E_A79967AE86EC__INCLUDED_)
@@ -0,0 +1,120 @@
// NotationView.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "NotationView.h"
#include "NotationDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNotationView
IMPLEMENT_DYNCREATE(CNotationView, CView)
CNotationView::CNotationView()
{
}
CNotationView::~CNotationView()
{
}
BEGIN_MESSAGE_MAP(CNotationView, CView)
//{{AFX_MSG_MAP(CNotationView)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNotationView drawing
void CNotationView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CNotationView diagnostics
#ifdef _DEBUG
void CNotationView::AssertValid() const
{
CView::AssertValid();
}
void CNotationView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CNotationView message handlers
BOOL CNotationView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
return CView::PreCreateWindow(cs);
}
void CNotationView::OnInitialUpdate()
{
CRect rc;
GetClientRect(&rc);
if (!m_wndTreeCtrl.Create(WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_FULLROWSELECT,rc,this,0))
{
return;
}
CView::OnInitialUpdate();
}
void CNotationView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CNotationDoc *pDoc = (CNotationDoc *)GetDocument();
Stuff::Plug *plug = pDoc->m_pNote;
if (NULL == plug)
plug = pDoc->m_pPage;
m_wndTreeCtrl.DeleteAllItems();
Stuff::NotationFile::PageIterator *pages = pDoc->GetNotationFile()->MakePageIterator();
Stuff::Page *page;
while (NULL != (page = pages->ReadAndNext()))
{
CString pagename = page->GetName();
HTREEITEM hPage = m_wndTreeCtrl.InsertItem(pagename,TVI_ROOT);
m_wndTreeCtrl.SetItemData(hPage,(DWORD)page);
if (page == plug)
m_wndTreeCtrl.SelectItem(hPage);
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
CString notename = note->GetName();
const char *entry;
note->GetEntry(&entry);
CString str;
str.Format("%s=%s",notename,entry);
HTREEITEM hNote = m_wndTreeCtrl.InsertItem(str,hPage);
m_wndTreeCtrl.SetItemData(hNote,(DWORD)note);
if (note == plug)
m_wndTreeCtrl.SelectItem(hNote);
}
delete notes;
m_wndTreeCtrl.Expand(hPage,TVE_EXPAND);
}
delete pages;
}
@@ -0,0 +1,59 @@
#if !defined(AFX_NOTATIONVIEW_H__7C674026_71BE_421C_8B2E_A8E407357A82__INCLUDED_)
#define AFX_NOTATIONVIEW_H__7C674026_71BE_421C_8B2E_A8E407357A82__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// NotationView.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CNotationView view
class CNotationView : public CView
{
protected:
CNotationView(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CNotationView)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CNotationView)
public:
virtual void OnInitialUpdate();
protected:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL
// Implementation
protected:
CTreeCtrl m_wndTreeCtrl;
virtual ~CNotationView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CNotationView)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_NOTATIONVIEW_H__7C674026_71BE_421C_8B2E_A8E407357A82__INCLUDED_)
@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// Multitron.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
@@ -0,0 +1,27 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__1427F1A7_5CE2_4100_904E_A32B5D63FA05__INCLUDED_)
#define AFX_STDAFX_H__1427F1A7_5CE2_4100_904E_A32B5D63FA05__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__1427F1A7_5CE2_4100_904E_A32B5D63FA05__INCLUDED_)
@@ -0,0 +1,740 @@
// TextureDoc.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "TextureDoc.h"
#include "MultitronDoc.h"
#include "MainFrm.h"
#include <GameOs\TooLOS.hpp>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define FLAG_MEGATEXTURE 1
#define FLAG_TEXTUREMODIFIED 2
/////////////////////////////////////////////////////////////////////////////
// CTextureDoc
IMPLEMENT_DYNCREATE(CTextureDoc, CDocument)
CTextureDoc::CTextureDoc()
{
}
BOOL CTextureDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
CTextureDoc::~CTextureDoc()
{
POSITION pos = m_listImages.GetHeadPosition();
while (pos)
{
Image *pImage = (Image *)m_listImages.GetNext(pos);
if (pImage)
delete pImage;
}
m_listImages.RemoveAll();
}
BEGIN_MESSAGE_MAP(CTextureDoc, CDocument)
//{{AFX_MSG_MAP(CTextureDoc)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTextureDoc diagnostics
#ifdef _DEBUG
void CTextureDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CTextureDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTextureDoc serialization
void CTextureDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/*******************************************************************************
/* function name: OnOpenDocument
/* description:
/*******************************************************************************/
BOOL CTextureDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
Stuff::Page *page = (Stuff::Page *)lpszPathName;
Check_Object(page);
return TRUE;
}
/*******************************************************************************
/* function name: SetPathName
/* description: Called when a document/hint page is opened
/*******************************************************************************/
void CTextureDoc::SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU)
{
if (lpszPathName == NULL) {
ClearAllPages();
return;
}
Stuff::Page *page = (Stuff::Page *)lpszPathName;
Check_Object(page);
POSITION pos = m_listPages.GetHeadPosition();
while (pos)
{
Stuff::Page *oldpage = (Stuff::Page *)m_listPages.GetNext(pos);
if (page->GetName() == oldpage->GetName())
return;
}
m_listPages.AddTail((LPVOID)page);
DWORD flags = 0;
Image *pImage = NULL;
const char *entry;
if (page->GetEntry("PageSize",&entry))
{
flags |= FLAG_MEGATEXTURE;
pImage = ArrangeTextures(page);
if (pImage)
flags |= FLAG_TEXTUREMODIFIED;
}
if (NULL == pImage)
{
pImage = LoadTexture(page);
}
m_listImages.AddTail((LPVOID)pImage);
m_listFlags.AddTail((LPVOID)flags);
CString name;
if (GetCount() == 1)
{
Stuff::Page *p = GetPage(0);
name = p->GetName();
}
else
name = "Multiple Pages";
SetDefaults(page, pImage);
m_strPathName = name;
this->SetTitle(name);
}
static CDWordArray arrVerts;
CCell::CCell()
{
bSplit = false;
for (int x=0;x<4;x++)
m_arrChildren[x] = NULL;
m_image = NULL;
state = 0;
}
CCell::~CCell()
{
for (int x=0;x<4;x++)
if (m_arrChildren[x])
delete m_arrChildren[x];
}
CPoint CCell::GetPoint1()
{
DWORD dw = arrVerts[V1];
CPoint pt(LOWORD(dw),HIWORD(dw));
return pt;
}
int CCell::AddVert(int x,int y)
{
DWORD dw = MAKELONG(x,y);
return arrVerts.Add(dw);
}
int CCell::GetXDim()
{
DWORD dw1 = arrVerts[V1];
WORD x1 = LOWORD(dw1);
DWORD dw2 = arrVerts[V2];
WORD x2 = LOWORD(dw2);
return (x2-x1);
}
int CCell::GetYDim()
{
DWORD dw1 = arrVerts[V1];
WORD y1 = HIWORD(dw1);
DWORD dw2 = arrVerts[V2];
WORD y2 = HIWORD(dw2);
return (y2-y1);
}
int CCell::GetV1()
{
return V1;
}
int CCell::GetV2()
{
return V2;
}
int CCell::SetVerts(int a,int b)
{
V1 = a;
V2 = b;
return 1;
}
int CCell::CreateCell(int xSize,int ySize)
{
V1 = AddVert(0,0);
V2 = AddVert(xSize,ySize);
state = 0; // Empty
return 1;
}
CCell *CCell::FillCell(Image *image)
{
if (2==state)
return NULL;
int xSize = image->GetWidth();
int ySize = image->GetHeight();
int xdim = GetXDim();
int ydim = GetYDim();
if ((xSize==xdim)&&(ySize==ydim)&&(0==state))
{
// use this cell, fill it up totally
m_image = image;
name = image->GetFileName();
state = 2;
return this;
}
else
{
if ((xSize<=xdim) && (ySize<=ydim))
{
SplitCell(xSize,ySize);
BYTE flags = 0;
for (int x=0;x<4;x++)
{
CCell *cell = m_arrChildren[x]->FillCell(image);
flags |= (2==m_arrChildren[x]->state) << x;
if (cell)
{
if (15==flags)
state = 2;
else
state = 1;
return cell;
}
}
}
else
{
// Cannot fill this cell with something this big, unless I union with neighbors
return NULL;
}
}
return NULL;
}
int CCell::SplitCell(int xSize,int ySize)
{
if (!bSplit)
{
CPoint pt1 = GetPoint1();
int xdim = GetXDim();
int ydim = GetYDim();
int topleft = GetV1();
int bottomright = GetV2();
int middle = AddVert(pt1.x+xSize,pt1.y+ySize);
int middletop = AddVert(pt1.x+xSize,pt1.y);
int middleleft = AddVert(pt1.x,pt1.y+ySize);
int middlebottom = AddVert(pt1.x+xSize,pt1.y+ydim);
int middleright = AddVert(pt1.x+xdim,pt1.y+ySize);
CCell *cell = m_arrChildren[0] = new CCell;
cell->SetVerts(topleft,middle);
cell = m_arrChildren[1] = new CCell;
cell->SetVerts(middletop,middleright);
cell = m_arrChildren[2] = new CCell;
cell->SetVerts(middleleft,middlebottom);
cell = m_arrChildren[3] = new CCell;
cell->SetVerts(middle,bottomright);
bSplit = true;
}
return 4;
}
/*******************************************************************************
/* function name: BuildMegaTexture
/* description:
/*******************************************************************************/
int CTextureDoc::BuildMegaTexture(CCell *pCell,Image *pImage)
{
if (pCell)
{
if (pCell->m_image)
{
CPoint pt = pCell->GetPoint1();
pImage->Blt(*(pCell->m_image),pt.x,pt.y);
}
for (int x=0;x<4;x++)
BuildMegaTexture(pCell->m_arrChildren[x],pImage);
}
return 1;
}
/*******************************************************************************
/* function name: ConstructPage
/* description:
/*******************************************************************************/
int CTextureDoc::ConstructPage(CCell *pCell,Stuff::Page *page)
{
if (NULL == pCell)
return 0;
if (pCell->m_image)
// Acutally m_image is already deleted by now so I can't use it
{
char name[MAX_PATH];
_splitpath(pCell->name,NULL,NULL,name,NULL);
CString str;
CPoint pt = pCell->GetPoint1();
str.Format("%d %d",pt.x,pt.y);
page->SetEntry(name,str);
}
int count = 1;
for (int x=0;x<4;x++)
{
count += ConstructPage(pCell->m_arrChildren[x],page);
}
return count;
}
/*******************************************************************************
/* function name: ArrangeTextures
/* description:
/*******************************************************************************/
Image *CTextureDoc::ArrangeTextures(Stuff::Page *mega_page)
{
CMapStringToPtr mapImages;
int xSize=0,ySize=0;
Stuff::Page::NoteIterator *notes = mega_page->MakeNoteIterator();
Stuff::Note *note;
CCell *pCell = NULL;
int minBpp = 0;
while (NULL != (note=notes->ReadAndNext()))
{
const char *entry;
note->GetEntry(&entry);
if (stricmp(note->GetName(),"PageSize")==0)
{
sscanf(entry,"%d %d",&xSize,&ySize);
pCell = new CCell;
pCell->CreateCell(xSize,ySize);
}
else
{
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CString value;
CString name = note->GetName();
name.MakeLower();
if (!pApp->m_mapHintParams.Lookup(name,value))
{
//This is probably a valid texture name/location
const char *entry;
note->GetEntry(&entry);
int xpos,ypos;
if (2==sscanf(entry,"%d %d",&xpos,&ypos))
{
// This texture has already been created
delete pCell;
return NULL;
}
CString imagename = note->GetName();
CString path = "content\\textures\\"+imagename;
Image *image = new Image;
CString fullname = path+".png";
if (gos_DoesFileExist(fullname))
{
image->Load((char *)(LPCTSTR)fullname);
}
else
{
fullname = path+".tga";
if (gos_DoesFileExist(fullname))
{
image->Load((char *)(LPCTSTR)fullname);
}
}
int bpp = image->GetBpp();
if (bpp>minBpp)
minBpp = bpp;
RGBMask mask;
if(32 == bpp)
mask.Set(0x00ff0000,0x0000ff00,0x000000ff,0xff000000);
else
mask.Set(0x00ff0000,0x0000ff00,0x000000ff);
image->MaskTo(mask);
Verify(pCell);
CCell *cell = pCell->FillCell(image);
if (NULL == cell)
{
CString str;
str.Format("Could not fit texture %s",imagename);
MessageBox(NULL,str,"Fill Cell",MB_OK);
}
mapImages[imagename] = image;
}
}
}
delete notes;
Image *mega_image = new Image;
mega_image->CreateSolid(xSize,ySize,ImgRGBColor(0xff,0xff,0xff,0xff),ITYPE_RGB,minBpp);
BuildMegaTexture(pCell,mega_image);
POSITION pos = mapImages.GetStartPosition();
while (pos)
{
CString imagename;
LPVOID lpvoid;
mapImages.GetNextAssoc(pos,imagename,lpvoid);
Image *pImage = (Image *)lpvoid;
delete pImage;
}
mapImages.RemoveAll();
ConstructPage(pCell,mega_page);
delete pCell;
if (24 == minBpp)
{
mega_page->SetEntry("Format","Solid");
}
RGBMask mask;
if(32 == minBpp)
mask.Set(0x00ff0000,0x0000ff00,0x000000ff,0xff000000);
else
mask.Set(0x00ff0000,0x0000ff00,0x000000ff);
mega_image->MaskTo(mask);
return mega_image;
}
/*******************************************************************************
/* function name: LoadTexture
/* description: Load texture into an Image object
/*******************************************************************************/
Image *CTextureDoc::LoadTexture(Stuff::Page *page)
{
CString imagename = page->GetName();
const char *entry;
if (page->GetEntry("Alias",&entry))
{
imagename = entry;
}
Image *pImage = new Image;
CString path = "content\\textures\\"+imagename;
CString fullname = path+".png";
if (gos_DoesFileExist(fullname))
{
pImage->Load((char *)(LPCTSTR)fullname);
}
else
{
fullname = path+".tga";
if (gos_DoesFileExist(fullname))
{
pImage->Load((char *)(LPCTSTR)fullname);
}
else
{
delete pImage;
return NULL;
}
}
// Default Format entry to Solid if image doesn't have alpha channel
if (!page->GetEntry("Format",&entry))
{
if (pImage->GetBpp()==24)
page->SetEntry("Format","Solid");
}
RGBMask mask;
if(pImage->GetBpp()==32)
mask.Set(0x00ff0000,0x0000ff00,0x000000ff,0xff000000);
else
mask.Set(0x00ff0000,0x0000ff00,0x000000ff);
pImage->MaskTo(mask);
return pImage;
}
/*******************************************************************************
/* function name: OnCloseDocument
/* description:
/*******************************************************************************/
void CTextureDoc::OnCloseDocument()
{
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
POSITION pos = pApp->m_pMainDoc->GetFirstDocPosition();
while (pos)
{
CMultitronDoc *pDoc = (CMultitronDoc *)pApp->m_pMainDoc->GetNextDoc(pos);
pDoc->CloseTexture(this);
}
ClearAllPages();
CDocument::OnCloseDocument();
}
/*******************************************************************************
/* function name: ClearAllPages
/* description: Deleted all hosted hint pages and their image objects
/*******************************************************************************/
void CTextureDoc::ClearAllPages()
{
SaveModified();
m_listPages.RemoveAll();
m_listFlags.RemoveAll();
POSITION pos = m_listImages.GetHeadPosition();
while (pos)
{
Image *pImage = (Image *)m_listImages.GetNext(pos);
if (pImage)
delete pImage;
}
m_listImages.RemoveAll();
}
/*******************************************************************************
/* function name: GetCount
/* description: Return the number of hosted hint pages
/*******************************************************************************/
int CTextureDoc::GetCount()
{
return m_listPages.GetCount();
}
/*******************************************************************************
/* function name: GetPage
/* description: Return the hint page at index i
/*******************************************************************************/
Stuff::Page *CTextureDoc::GetPage(int i)
{
POSITION pos = m_listPages.FindIndex(i);
if (pos)
return (Stuff::Page *)m_listPages.GetAt(pos);
return NULL;
}
/*******************************************************************************
/* function name: GetImage
/* description: Return the texture image of hint page at index i
/*******************************************************************************/
Image *CTextureDoc::GetImage(int i)
{
POSITION pos = m_listImages.FindIndex(i);
if (pos)
return (Image *)m_listImages.GetAt(pos);
return NULL;
}
/*******************************************************************************
/* function name: SetImage
/* description: Set image object for hint page at index i
/*******************************************************************************/
void CTextureDoc::SetImage(Image* pImage, int i)
{
POSITION pos = m_listImages.FindIndex(i);
if (pos) {
Image* oldImage = (Image *)m_listImages.GetAt(pos);
m_listImages.SetAt(pos, pImage);
delete oldImage;
}
}
/*******************************************************************************
/* function name: ReplacePage
/* description: Replace hint page at index i
/*******************************************************************************/
int CTextureDoc::ReplacePage(Stuff::Page *oldpage,Stuff::Page *newpage)
{
POSITION pos = m_listPages.Find(oldpage);
if (pos)
{
m_listPages.SetAt(pos,newpage);
return 1;
}
return 0;
}
/*******************************************************************************
/* function name: SaveModified
/* description: Called when hint page is being closed without being saved
/*******************************************************************************/
BOOL CTextureDoc::SaveModified()
{
int count = 0;
POSITION pos = m_listPages.GetHeadPosition();
while (pos)
{
DWORD flags = 0;
POSITION fPos = m_listFlags.FindIndex(count);
if (fPos)
{
flags = (DWORD)m_listFlags.GetAt(fPos);
}
Stuff::Page *page = (Stuff::Page *)m_listPages.GetNext(pos);
if (flags & FLAG_MEGATEXTURE)
{
if (flags & FLAG_TEXTUREMODIFIED)
{
// Save the image?
CString str;
str.Format("Megatexture: %s created. Save Now?",page->GetName());
CString str1;
str1.Format("%s Image",page->GetName());
if (IDYES==AfxGetMainWnd()->MessageBox(str,str1,MB_YESNO))
{
CString path = "content\\textures\\";
path += page->GetName();
path += ".png";
POSITION iPos = m_listImages.FindIndex(count);
if (iPos)
{
Image *pImage = (Image *)m_listImages.GetAt(iPos);
if (pImage)
pImage->SavePng((char *)(LPCTSTR)path);
}
flags &= ~FLAG_TEXTUREMODIFIED;
m_listFlags.SetAt(fPos,(LPVOID)flags);
}
}
}
count++;
}
return CDocument::SaveModified();
}
/*******************************************************************************
/* function name: OnFileSave
/* description:
/*******************************************************************************/
void CTextureDoc::OnFileSave()
{
SaveModified();
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
pApp->OnFileSave();
}
/*******************************************************************************
/* function name: SetDefaults
/* description: Set default values for entries in the hint page
/*******************************************************************************/
int CTextureDoc::SetDefaults(Stuff::Page *page, Image* pImage)
{
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
POSITION pos = pApp->m_mapHintParams.GetStartPosition();
while (pos)
{
CString value,key;
pApp->m_mapHintParams.GetNextAssoc(pos,key,value);
value.MakeLower();
bool bSet = true;
const char *entry;
if (page->GetEntry(key,&entry))
{
CString strEntry(entry);
strEntry.MakeLower();
// Check that the entry is valid
if (value.Find(strEntry)>=0)
bSet = false;
}
if (bSet)
{
// Set to default
int i = value.Find('|');
if (i>0)
{
value = value.Left(i);
}
page->SetEntry(key,value);
if (stricmp(key, "format")==0 &&
pImage && !pImage->HasAlpha())
page->SetEntry("format", "solid");
CString name = page->GetName();
if (stricmp(key, "mipmap")==0 &&
name.GetAt(name.GetLength()-1) <= '9' &&
name.GetAt(name.GetLength()-1) >= '0')
page->SetEntry("mipmap", "explicit");
}
}
return 0;
}
@@ -0,0 +1,102 @@
#if !defined(AFX_TEXTUREDOC_H__53F452CA_7721_4EF0_B2F6_5D28A6CAFFD2__INCLUDED_)
#define AFX_TEXTUREDOC_H__53F452CA_7721_4EF0_B2F6_5D28A6CAFFD2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TextureDoc.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CTextureDoc document
#include <imagelib\image.h>
#include <stuff\stuff.hpp>
class CCell
{
int AddVert(int,int);
int GetXDim();
int GetYDim();
int V1,V2; // Upper left and lower right index in vertex array
bool bSplit;
public:
CCell();
~CCell();
Image *m_image;
CCell *m_arrChildren[4];
CString name;
int state; // 0 == empty, 1 == partial, 2==full
int CreateCell(int,int);
CCell *FillCell(Image *);
int SplitCell(int,int);
int SetVerts(int,int);
int GetV1();
int GetV2();
CPoint GetPoint1();
};
class CTextureDoc : public CDocument
{
protected:
CTextureDoc(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CTextureDoc)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTextureDoc)
public:
virtual void Serialize(CArchive& ar); // overridden for document i/o
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual void SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU = TRUE);
virtual void OnCloseDocument();
protected:
virtual BOOL OnNewDocument();
virtual BOOL SaveModified();
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CTextureDoc();
Stuff::Page *GetPage(int);
Image *GetImage(int);
void SetImage(Image* pImage, int i);
int ReplacePage(Stuff::Page *,Stuff::Page *);
int GetCount();
Image *LoadTexture(Stuff::Page *);
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
CPtrList m_listFlags;
CPtrList m_listPages;
CPtrList m_listImages;
int ConstructPage(CCell *pCell,Stuff::Page *page);
int BuildMegaTexture(CCell *pCell,Image *pImage);
Image *ArrangeTextures(Stuff::Page *);
int SetDefaults(Stuff::Page *page, Image *pImage);
void ClearAllPages();
//Stuff::Page *m_pPage;
//{{AFX_MSG(CTextureDoc)
afx_msg void OnFileSave();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TEXTUREDOC_H__53F452CA_7721_4EF0_B2F6_5D28A6CAFFD2__INCLUDED_)
@@ -0,0 +1,602 @@
// TextureView.cpp : implementation file
//
#include "stdafx.h"
#include "Multitron.h"
#include "TextureView.h"
#include "TextureDoc.h"
#include "MainFrm.h"
#include <GameOs\TooLOS.hpp>
#include <imagelib\image.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTextureView
IMPLEMENT_DYNCREATE(CTextureView, CView)
CTextureView::CTextureView()
{
}
CTextureView::~CTextureView()
{
}
BEGIN_MESSAGE_MAP(CTextureView, CView)
//{{AFX_MSG_MAP(CTextureView)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_LBN_SELCHANGE(IDC_LIST_PAGE, OnSelchangeListPage)
ON_CBN_SELENDOK(IDC_COMBO_VALUE, OnSelendokComboValue)
ON_BN_CLICKED(IDC_APPLY, OnApply)
ON_BN_CLICKED(IDC_APPLY_ALIAS, OnApplyAlias)
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(ID_ADD_MIPMAP,ID_ADD_RESOURCIFY,OnAddMenuItems)
ON_UPDATE_COMMAND_UI(IDC_APPLY, OnUpdateUI)
ON_UPDATE_COMMAND_UI(IDC_APPLY_ALIAS, OnUpdateUI)
ON_UPDATE_COMMAND_UI(IDC_EDIT_PAGENAME, OnUpdateUI)
ON_UPDATE_COMMAND_UI(IDC_EDIT_ALIASNAME, OnUpdateUI)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTextureView drawing
void CTextureView::OnDraw(CDC* pDC)
{
}
/////////////////////////////////////////////////////////////////////////////
// CTextureView diagnostics
#ifdef _DEBUG
void CTextureView::AssertValid() const
{
CView::AssertValid();
}
void CTextureView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTextureView message handlers
BOOL CTextureView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
int CTextureView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CWnd *pFrame = GetParent();
if (!m_wndDlgBar.Create(pFrame,IDD_TEXTURE_PROPERTIES,CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY,0))
{
return false;
}
return 0;
}
void CTextureView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
/*******************************************************************************
/* function name: OnInitialUpdate
/* description: Called when window is displayed for the first time,
/* set up window size and position
/*******************************************************************************/
void CTextureView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CRect rc;
m_wndDlgBar.GetClientRect(&rc);
rc.left +=470;
rc.right +=490;
rc.bottom =580;
CWnd *pWnd = GetParent();
pWnd->MoveWindow(rc);
}
/*******************************************************************************
/* function name: OnUpdate
/* description: Called when hosted documents are updated
/*******************************************************************************/
void CTextureView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
Stuff::Page *pPage = NULL;
Image *pImage = NULL;
// If we only have one item then select it
if (pDoc->GetCount() == 1)
{
pPage = pDoc->GetPage(0);
pImage = pDoc->GetImage(0);
}
CEdit *pAliasEdit = (CEdit *)m_wndDlgBar.GetDlgItem(IDC_EDIT_ALIASNAME);
pAliasEdit->SetWindowText("");
CEdit *pEdit = (CEdit *)m_wndDlgBar.GetDlgItem(IDC_EDIT_PAGENAME);
pEdit->SetWindowText("");
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
pList->ResetContent();
//Fill in the page properties list
if (pPage)
{
CString pagename = pPage->GetName();
pEdit->SetWindowText(pagename);
CString str;
Stuff::Page::NoteIterator *notes = pPage->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
const char *entry;
CString name = note->GetName();
note->GetEntry(&entry);
str.Format("%s=%s",name,entry);
int index = pList->AddString(str);
pList->SetItemData(index,(DWORD)note);
if (0==stricmp(name,"alias"))
{
pAliasEdit->SetWindowText(entry);
}
}
delete notes;
if (NULL == pHint)
pList->SetCurSel(0);
else {
CPtrList* list = (CPtrList*)pHint;
Stuff::Note* note = (Stuff::Note*)list->GetHead();
CString name = note->GetName();
name.MakeLower();
int index = pList->FindString(0, name);
pList->SetCurSel(index);
}
}
else
{
// Display comparison of all pages
CMapStringToString map;
CMapStringToString mapRef;
for (int x=0;x<pDoc->GetCount();x++)
{
Stuff::Page *page = pDoc->GetPage(x);
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
const char *entry;
CString name = note->GetName();
note->GetEntry(&entry);
name.MakeLower();
CString value;
if (map.Lookup(name,value))
{
mapRef[name] = "yes";
if (value.CompareNoCase(entry)==0)
{
// Use this value
}
else
{
map[name] = "";
}
}
else
{
if (x==0)
map[name] = entry;
}
}
delete notes;
}
POSITION pos = map.GetStartPosition();
while (pos)
{
CString key,value;
map.GetNextAssoc(pos,key,value);
if (mapRef[key] == "yes") {
CString str;
str.Format("%s=%s",key,value);
pList->AddString(str);
}
}
}
OnSelchangeListPage();
}
/*******************************************************************************
/* function name: OnAdd
/* description: Pop up a list of possible entries to added to the hint page
/*******************************************************************************/
void CTextureView::OnAdd()
{
CMenu *pMenu = AfxGetMainWnd()->GetMenu();
CMenu *pSubMenu = pMenu->GetSubMenu(3);
pSubMenu = pSubMenu->GetSubMenu(0);
CRect rc;
m_wndDlgBar.GetDlgItem(IDC_ADD)->GetWindowRect(&rc);
CPoint point;
point.x = rc.right;
point.y = rc.top;
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,point.x, point.y, this, NULL);
}
/*******************************************************************************
/* function name: OnDelete
/* description: Delete seleted entries from the hint page
/*******************************************************************************/
void CTextureView::OnDelete()
{
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
int index = pList->GetCurSel();
if (index < 0)
return;
CString str;
pList->GetText(index, str);
str = str.Left(str.Find("="));
pList->DeleteString(index);
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
int count = pDoc->GetCount();
for (int x=0;x<count;x++)
{
Stuff::Page *page = pDoc->GetPage(x);
CString str1 = str;
str1.MakeLower();
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CString value;
if (pApp->m_mapHintParams.Lookup(str1,value))
{
if (value.GetLength())
{
page->DeleteNote(str);
pDoc->UpdateAllViews(NULL);
}
}
}
}
/*******************************************************************************
/* function name: OnSelchangeListPage
/* description: Highlight in the entry list has changed, update the list of
/* possible entry values
/*******************************************************************************/
void CTextureView::OnSelchangeListPage()
{
CComboBox *pCombo = (CComboBox *)m_wndDlgBar.GetDlgItem(IDC_COMBO_VALUE);
pCombo->ResetContent();
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
int index = pList->GetCurSel();
if (index>=0)
{
CString notename;
CString entry;
Stuff::Note *note = (Stuff::Note *)pList->GetItemData(index);
if (note)
{
Check_Object(note);
notename = note->GetName();
notename.MakeLower();
const char *e;
note->GetEntry(&e);
entry = e;
}
else
{
pList->GetText(index,notename);
int i = notename.Find('=');
if (i>=0)
{
entry = notename;
entry.Delete(0,i+1);
notename = notename.Left(i);
}
}
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
CString value;
if (pApp->m_mapHintParams.Lookup(notename,value))
{
while (value.GetLength())
{
CString addstr;
int i = value.Find('|');
if (i>=0)
{
addstr = value.Left(i);
value.Delete(0,i+1);
}
else
{
addstr = value;
value.Empty();
}
int index = pCombo->AddString(addstr);
if (0==stricmp(entry,addstr))
{
pCombo->SetCurSel(index);
}
}
}
}
}
/*******************************************************************************
/* function name: OnSelendokComboValue
/* description: User selects a value for the highlight entry
/*******************************************************************************/
void CTextureView::OnSelendokComboValue()
{
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
int index = pList->GetCurSel();
Stuff::Note *note = (Stuff::Note *)pList->GetItemData(index);
CComboBox *pCombo = (CComboBox *)m_wndDlgBar.GetDlgItem(IDC_COMBO_VALUE);
index = pCombo->GetCurSel();
if (CB_ERR != index)
{
CString str;
CString selname;
pCombo->GetLBText(index,str);
if (note)
{
note->SetEntry(str);
selname = note->GetName();
}
else
{
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
int x = pList->GetCurSel();
CString name;
pList->GetText(x,name);
x = name.Find('=');
if (x>=0)
{
name = name.Left(x);
}
selname = name;
for (x=0;x<pDoc->GetCount();x++)
{
Stuff::Page *page = pDoc->GetPage(x);
page->SetEntry(name,str);
}
}
pDoc->UpdateAllViews(NULL);
CListBox *pList = (CListBox *)m_wndDlgBar.GetDlgItem(IDC_LIST_PAGE);
for (int x=0;x<pList->GetCount();x++)
{
pList->GetText(x,str);
int i = str.Find('=');
if (i>0)
{
str = str.Left(i);
}
if (str.CompareNoCase(selname)==0) {
pList->SetCurSel(x);
OnSelchangeListPage();
}
}
}
}
/*******************************************************************************
/* function name: OnAddMenuItems
/* description: Add seleted entry to the hint page with default value set
/*******************************************************************************/
void CTextureView::OnAddMenuItems(UINT nID)
{
CMenu *pMenu = AfxGetMainWnd()->GetMenu();
CMenu *pSubMenu = pMenu->GetSubMenu(3);
pSubMenu = pSubMenu->GetSubMenu(0);
CString str;
pSubMenu->GetMenuString(nID,str,MF_BYCOMMAND);
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
int count = pDoc->GetCount();
for (int x=0;x<count;x++)
{
Stuff::Page *page = pDoc->GetPage(x);
CStringList list;
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while ((note = notes->ReadAndNext()) != NULL)
{
CString name = note->GetName();
name.MakeLower();
list.AddTail(name);
}
delete notes;
CString str1 = str;
str1.MakeLower();
if (list.Find(str1))
continue;
// We now have a valid entry called str that we want to add
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
// Get the default value (first in list)
CString value = pApp->m_mapHintParams[str1];
int index = value.Find('|');
// Add to the file
if (index>=0)
{
value = value.Left(index);
note = page->AddNote(str);
note->SetEntry(value);
CPtrList list;
list.AddHead((LPVOID)note);
pDoc->UpdateAllViews(NULL,0,&list);
}
}
}
/*******************************************************************************
/* function name: OnApply
/* description: Change the hint page name, and rename the texture file name
/*******************************************************************************/
void CTextureView::OnApply()
{
CEdit *pEdit = (CEdit *)m_wndDlgBar.GetDlgItem(IDC_EDIT_PAGENAME);
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
// Only doable if only one hint it selected
if (pDoc->GetCount() == 1)
{
Stuff::Page* page = pDoc->GetPage(0);
if (page)
{
Stuff::NotationFile *pFile = page->GetNotationFile();
CString newname;
pEdit->GetWindowText(newname);
Stuff::Page *newpage = pFile->FindPage(newname);
if (NULL != newpage)
{
CString str;
str.Format("%s Already Exists",newname);
MessageBox(str,"Rename",MB_OK);
return;
}
newpage = pFile->AddPage(newname);
Stuff::Page::NoteIterator *notes = page->MakeNoteIterator();
Stuff::Note *note;
while (NULL != (note = notes->ReadAndNext()))
{
const char *entry;
CString name = note->GetName();
note->GetEntry(&entry);
newpage->AppendEntry(name,entry);
}
delete notes;
// Rename the texture file
if (::gos_DoesFileExist(CString("content\\textures\\")+page->GetName()+".png"))
if (IDYES == MessageBox("Do you want to rename the texture file?",newpage->GetName(),MB_YESNO))
::gos_RenameFile(CString("content\\textures\\")+page->GetName()+".png",
CString("content\\textures\\")+newpage->GetName()+".png");
else if (::gos_DoesFileExist(CString("content\\textures\\")+page->GetName()+".tga"))
if (IDYES == MessageBox("Do you want to rename the texture file?",newpage->GetName(),MB_YESNO))
::gos_RenameFile(CString("content\\textures\\")+page->GetName()+".tga",
CString("content\\textures\\")+newpage->GetName()+".tga");
pFile->DeletePage(page->GetName());
pDoc->ReplacePage(page,newpage);
pDoc->UpdateAllViews(NULL);
// Refresh all the build files views
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
pApp->RefreshFiles();
}
}
}
extern bool g_bWarnDuplicateAlias;
/*******************************************************************************
/* function name: OnApplyAlias
/* description: Change the alias name
/*******************************************************************************/
void CTextureView::OnApplyAlias()
{
CEdit *pEdit = (CEdit *)m_wndDlgBar.GetDlgItem(IDC_EDIT_ALIASNAME);
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
// Only doable if only one hint it selected
if (pDoc->GetCount() == 1)
{
Stuff::Page* page = pDoc->GetPage(0);
if (page)
{
CString str;
pEdit->GetWindowText(str);
if (str.GetLength())
{
page->SetEntry("Alias",str);
page->SetEntry("Resourcify","false");
Stuff::NotationFile *pFile = page->GetNotationFile();
Check_Object(pFile);
Stuff::Page *aliasPage = pFile->FindPage(str);
if (!aliasPage)
{
if (IDYES == MessageBox("Do you want to create the alias hint page?",str,MB_YESNO))
{
aliasPage = pFile->SetPage(str);
}
}
// Reload the texture image
if (pDoc->GetCount() == 1)
{
pDoc->SetImage(pDoc->LoadTexture(page), 0);
}
}
else
{
page->DeleteNote("Alias");
page->SetEntry("Resourcify","true");
}
pDoc->UpdateAllViews(NULL);
// Refresh all the build files views
g_bWarnDuplicateAlias = true;
CMultitronApp *pApp = (CMultitronApp *)AfxGetApp();
pApp->RefreshFiles();
}
}
}
/*******************************************************************************
/* function name: OnUpdateUI
/* description:
/*******************************************************************************/
void CTextureView::OnUpdateUI(CCmdUI* pCmdUI)
{
CTextureDoc* pDoc = (CTextureDoc *)GetDocument();
pCmdUI->Enable(pDoc->GetCount() == 1);
}
@@ -0,0 +1,70 @@
#if !defined(AFX_TEXTUREVIEW_H__A7F610D8_504C_49CE_86EE_F49228996785__INCLUDED_)
#define AFX_TEXTUREVIEW_H__A7F610D8_504C_49CE_86EE_F49228996785__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TextureView.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CTextureView view
class CTextureView : public CView
{
protected:
CTextureView(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CTextureView)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTextureView)
public:
virtual void OnInitialUpdate();
protected:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
//}}AFX_VIRTUAL
// Implementation
protected:
CDialogBar m_wndDlgBar;
//CBitmap m_BackBuffer;
void OnAddMenuItems(UINT nID);
virtual ~CTextureView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CTextureView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnAdd();
afx_msg void OnDelete();
afx_msg void OnSelchangeListPage();
afx_msg void OnSelendokComboValue();
afx_msg void OnApply();
afx_msg void OnApplyAlias();
afx_msg void OnUpdateUI(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TEXTUREVIEW_H__A7F610D8_504C_49CE_86EE_F49228996785__INCLUDED_)
@@ -0,0 +1,513 @@
{\rtf1\ansi \deff0\deflang1033{\fonttbl{\f0\froman\fcharset0\fprq2 Tms Rmn{\*\falt Times New Roman};}{\f1\froman\fcharset2\fprq2 Symbol;}{\f2\fswiss\fcharset0\fprq2 Helv{\*\falt Helvetica};}
{\f3\fmodern\fcharset0\fprq1 Courier;}{\f4\froman\fcharset0\fprq2 Times New Roman;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f6\froman\fcharset0\fprq2 MS Serif;}{\f7\fswiss\fcharset0\fprq2 MS Sans Serif;}{\f8\froman\fcharset0\fprq2 Times;}
{\f9\fswiss\fcharset0\fprq2 Helvetica{\*\falt Arial};}{\f10\fswiss\fcharset0\fprq2 System;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f12\fswiss\fcharset0\fprq2 AvantGarde;}{\f13\froman\fcharset0\fprq2 ITC Bookman;}
{\f14\fswiss\fcharset0\fprq2 Helvetica-Narrow;}{\f15\froman\fcharset0\fprq2 NewCenturySchlbk;}{\f16\froman\fcharset0\fprq2 Palatino;}{\f17\froman\fcharset0\fprq2 ZapfChancery;}{\f18\fdecor\fcharset2\fprq2 ZapfDingbats;}{\f19\fnil\fcharset2\fprq2 Marlett;}
{\f20\fmodern\fcharset0\fprq1 Lucida Console;}{\f21\fnil\fcharset2\fprq2 Wingdings;}{\f22\fswiss\fcharset0\fprq2 Arial Black;}{\f23\froman\fcharset0\fprq2 Garamond;}{\f24\froman\fcharset0\fprq2 Bookman Old Style;}{\f25\fswiss\fcharset0\fprq2 Tahoma;}
{\f26\fmodern\fcharset2\fprq1 MS LineDraw;}{\f27\fdecor\fcharset0\fprq2 Algerian;}{\f28\fswiss\fcharset0\fprq2 Arial Rounded MT Bold;}{\f29\fdecor\fcharset0\fprq2 Braggadocio;}{\f30\fswiss\fcharset0\fprq2 Britannic Bold;}
{\f31\fscript\fcharset0\fprq2 Brush Script MT;}{\f32\fswiss\fcharset0\fprq2 Century Gothic;}{\f33\fdecor\fcharset0\fprq2 Colonna MT;}{\f34\fdecor\fcharset0\fprq2 Desdemona;}{\f35\froman\fcharset0\fprq2 Footlight MT Light;}
{\f36\fswiss\fcharset0\fprq2 Impact;}{\f37\fdecor\fcharset0\fprq2 Kino MT;}{\f38\froman\fcharset0\fprq2 Wide Latin;}{\f39\fscript\fcharset0\fprq2 Matura MT Script Capitals;}{\f40\fdecor\fcharset0\fprq2 Playbill;}{\f41\fswiss\fcharset0\fprq2 Arial Narrow;}
{\f42\fmodern\fcharset0\fprq1 Lucida Sans Typewriter;}{\f43\fnil\fcharset2\fprq2 MSIcons;}{\f44\fswiss\fcharset0\fprq2 Abadi MT Condensed;}{\f45\froman\fcharset2\fprq2 Wingdings 2;}{\f46\froman\fcharset2\fprq2 Wingdings 3;}
{\f47\fscript\fcharset0\fprq2 Comic Sans MS;}{\f48\fswiss\fcharset0\fprq2 Verdana;}{\f49\froman\fcharset2\fprq2 Webdings;}{\f50\froman\fcharset255\fprq2 Roman;}{\f51\fscript\fcharset255\fprq2 Script;}{\f52\fmodern\fcharset255\fprq2 Modern;}
{\f53\fswiss\fcharset0\fprq1 MS Dialog;}{\f54\froman\fcharset0\fprq2 New York;}{\f55\fswiss\fcharset0\fprq2 Geneva;}{\f56\fmodern\fcharset0\fprq1 Fixedsys;}{\f57\fmodern\fcharset255\fprq1 Terminal;}{\f58\fswiss\fcharset0\fprq2 Small Fonts;}
{\f59\fswiss\fcharset0\fprq2 MS Dialog Light;}{\f60\fswiss\fcharset0\fprq2 MS SystemEx;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar \fs20 \snext0
Normal;}{\s1\sb240\nowidctlpar \b\f2\ul \sbasedon0\snext0 heading 1;}{\s2\sb120\nowidctlpar \b\f2 \sbasedon0\snext0 heading 2;}{\s3\li360\nowidctlpar \b \sbasedon0\snext17 heading 3;}{\s4\li360\nowidctlpar \ul \sbasedon0\snext17 heading 4;}{
\s5\li720\nowidctlpar \b\fs20 \sbasedon0\snext17 heading 5;}{\s6\li720\nowidctlpar \fs20\ul \sbasedon0\snext17 heading 6;}{\s7\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 7;}{\s8\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 8;}{
\s9\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive\f0\fs16\up6\lang1033 \sbasedon10 footnote reference;}{\s16\nowidctlpar \fs20 \sbasedon0\snext16 footnote text;}{
\s17\li720\nowidctlpar \fs20 \sbasedon0\snext17 Normal Indent;}{\s18\fi-240\li480\sb80\nowidctlpar\tx480 \f9 \sbasedon0\snext18 nscba;}{\s19\fi-240\li240\sa20\nowidctlpar \f9 \sbasedon0\snext19 j;}{\s20\li480\sa20\nowidctlpar \f9 \sbasedon0\snext20 ij;}{
\s21\sb80\sa20\nowidctlpar \f9 \sbasedon0\snext21 btb;}{\s22\fi-240\li2400\sb20\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext22 ctcb;}{\s23\fi-240\li480\sa40\nowidctlpar\tx480 \f9 \sbasedon0\snext23 ns;}{\s24\sa120\nowidctlpar \f9\fs28 \sbasedon0\snext24
TT;}{\s25\fi-240\li2400\sa20\nowidctlpar \f9 \sbasedon0\snext25 crtj;}{\s26\fi-240\li480\nowidctlpar\tx480 \f9 \sbasedon0\snext26 nsca;}{\s27\sa20\nowidctlpar \f9 \sbasedon0\snext27 bt;}{\s28\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext28 Hf;}{
\s29\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext29 Hs;}{\s30\li480\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext30 RT;}{\s31\fi-2160\li2160\sb240\sa80\nowidctlpar\tx2160 \f9 \sbasedon0\snext31 c;}{\s32\li2160\sa20\nowidctlpar \f9 \sbasedon0\snext32
ct;}{\s33\li240\sa20\nowidctlpar \f9 \sbasedon0\snext33 it;}{\s34\li480\nowidctlpar \f9\fs20 \sbasedon0\snext34 nsct;}{\s35\fi-160\li400\sb80\sa40\nowidctlpar \f9 \sbasedon0\snext35 nscb;}{\s36\fi-2640\li2880\sb120\sa40\nowidctlpar\brdrb\brdrs\brdrw15
\brdrbtw\brdrs\brdrw15 \tx2880 \f9 \sbasedon0\snext36 HC2;}{\s37\fi-2640\li2880\sb120\sa20\nowidctlpar\tx2880 \f9 \sbasedon0\snext37 C2;}{\s38\fi-240\li2400\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext38 ctc;}{\s39\li2160\sb160\nowidctlpar \f9
\sbasedon0\snext39 crt;}{\s40\li480\sb20\sa40\nowidctlpar \f9 \sbasedon0\snext40 or;}{\s41\fi-259\li360\sb40\sa40\nowidctlpar\tx360 \f7\fs20 \sbasedon0\snext41 Ln1;}{\s42\li115\sb80\sa80\nowidctlpar \f7\fs20 \sbasedon0\snext0 *Intro;}{
\s43\li115\sb80\sa80\keepn\nowidctlpar \b\f7 \sbasedon3\snext42 *Title;}{\s44\fi-245\li360\sb80\nowidctlpar \f7\fs20 \snext44 *Jl;}{\s45\li360\sb40\sa40\nowidctlpar \f7\fs20 \snext0 Lp1;}{\s46\fi-1800\li1915\sb60\sl-240\slmult1\nowidctlpar\tx1915
\f7\fs20 \sbasedon0\snext46 Tph;}{\s47\li115\sb120\sa80\nowidctlpar \b\f7\fs20 \snext41 Proch;}{\*\cs48 \additive\super \sbasedon10 endnote reference;}}{\info{\title AFXCORE}{\subject MFC Core RTF Help}{\author AFX}{\creatim\yr1992\mo10\dy7\hr11\min4}
{\version1}{\edmins1}{\nofpages0}{\nofwords0}{\nofchars0}{\vern49213}}\widowctrl\ftnbj\aenddoc\hyphcaps0 \fet0\sectd \linex576\endnhere {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang
{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang
{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \fs20
{\cs15\fs16\up6 #{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 #} main_index}}{\fs16\up6 }{\b\f2\fs24\up6 <<YourApp>> Help Index}{\b\f2
\par }{\f9
\par }{\b\f2 How To ...
\par }{\f2 \tab <<add your application-specific "how to" topics here>>}{\f9\ulw
\par
\par }{\b\f2 Commands
\par }{\f2 \tab }{\f2\uldb File menu}{\v\f2 menu_file}{\f2
\par \tab }{\f2\uldb Edit menu}{\v\f2 menu_edit}{\f2\uldb
\par }{\f2 \tab }{\f2\uldb Record menu}{\v\f2 menu_record}{\f2
\par \tab }{\f2\uldb View menu}{\v\f2 menu_view}{\f2
\par \tab }{\f2\uldb Window menu}{\v\f2 menu_window}{\f2
\par \tab }{\f2\uldb Help menu}{\v\f2 menu_help}{\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} menu_file}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $} File menu commands}}{\f2
}{\b\f2 File menu commands}{\f2
\par
\par The File menu offers the following commands:
\par
\par }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \intbl {\f2\uldb New}{\v\f2 HID_FILE_NEW}{\f2 \cell Creates a new document.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \intbl {\f2\uldb Open}{\v\f2
HID_FILE_OPEN}{\f2\uldb \cell }{\f2 Opens an existing document.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Close}{\v\f2 HID_FILE_CLOSE}{\f2\uldb \cell }{\f2 Closes an opened document.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Save}{
\v\f2 HID_FILE_SAVE}{\f2\uldb \cell }{\f2 Saves an opened document using the same file name.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Save As}{\v\f2 HID_FILE_SAVE_AS}{\f2\uldb \cell }{\f2 Saves an opened document to a specified file name.
\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Print}{\v\f2 HID_FILE_PRINT}{\f2\uldb \cell }{\f2 Prints a document.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Print Preview}{\v\f2 HID_FILE_PRINT_PREVIEW}{\f2\uldb \cell }{\f2
Displays the document on the screen as it would appear printed.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Print Setup}{\v\f2 HID_FILE_PRINT_SETUP}{\f2\uldb \cell }{\f2 Selects a printer and printer connection.\cell }\pard \intbl {\f2 \row
}\pard \intbl {\f2\uldb Send...}{\v\f2 HID_FILE_SEND_MAIL}{\f2\uldb \cell }{\f2 Sends the active document through electronic mail.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1302\cellx8622 \pard \intbl {\f2\uldb Exit}{\v\f2
HID_APP_EXIT}{\f2 \tab
\par }{\f2\uldb \cell }{\f2 Exits <<YourApp>>.\cell }\pard \intbl {\f2 \row }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} menu_edit}}{\b\f2 Edit menu commands}{\f2
\par
\par The Edit menu offers the following commands:
\par }\pard \fi-720\li720 {\f2
\par }\trowd \trgaph108\trleft-108 \cellx1497\cellx10212 \pard \intbl {\f2\uldb Undo}{\v\f2 HID_EDIT_UNDO}{\f2 \cell Reverse previous editing operation.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1497\cellx10212 \pard \intbl {\f2\uldb Cut
}{\v\f2 HID_EDIT_CUT}{\f2\uldb \cell }{\f2 Deletes data from the document and moves it to the clipboard.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Copy}{\v\f2 HID_EDIT_COPY}{\f2\uldb \cell }{\f2 Copies data from the document to the clipboard.
\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Paste}{\v\f2 HID_EDIT_PASTE}{\f2\uldb \cell }{\f2 Pastes data from the clipboard into the document.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Paste Link}{\v\f2 HID_EDIT_PASTE_LINK}{\f2\uldb
\cell }{\f2 Pastes from the clipboard a link to data in another application.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Insert New Object}{\v\f2\uldb HID_OLE_INSERT_NEW}{\f2\uldb \cell }{\f2
Inserts and embeds an object, such as a chart or an equation in a document.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1497\cellx10212 \pard \intbl {\f2\uldb Links}{\v\f2 HID_OLE_EDIT_LINKS}{\f2\uldb \cell }{\f2
List and edit links to embedded documents.\cell }\pard \intbl {\f2 \row }\pard \fi-720\li720 {\f2
\par }\pard {\f2 \tab \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} menu_view}}{\b\f2 View menu commands}{\f2
\par
\par The View menu offers the following commands:
\par
\par }\trowd \trgaph108\trleft-108 \cellx1272\cellx7452 \pard \intbl {\f2\uldb Toolbar}{\v\f2 HID_VIEW_TOOLBAR}{\f2\uldb \cell }{\f2 Shows or hides the toolbar.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1272\cellx7452 \pard \intbl {
\f2\uldb Status Bar}{\v\f2 HID_VIEW_STATUS_BAR}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Shows or hides the status bar.
\par }\pard \intbl {\f2 \cell }\pard \intbl {\f2 \row }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} menu_window}}{\b\f2 Window menu commands}{\f2
\par
\par The Window menu offers the following commands, which enable you to arrange multiple views of multiple documents in the application window:
\par
\par }\trowd \trgaph108\trleft-108 \cellx1572\cellx7752 \pard \intbl {\f2\uldb New Window}{\v\f2 HID_WINDOW_NEW}{\f2\uldb \cell }{\f2 Creates a new window that views the same document.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1572
\cellx7752 \pard \intbl {\f2\uldb Cascade}{\v\f2 HID_WINDOW_CASCADE}{\f2\uldb \cell }{\f2 Arranges windows in an overlapped fashion.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Tile}{\v\f2 HID_WINDOW_TILE}{\f2\uldb \cell }{\f2
Arranges windows in non-overlapped tiles.\cell }\pard \intbl {\f2 \row }\pard \intbl {\f2\uldb Arrange Icons}{\v\f2 HID_WINDOW_ARRANGE}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Arranges icons of closed windows.\cell }\pard \intbl {\f2 \row }\pard
\intbl {\f2\uldb Split}{\v\f2 HID_WINDOW_SPLIT}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Split the active window into panes.\cell }\pard \intbl {\f2 \row }\trowd \trgaph108\trleft-108 \cellx1572\cellx7752 \pard \intbl {\f2\uldb Window 1, 2, ...}{
\v\f2 HID_WINDOW_ALL}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Goes to specified window.\cell }\pard \intbl {\f2 \row }\pard \fi-720\li720 {\f2
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} menu_help}}{\b\f2 Help menu commands}{\f2
\par
\par The Help menu offers the following commands, which provide you assistance with this application:
\par
\par }\trowd \trgaph108\trleft-108 \cellx1077\cellx7257 \pard \intbl {\f2\uldb Help Topics}{\v\f2 HID_HELP_INDEX}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Offers you an index to topics on which you can get help.\cell }\pard \intbl {\f2 \row }\trowd
\trgaph108\trleft-108 \cellx1077\cellx7257 \pard \intbl {\f2\uldb About}{\v\f2 HID_APP_ABOUT}{\f2\uldb \cell }\pard \fi-720\li720\intbl {\f2 Displays the version number of this application.\cell }\pard \intbl {\f2 \row }\pard \fi-720\li720 {\f2
\par
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_NEW}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $}
File New command}}{\f2 }{\b\f2 New command (File menu)}{\f2
\par
\par Use this command to create a new document in <<YourApp>>. Select the type of new file you want to create in the }{\f2\uldb File New dialog box}{\v AFX_HIDD_NEWTYPEDLG}. {\f2 << R
emove previous sentence if your application supports only one document type. >>
\par
\par You can open an existing document with the }{\f2\uldb Open command}{\v HID_FILE_OPEN}{\f2 .
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc filenew.bmp\}
\par Keys:\tab CTRL+N
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_NEWTYPEDLG}}{\b\f2 File New dialog box
\par }{\f2
\par << Delete this help topic if your application supports only one document type. >>
\par
\par Specify the type of document you wish to create:
\par << List your application's document types here >>\page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_OPEN}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain
\s16 \fs20 {\cs15\fs16\up6 $} File Open command}}{\f2 }{\b\f2 Open command (File menu)}{\f2
\par
\par Use this command to open an existing document in a new window. You can open multiple documents at once. Use the Window menu to switch among the multiple open documents. See }{\f2\uldb Window 1, 2, ... command}{\v\f2 HID_WINDOW_ALL}{\f2 .
\par
\par You can create new documents with the }{\f2\uldb New command}{\v HID_FILE_NEW}{\f2 .
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc fileopen.bmp\}
\par Keys:\tab CTRL+O
\par }\pard \li360 {\f2
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FILEOPEN}}{\b\f2 File Open dialog box
\par }{\f2
\par The following options allow you to specify which file to open:
\par }\pard \sb60 {\b\f2 File Name
\par }\pard \li360 {\f2 Type or select the filename you want to open. This box lists files with the extension you select in the List Files of Type box.
\par }\pard \sb60 {\b\f2 List Files of Type
\par }\pard \li360 {\f2 Select the type of file you want to open:
\par << List your application's file types here. >>
\par }\pard \sb60 {\b\f2 Drives
\par }\pard \li360 {\f2 Select the drive in which <<YourApp>> stores the file that you want to open.
\par }\pard \sb60 {\b\f2 Directories
\par }\pard \li360 {\f2 Select the directory in which <<YourApp>> stores the file that you want to open.
\par }\pard \sb60 {\b\f2 Network...
\par }\pard \li360 {\f2 Choose this button to connect to a network location, assigning it a new drive letter.
\par
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_CLOSE}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $}
File Close command}}{\f2 }{\b\f2 Close command (File menu)}{\f2
\par
\par Use this command to close all windows containing the active document. <<YourApp>> suggests that you save changes to your document before you close it. If you close a document without saving, you lose all changes made since the last time you saved it. B
efore closing an untitled document, <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2 and suggests that you name and save the document.
\par
\par You can also close a document by using the Close icon on the document's window, as shown below:
\par \{bml scmenu.bmp\}
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_SAVE}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $} File Save command}}{
\f2 }{\b\f2 Save command (File menu)}{\f2
\par
\par Use this command to save the active document to its current name and directory. When you save a document for the first time, <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2
so you can name your document. If you want to change the name and directory of an existing document before you save it, choose the }{\f2\uldb Save As command}{\v HID_FILE_SAVE_AS}{\f2 .
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc filesave.bmp\}
\par Keys:\tab CTRL+S
\par }\pard \li360 {\f2
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_SAVE_AS}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $}
File Save As command}}{\f2 }{\b\f2 Save As command (File menu)}{\f2
\par
\par Use this command to save and name the active document. <<YourApp>> displays the }{\f2\uldb Save As dialog box}{\v AFX_HIDD_FILESAVE}{\f2 so you can name your document.
\par
\par To save a document with its existing name and directory, use the }{\f2\uldb Save command}{\v HID_FILE_SAVE}{\f2 .
\par
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_FILE_SEND_MAIL}}{\b\f2 Send command (File menu)}{\f2
\par
\par Use this command to send the active document through electronic mail. This command presents a mail window with the active document attached to it. You may then fill out the To: field, Subject: field, etc., and add text to the body of the message if you
wish. When you are finished you may click the "Send" button to send the message.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FILESAVE}}{\b\f2 File Save As dialog box
\par }{\f2
\par The following options allow you to specify the name and location of the file you're about to save:
\par }\pard \sb60 {\b\f2 File Name
\par }\pard \li360 {\f2 Type a new filename to save a document with a different name. <<YourApp>> adds the extension you specify in the Save File As Type box.
\par }\pard \sb60 {\b\f2 Drives
\par }\pard \li360 {\f2 Select the drive in which you want to store the document.
\par }\pard \sb60 {\b\f2 Directories
\par }\pard \li360 {\f2 Select the directory in which you want to store the document.
\par }\pard \sb60 {\b\f2 Network...
\par }\pard \li360 {\f2 Choose this button to connect to a network location, assigning it a new drive letter.
\par
\par }\pard {\f2 << Add other File Save As dialog box options depending on which ones your application chooses via the OFN_ flags of the OPENFILENAME structure used by the CFileDialog. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 #} HID_FILE_MRU_FILE1}}{\f2 }{\cs15\fs16\up6 K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} files: managing}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {
\cs15\fs16\up6 $} File 1, 2, 3, 4 command}}{\f2 }{\b\f2 1, 2, 3, 4 command (File menu)}{\f2
\par
\par Use the numbers and filenames listed at the bottom of the File menu to open the last four documents you closed. Choose the number that corresponds with the document you want to open.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_APP_EXIT}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} exit}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $} File Exit command}}{\f2 }{\b\f2
Exit command (File menu)}{\f2
\par
\par Use this command to end your <<YourApp>> session. You can also use the Close command on the application Control menu. <<YourApp>> prompts you to save documents with unsaved changes.
\par }
\par {\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Mouse:\tab Double-click the application's Control menu button.
\par \tab \{bmc appexit.bmp\}
\par Keys:\tab ALT+F4
\par }\pard \page {\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_UNDO}}{\b\f2 Undo/Can't Undo command (Edit menu)}{\f2
\par
\par << Your application's user interface for Undo may differ from the one described below. Modify this help text accordingly. >>
\par
\par Use this command to reverse the last editing action, if possible. The name of the command changes, depending on what the last action was. The Undo command changes to Can't Undo on the menu if you cannot reverse your last action.
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc editundo.bmp\}
\par Keys:\tab CTRL+Z or
\par \tab ALT-BACKSPACE\tab
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_REDO}}{\b\f2 Redo command (Edit menu)}{\f2
\par
\par << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_CUT}}{\b\f2 Cut command (Edit menu)}{\f2
\par
\par Use this command to remove the currently selected data from the document and put it on the clipboard. This command is unavailable if there is no data currently selected.
\par
\par Cutting data to the clipboard replaces the contents previously stored there.
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc editcut.bmp\}
\par Keys:\tab CTRL+X
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_COPY}}{\b\f2 Copy command (Edit menu)}{\f2
\par
\par Use this command to copy selected data onto the clipboard. This command is unavailable if there is no data currently selected.
\par
\par Copying data to the clipboard replaces the contents previously stored there.
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc editcopy.bmp\}
\par Keys:\tab CTRL+C
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_PASTE}}{\b\f2 Paste command (Edit menu)}{\f2
\par
\par Use this command to insert a copy of the clipboard contents at the insertion point. This command is unavailable if the clipboard is empty.
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Toolbar:\tab \{bmc editpast.bmp\}
\par Keys:\tab CTRL+V
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_VIEW_TOOLBAR}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} toolbar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $} View Toolbar command}}{
\f2 }{\b\f2 Toolbar command (View menu)}{\f2
\par
\par Use this command to display and hide the Toolbar, which includes buttons for some of the most common commands in <<YourApp>>, such as File Open. A check mark appears next to the menu item when the Toolbar is displayed.
\par
\par See }{\f2\uldb Toolbar}{\v\f2 AFX_HIDW_TOOLBAR}{\f2 for help on using the toolbar.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDW_TOOLBAR}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} toolbar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 $} toolbar}}{\f2 }{\b\f2
Toolbar}{\f2
\par \{bml hlptbar.bmp\}
\par
\par The toolbar is displayed across the top of the application window, below the menu bar. The toolbar provides quick mouse access to many tools used in <<YourApp>>,
\par
\par To hide or display the Toolbar, choose Toolbar from the View menu (ALT, V, T).
\par
\par << Add or remove toolbar buttons from the list below according to which ones your application offers. >>
\par
\par }\pard \brdrb\brdrs\brdrw15\brsp20 \tx1080 {\b\f2 Click\tab To}{\f2
\par }\pard \fi-1080\li1080\tx1080 {\f2 \{bmc filenew.bmp\}\tab Open a new document.
\par
\par \{bmc fileopen.bmp\}\tab Open an existing document. <<YourApp>> displays the Open dialog box, in which you can locate and open the desired file.
\par
\par \{bmc filesave.bmp\}\tab Save the active document or template with its current name. If you have not named the document, <<YourApp>> displays the Save As dialog box.
\par
\par \{bmc fileprnt.bmp\}\tab Print the active document.
\par
\par \{bmc editcut.bmp\}\tab Remove selected data from the document and stores it on the clipboard.
\par
\par \{bmc editcopy.bmp\}\tab Copy the selection to the clipboard.
\par
\par \{bmc editpast.bmp\}\tab Insert the contents of the clipboard at the insertion point.
\par
\par \{bmc editundo.bmp\}\tab Reverse the last editing. Note: You cannot undo some actions.
\par
\par \{bmc recfirst.bmp\}\tab Go to the first record in the current selection.
\par
\par \{bmc recprev.bmp\}\tab Go to the previous record in the current selection.
\par
\par \{bmc recnext.bmp\}\tab Go to the next record in the current selection.
\par
\par \{bmc reclast.bmp\}\tab Go to the last record in the current selection.
\par
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_VIEW_STATUS_BAR}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} status bar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $}
View Status Bar Command}}{\b\f2 Status Bar command (View menu)
\par }{\f2
\par Use this command to display and hide the Status Bar, which describes the action to be executed by the selected menu item or depressed toolbar button, and keyboard latch state. A check mark appears next to the menu item when the Status Bar is displayed.
\par
\par See }{\f2\uldb Status Bar}{\v\f2 AFX_HIDW_STATUS_BAR}{\f2 for help on using the status bar.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDW_STATUS_BAR}K{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 K} status bar}}{\f2 }{\cs15\fs16\up6 ${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} status bar}}{\b\f2
Status Bar}{\f2
\par \{bml hlpsbar.bmp\}
\par
\par The status bar is displayed at the bottom of the <<YourApp>> window. To display or hide the status bar, use the Status Bar command in the View menu.
\par
\par The left area of the status bar describes actions of menu items as you use the arrow keys to navigate through menus. This area similarly shows messages that describe the actions of toolbar buttons as you depress them, before releasing them. If after vie
wing the description of the toolbar button command you wish not to execute the command, then release the mouse button while the pointer is off the toolbar button.
\par
\par The right areas of the status bar indicate which of the following keys are latched down:
\par
\par }\pard \tx1440 {\b\f2 Indicator\tab Description}{\f2
\par }\pard \fi-1440\li1440\sa120\tx1440 {\f2 CAP\tab The Caps Lock key is latched down.
\par NUM\tab The Num Lock key is latched down.
\par SCRL\tab The Scroll Lock key is latched down.
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_NEW}}{\b\f2 New command (Window menu)}{\f2
\par
\par Use this command to open a new window with the same contents as the active window. You can open multiple document windows to display different parts or views of a document at the same time. If you change the contents in one window, all other windows con
taining the same document reflect those changes. When you open a new window, it becomes the active window and is displayed on top of all other open windows.
\par
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_CASCADE}}{\b\f2 Cascade command (Window menu)}{\f2
\par
\par Use this command to arrange multiple opened windows in an overlapped fashion.
\par
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE}}{\b\f2 Tile command (Window menu)}{\f2
\par
\par Use this command to arrange multiple opened windows in a non-overlapped fashion.
\par
\par
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE_HORZ}}{\b\f2 Tile Horizontal command (Window menu)}{\f2
\par
\par Use this command to vertically arrange multiple opened windows in a non-overlapped fashion.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_TILE_VERT}}{\b\f2 Tile Vertical command (Window menu)}{\f2
\par
\par Use this command to arrange multiple opened windows side by side.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_ARRANGE}}{\b\f2 Window Arrange Icons Command}{\f2
\par
\par Use this command to arrange the icons for minimized windows at the bottom of the main window. If there is an open document window at the bottom of the main window, then some or all of the icons may not be visible because they will be underneath this docu
ment window.\page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_SPLIT}}{\b\f2 Split Command (Window menu)
\par
\par }{\f2 Use this command
to split the active window into panes. You may then use the mouse or the keyboard arrows to move the splitter bars. When you are finished, press the mouse button or enter to leave the splitter bars in their new location. Pressing escape keeps the split
ter bars in their original location. << In a single document interface application, this command will appear on the View menu. >>\page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_WINDOW_ALL}}{\b\f2
1, 2, ... command (Window menu)}{\f2
\par
\par <<YourApp>> displays a list of currently open document windows at the bottom of the Window menu. A check mark appears in front of the document name of the active window. Choose a document from this list to make its window active.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_HELP_INDEX}}{\b\f2 Index command (Help menu)
\par }{\f2
\par Use this command to display the opening screen of Help. From the opening screen, you can jump to step-by-step instructions for using <<YourApp>> and various types of reference information.
\par
\par Once you open Help, you can click the Contents button whenever you want to return to the opening screen.
\par
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_HELP_USING}}{\b\f2 Using Help command (Help menu)
\par }{\f2
\par Use this command for instructions about using Help.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_APP_ABOUT}}{\b\f2 About command (Help menu)
\par }{\f2
\par Use this command to display the copyright notice and version number of your copy of <<YourApp>>.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_CONTEXT_HELP}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Help Using Help Command}}{\b\f2 Context Help command
\par }{\f2 \{bml curhelp.bmp\}
\par
\par Use the Context Help command to obtain help on some portion of <<YourApp>>. When you choose the Toolbar's Context Help button, the mouse pointer will change to an arrow and question mark. Then click somewhere in the <<YourApp>> window, such as another T
oolbar button. The Help topic will be shown for the item you clicked.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys:\tab SHIFT+F1
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_HT_CAPTION}}{\b\f2 Title Bar}
\par
\par {\f2 << Show your application's title bar here. >>
\par
\par }\pard\plain \s42\fi-360\li360\tx360 \f7\fs20 {\f2 The title bar is located along the top of a window. It contains the name of the application and document.
\par }\pard\plain \fs20 {\f2
\par }\pard\plain \s42\fi-360\li360\tx360 \f7\fs20 {\f2 To move the window, drag the title bar. Note: You can also move dialog boxes by dragging their title bars.
\par }\pard\plain \fs20 {\f2
\par }\pard \fi-360\li360\tx360 {\f2 A title bar may contain the following elements:
\par }\pard\plain \s41\fi-360\li360\sb40\sa40\tx360 \f7\fs20 {\f2 \{bmc bullet.bmp\}\tab Application Control-menu button
\par \{bmc bullet.bmp\}\tab Document Control-menu button
\par \{bmc bullet.bmp\}\tab Maximize button
\par \{bmc bullet.bmp\}\tab Minimize button
\par \{bmc bullet.bmp\}\tab Name of the application
\par \{bmc bullet.bmp\}\tab Name of the document
\par \{bmc bullet.bmp\}\tab Restore button
\par }\pard\plain \fs20 {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 #} scrollbars}}{\f2 }{\b\f2 Scroll bars}{\f2
\par
\par Displayed at the right and bottom edges of the document window. The scroll boxes inside the scroll bars indicate your vertical and horizontal location in the document. You can use the mouse to scroll to other parts of the document.
\par
\par << Describe the actions of the various parts of the scrollbar, according to how they behave in your application. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_SIZE}}{\b\f2 Size command (System menu)}
\par
\par {\f2 Use this command to display a four-headed arrow so you can size the active window with the arrow keys.
\par \{bml curarw4.bmp\}
\par
\par After the pointer changes to the four-headed arrow:
\par }\pard \fi-360\li360\sb60 {\f2 1.\tab Press one of the DIRECTION keys (left, right, up, or down arrow key) to move the pointer to the border you want to move.
\par 2.\tab Press a DIRECTION key to move the border.
\par 3.\tab Press ENTER when the window is the size you want.
\par }\pard {\f2
\par Note: This command is unavailable if you maximize the window.
\par }
\par {\b\f2 Shortcut}{\b
\par }\pard \fi-1080\li1440\tx1440 {\f2 Mouse:\tab Drag the size bars at the corners or edges of the window.
\par }\pard \li360 {\f2
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_MOVE}}{\b\f2 Move command (Control menu)
\par }{\f2
\par Use this command to display a four-headed arrow so you can move the active window or dialog box with the arrow keys.
\par \{bmc curarw4.bmp\}
\par
\par Note: This command is unavailable if you maximize the window.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys:\tab CTRL+F7
\par
\par }\pard \tx1440 {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_MINIMIZE}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} System Minimize Command}}{\b\f2 Minimize command (application Control menu)
\par }\pard {\f2
\par Use this command to reduce the <<YourApp>> window to an icon.
\par }\pard \fi-360\li360 {\b
\par }{\b\f2 Shortcut}{\f2
\par }\pard \fi-1080\li1440\tx1440 {\f2 Mouse:\tab Click the minimize icon \{bmc scmin.bmp\} on the title bar.
\par Keys:\tab ALT+F9
\par }\pard \fi-360\li1080
\par \pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_MAXIMIZE}}{\b\f2 Maximize command (System menu)
\par }{\f2
\par Use this command to enlarge the active window to fill the available space.
\par }\pard \fi-360\li360 {\b\f2
\par Shortcut}{\f2
\par }\pard \fi-1080\li1440\tx1440 {\f2 Mouse:\tab Click the maximize icon \{bmc scmax.bmp\} on the title bar; or double-click the title bar.
\par Keys:\tab CTRL+F10 enlarges a document window.
\par }\pard \fi-360\li1080
\par \pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_NEXTWINDOW}}{\b\f2 Next Window command (document Control menu)
\par }{\f2
\par Use this command to switch to the next open document window. <<YourApp>> determines which window is next according to the order in which you opened the windows.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys:\tab CTRL+F6
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_PREVWINDOW}}{\b\f2 Previous Window command (document Control menu)
\par }{\f2
\par Use this command to switch to the previous open document window. <<YourApp>> determines which window is previous according to the order in which you opened the windows.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys:\tab SHIFT+CTRL+F6
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_CLOSE}}{\b\f2 Close command (Control menus)
\par }{\f2
\par Use this command to close the active window or dialog box.
\par
\par Double-clicking a Control-menu box is the same as choosing the Close command.
\par \{bml appexit.bmp\}
\par
\par Note: If you have multiple windows open for a single document, the Close command on the document Control menu closes only one window at a time. You can close all windows at once with the Close command on the File menu.
\par
\par }{\b\f2 Shortcuts
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys: \tab CTRL+F4 closes a document window
\par \tab ALT+F4 closes the <<YourType>> window or dialog box
\par }\pard {\f2 \tab \tab \tab \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_RESTORE}}{\b\f2 Restore command (Control menu)
\par }{\f2
\par Use this command to return the active window to its size and position before you chose the Maximize or Minimize command.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_SC_TASKLIST}}{\b\f2 Switch to command (application Control menu)
\par }{\f2
\par Use this command to display a list of all open applications. Use this "Task List" to switch to or close an application on the list.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Keys:\tab CTRL+ESC
\par }\pard {\f2
\par }{\b\f2 Dialog Box Options
\par }{\f2 When you choose the Switch To command, you will be presented with a dialog box with the following options:
\par }\pard \sb60 {\b\f2 Task List
\par }\pard \li360 {\f2 Select the application you want to switch to or close.
\par }\pard \sb60 {\b\f2 Switch To
\par }\pard \li360 {\f2 Makes the selected application active.
\par }\pard \sb60 {\b\f2 End Task
\par }\pard \li360 {\f2 Closes the selected application.
\par }\pard \sb60 {\b\f2 Cancel
\par }\pard \li360 {\f2 Closes the Task List box.
\par }\pard \sb60 {\b\f2 Cascade
\par }\pard \li360 {\f2 Arranges open applications so they overlap and you can see each title bar. This option does not affect applications reduced to icons.
\par }\pard \sb60 {\b\f2 Tile
\par }\pard \li360 {\f2 Arranges open applications into windows that do not overlap. This option does not affect applications reduced to icons.
\par }\pard \sb60 {\b\f2 Arrange Icons
\par }\pard \li360 {\f2 Arranges the icons of all minimized applications across the bottom of the screen.
\par }\pard {\f2 \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_VIEW_RULER}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} View Ruler Command}}{\b\f2 Ruler command (View menu)
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FONT}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Choose Font Dialog}}{\b\f2 Choose Font dialog box
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_COLOR}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Choose Color Dialog}}{\b\f2 Choose Color dialog box
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_FIND}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Edit Find Command}}{\b\f2 Find command (Edit menu)
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_FIND}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Find Dialog}}{\b\f2 Find dialog box
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_REPLACE}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Edit Replace Command}}{\b\f2 Replace command (Edit menu)
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} AFX_HIDD_REPLACE}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Replace Dialog}}{\b\f2 Replace dialog box
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_REPEAT}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Edit Repeat Command}}{\b\f2 Repeat command (Edit menu)
\par
\par }{\f2 Use this command to repeat the last editing command carried out. The Repeat menu item changes to Can't Repeat if you cannot repeat your last action.
\par
\par }{\b\f2 Shortcut
\par }\pard \fi-1080\li1440\tx1440 {\f2 Key:\tab F4
\par }\pard {\f2
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_CLEAR}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Edit Clear Command}}{\b\f2 Clear command (Edit menu)
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_EDIT_CLEAR_ALL}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Edit Clear All}}{\b\f2 Clear All command (Edit menu)
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_NEXT_PANE}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Next Pane Command}}{\b\f2 Next Pane
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_PREV_PANE}${\footnote \pard\plain \fs20 {\cs15\fs16\up6 $} Prev Pane Command}}{\b\f2 Prev Pane
\par
\par }{\f2 << Write application-specific help here. >>
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HIDR_DOC1TYPE}}{\b\f2 Modifying the Document
\par }{\f2
\par << Write application-specific help here that provides an overview of how the user should modify a document using your application.>>
\par
\par \page
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \fs20 {\cs15\fs16\up6 #} HID_HT_NOWHERE}}{\b\f2 No Help Available}
\par
\par {\f2 No help is available for this area of the window.
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16 \fs20 {\cs15\fs16\up6 #} AFX_HIDP_default
\par }}{\f2 }{\b\f2 No Help Available
\par }
\par {\f2 No help is available for this message box.
\par }
\par {\f2 << If you wish to author help specific to each message box prompt, then remove the AFX_HIDP_xxx values from the [ALIAS] section of your .HPJ file, and author a topic for each AF
X_HIDP_xxx value. For example, AFX_HIDP_INVALID_FILENAME is the help topic for the Invalid Filename message box. >>
\par
\par }
\par }
@@ -0,0 +1,98 @@
{\rtf1\ansi \deff0\deflang1024{\fonttbl{\f0\froman Times New Roman;}{\f1\froman Symbol;}{\f2\fswiss Arial;}{\f3\froman Tms Rmn;}{\f4\fswiss Helv;}{\f5\fswiss Helvetica;}{\f6\fswiss MS Sans Serif;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue127;\red0\green127\blue127;\red0\green127\blue0;
\red127\green0\blue127;\red127\green0\blue0;\red127\green127\blue0;\red127\green127\blue127;\red192\green192\blue192;}{\stylesheet{\s244 \f3\fs16\up6\lang1033 \sbasedon0\snext0 footnote reference;}{\s245 \f3\fs20\lang1033
\sbasedon0\snext245 footnote text;}{\s246\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 9;}{\s247\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 8;}{\s248\li720 \i\f3\fs20\lang1033 \sbasedon0\snext255 heading 7;}{\s249\li720
\f3\fs20\ul\lang1033 \sbasedon0\snext255 heading 6;}{\s250\li720 \b\f3\fs20\lang1033 \sbasedon0\snext255 heading 5;}{\s251\li360 \f3\ul\lang1033 \sbasedon0\snext255 heading 4;}{\s252\li360 \b\f3\lang1033 \sbasedon0\snext255 heading 3;}{\s253\sb120
\b\f4\lang1033 \sbasedon0\snext0 heading 2;}{\s254\sb240 \b\f4\ul\lang1033 \sbasedon0\snext0 heading 1;}{\s255\li720 \f3\fs20\lang1033 \sbasedon0\snext255 Normal Indent;}{\f3\fs20\lang1033 \snext0 Normal;}{\s2\fi-240\li480\sb80\tx480 \f5\lang1033
\sbasedon0\snext2 nscba;}{\s3\fi-240\li240\sa20 \f5\lang1033 \sbasedon0\snext3 j;}{\s4\li480\sa20 \f5\lang1033 \sbasedon0\snext4 ij;}{\s5\sb80\sa20 \f5\lang1033 \sbasedon0\snext5 btb;}{\s6\fi-240\li2400\sb20\sa20 \f5\fs20\lang1033 \sbasedon0\snext6 ctcb;}
{\s7\fi-240\li480\sa40\tx480 \f5\lang1033 \sbasedon0\snext7 ns;}{\s8\sa120 \f5\fs28\lang1033 \sbasedon0\snext8 TT;}{\s9\fi-240\li2400\sa20 \f5\lang1033 \sbasedon0\snext9 crtj;}{\s10\fi-240\li480\tx480 \f5\lang1033 \sbasedon0\snext10 nsca;}{\s11\sa20
\f5\lang1033 \sbasedon0\snext11 bt;}{\s12\li240\sb120\sa40 \f5\lang1033 \sbasedon0\snext12 Hf;}{\s13\li240\sb120\sa40 \f5\lang1033 \sbasedon0\snext13 Hs;}{\s14\li480\sb120\sa40 \f5\lang1033 \sbasedon0\snext14 RT;}{\s15\fi-2160\li2160\sb240\sa80\tx2160
\f5\lang1033 \sbasedon0\snext15 c;}{\s16\li2160\sa20 \f5\lang1033 \sbasedon0\snext16 ct;}{\s17\li240\sa20 \f5\lang1033 \sbasedon0\snext17 it;}{\s18\li480 \f5\fs20\lang1033 \sbasedon0\snext18 nsct;}{\s19\fi-160\li400\sb80\sa40 \f5\lang1033
\sbasedon0\snext19 nscb;}{\s20\fi-2640\li2880\sb120\sa40\brdrb\brdrs\brdrw15 \brdrbtw\brdrs\brdrw15 \tx2880 \f5\lang1033 \sbasedon0\snext20 HC2;}{\s21\fi-2640\li2880\sb120\sa20\tx2880 \f5\lang1033 \sbasedon0\snext21 C2;}{\s22\fi-240\li2400\sa20
\f5\fs20\lang1033 \sbasedon0\snext22 ctc;}{\s23\li2160\sb160 \f5\lang1033 \sbasedon0\snext23 crt;}{\s24\li480\sb20\sa40 \f5\lang1033 \sbasedon0\snext24 or;}{\s25\fi-259\li360\sb40\sa40\tx360 \f6\fs20\lang1033 \sbasedon0\snext25 Ln1;}{\s26\li115\sb80\sa80
\f6\fs20\lang1033 \sbasedon0\snext0 *Intro;}{\s27\li115\sb80\sa80\keepn \b\f6\lang1033 \sbasedon252\snext26 *Title;}{\s28\fi-245\li360\sb80 \f6\fs20\lang1033 \snext28 *Jl;}{\s29\li360\sb40\sa40 \f6\fs20\lang1033 \snext0 Lp1;}{
\s30\fi-1800\li1915\sb60\sl-240\tx1915 \f6\fs20\lang1033 \sbasedon0\snext30 Tph;}{\s31\li115\sb120\sa80 \b\f6\fs20\lang1033 \snext25 Proch;}}{\info{\title AFXPRINT}{\subject MFC Print RTF Help}{\author AFX}{\creatim\yr1992\mo10\dy7\hr12\min33}{\version1}
{\edmins46}{\nofpages1}{\nofwords65536}{\nofchars65536}{\vern16433}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0 \widowctrl\ftnbj \sectd \linex0\endnhere \pard\plain \sl240 \f3\fs20\lang1033 {\f4 \page }{\f4 #{\footnote
\pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 $} File Print command}
}{\f4 }{\b\f4 Print command (File menu)}{\b\f4
\par }{\f4
\par }{\f4 Use this command to print a document. This command presents a }{\f4\uldb Print dialog box}{\v AFX_HIDD_PRINT}{\f4
, where you may specify the range of pages to be printed, the number of copies, the destination printer, and other printer setup options.}{\b\f4
\par }{\b\f4
\par }{\b\f4 Shortcuts}{\b\f4
\par }\pard \fi-1080\li1440\sl240\tx1440 {\f4 Toolbar:}{\f4 \tab }{\f4 \{}{\f4 bmc }{\f4 fileprnt.bmp}{\f4 \}}{\f4
\par }{\f4 Keys:}{\f4 \tab }{\f4 CTRL+P}{\f4
\par }\pard \sl240 {\f4
\par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINT}}{\b\f4 Print }{\b\f4 dialog box}{\b\f4
\par }{\f4
\par }{\f4 The following options allow you to specify how the document should be printed:}{\f4
\par }\pard \sb60\sl240 {\b\f4 Printer}{\b\f4
\par }\pard \li360\sl240 {\f4 This is the active printer and printer connection. Choose the Setup option to change the printer and printer connection.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Setup}{\b\f4
\par }\pard \li360\sl240 {\f4 Displays a }{\f4\uldb Print Setup dialog box}{\v AFX_HIDD_PRINTSETUP}{\f4 , so you can select a printer and printer connection.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Print Range}{\b\f4
\par }\pard \li360\sl240 {\f4 Specify the pages you want to print:}{\f4
\par }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 All}{\b\f4 \cell }{\f4 Prints the entire document.}{\f4 \cell }\pard \intbl {\f4 \row }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 Selection}{\b\f4
\cell }{\f4 Prints the currently selected text.}{\f4 \cell }\pard \intbl {\f4 \row }\trowd \trgaph108\trleft402 \cellx1647\cellx8622\pard \sl240\intbl {\b\f4 Pages}{\b\f4 \cell }{\f4 Prints the range of pages you specify in }{\f4 the From and To boxes.}{
\f4 \cell }\pard \intbl {\f4 \row }\pard \sb60\sl240 {\b\f4 Copies}{\b\f4
\par }\pard \li360\sl240 {\f4 Specify the number of copies you want to print for the above page range.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Collate Copies}{\b\f4
\par }\pard \li360\sl240 {\f4 Prints copies in page number order, instead of separated multiple copies of each page.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Print Quality}{\b\f4
\par }\pard \li360\sl240 {\f4 Select the quality of the printing. Generally, lower quality printing takes less time to produce.}{\f4
\par }\pard \sl240 {\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINTDLG}}{\b\f4 P}{\b\f4 rint Progress Dialog}{\b\f4
\par }{\f4
\par }{\f4 The Printing dialog box is shown during the time that <<YourApp>> is sending output to the printer. The page number indicates the progre}{\f4 ss of the printing.}{\f4
\par }{\f4
\par }{\f4 To abort printing, choose Cancel.}{\f4
\par }{\f4
\par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT_PREVIEW}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245
\f3\fs20\lang1033 {\fs16\up6 $} File Print Preview command}}{\f4 }{\b\f4 Print Preview command (File menu)}{\f4
\par }{\f4
\par }{\f4 Use this command to display the active document as it would appear when printed. When you choose this command, the main window will be replaced with a print preview window in which one or two pages will be displayed in their printed format. The }{
\f4\uldb print preview toolbar}{\v\f4 AFX_HIDW_PREVIEW_BAR}{\f4 offers you options to view either one or two pages at a time; move back and forth through the document; zoom in and out of pages; and initiate a print job.}{\f4
\par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDW_PREVIEW_BAR}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245
\f3\fs20\lang1033 {\fs16\up6 $} print preview toolbar}}{\f4 }{\b\f4 Print Preview toolbar}{\b\f4
\par }{\f4
\par }{\f4 The print preview toolbar offers you the following options:}{\f4
\par }\pard \sb60\sl240 {\b\f4 Print}{\b\f4
\par }\pard \li360\sl240 {\f4 Bring up the print dialog box, to start a print job.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Next Page}{\b\f4
\par }\pard \li360\sl240 {\f4 Preview the next printed page.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Prev Page}{\b\f4
\par }\pard \li360\sl240 {\f4 Preview the previous printed page.}{\f4
\par }\pard \sb60\sl240 {\b\f4 One Page / Two Page}{\b\f4
\par }\pard \li360\sl240 {\f4 Preview one or two printed pages at a time.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Zoom In}{\b\f4
\par }\pard \li360\sl240 {\f4 Take a closer look at the printed page.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Zoom Out}{\b\f4
\par }\pard \li360\sl240 {\f4 Take a larger look at the printed page.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Close}{\b\f4
\par }\pard \li360\sl240 {\f4 Return from print preview to the editing window.}{\f4
\par }\pard \sl240 {\f4
\par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PRINT_SETUP}}{\fs16\up6 K{\footnote \pard\plain \s245 \f3\fs20\lang1033 {\fs16\up6 K} printing and print preview}}{\f4 }{\fs16\up6 ${\footnote \pard\plain \s245
\f3\fs20\lang1033 {\fs16\up6 $} File Print Setup command}}{\f4 }{\b\f4 Print Setup command (File menu)}{\b\f4
\par }{\f4
\par }{\f4 Use this command to select a printer and a printer connection. This command presents a }{\f4\uldb Print Setup dialog box}{\v AFX_HIDD_PRINTSETUP}{\f4 , where you specify the printer and its connection.}{\b\f4
\par }{\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # AFX_HIDD_PRINTSETUP}}{\b\f4 Print}{\b\f4 Setup dialog box}{\b\f4
\par }{\f4
\par }{\f4 The following options allow you to select the destination printer and its connection.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Printer}{\b\f4
\par }\pard \li360\sl240 {\f4
Select the printer you want to use. Choose the Default Printer; or choose the Specific Printer option and select one of the current installed printers shown in the box. You install printers and configure ports using the Windows Control Panel. }{\f4
\par }\pard \sb60\sl240 {\b\f4 Orientation}{\b\f4
\par }\pard \li360\sl240 {\f4 Choose Portrait or Landscape.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Paper Size}{\b\f4
\par }\pard \li360\sl240 {\f4 Select the size of paper that the document is to be printed on.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Paper Source}{\b\f4
\par }\pard \li360\sl240 {\f4 Some printers offer multiple trays for different paper sources. Specify the tray here.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Options}{\b\f4
\par }\pard \li360\sl240 {\f4 Displays a dialog box where you can make additional choices about printing, specific to the type of printer you have selected.}{\f4
\par }\pard \sb60\sl240 {\b\f4 Network...}{\b\f4
\par }\pard \li360\sl240 {\f4 Choose this button to connect to a network location, assigning it a new drive letter.}{\f4
\par }\pard \sl240 {\f4 \page }{\f4 #{\footnote \pard\plain \sl240 \f3\fs20\lang1033 # HID_FILE_PAGE_SETUP}}{\f4 ${\footnote \pard\plain \sl240 \f3\fs20\lang1033 $ File Page Setup Command}}{\b\f4 Page Setup command (File menu)}{\b\f4
\par }{\b\f4
\par }{\f4 << Write application-specific help here. >>}{\f4
\par }\pard
\par }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,176 @@
Microsoft (R) Help Compiler
HCRTF 4.03.0002
Copyright (c) Microsoft Corp 1990 - 1995. All rights reserved.
multitron.hpj
HC3037: Warning: D:\dev\mw4\Tools\Multitron\hlp\Multitron.hm :
The map value for "HID_FILE_NEW_NOTEFILE" is the same as the map value for "HID_FILE_UPDATE".
HC1002: Note:
Using existing phrase table: Multitron.ph.
HC3025: Warning: topic #1 of D:\dev\mw4\Tools\Multitron\hlp\.\afxcore.rtf :
Jump to undefined Topic ID: "menu_record".
HC3025: Warning: topic #3 of D:\dev\mw4\Tools\Multitron\hlp\.\afxcore.rtf :
Jump to undefined Topic ID: "HID_OLE_EDIT_LINKS".
HC3025: Warning: topic #3 of D:\dev\mw4\Tools\Multitron\hlp\.\afxcore.rtf :
Jump to undefined Topic ID: "HID_EDIT_PASTE_LINK".
HC3025: Warning: topic #3 of D:\dev\mw4\Tools\Multitron\hlp\.\afxcore.rtf :
Jump to undefined Topic ID: "HID_OLE_INSERT_NEW".
HC1010: Note:
The following mapped Topic IDs were not used in any topic:
HID_ADD_TEXTUREHINT
AFX_HIDP_UNREG_DONE
HIDD_TEXTURE_PROPERTIES
AFX_HIDP_GET_NOT_SUPPORTED
HID_HT_OBJECT
AFX_HIDP_SQL_BOOKMARKS_NOT_ENABLED
HID_ADD_READONLY
HID_RECORD_FIRST
HID_EDIT_SELECT_ALL
HID_FILE_UPDATE
HID_REMOVE_TEXTUREHINT
AFX_HIDW_RESIZE_BAR
AFX_HIDP_SQL_NO_DATA_FOUND
AFX_HIDP_SQL_EMPTY_COLUMN_LIST
AFX_HIDP_SQL_ODBC_LOAD_FAILED
AFX_HIDP_FAILED_TO_CREATE
HID_ADD_NOGAMMA
AFX_HIDD_BUSY
AFX_HIDP_ARCH_NONE
HID_RECORD_LAST
HID_RECORD_NEXT
HID_RECORD_PREV
HID_ADD_MIPFILTER
AFX_HIDD_OBJECTPROPERTIES
HID_ADD
AFX_HIDP_UNREG_FAILURE
AFX_HIDP_SQL_BOOKMARKS_NOT_SUPPORTED
HIDD_PROJECT
AFX_HIDP_FILE_TOO_MANY_OPEN
AFX_HIDP_SQL_FIELD_NOT_FOUND
AFX_HIDP_FILE_ACCESS_DENIED
HID_FILE_SAVE_COPY_AS
AFX_HIDD_CONVERT
AFX_HIDP_ASK_TO_DISCARD
AFX_HIDP_SQL_FIELD_SCHEMA_MISMATCH
AFX_HIDP_SQL_LOCK_MODE_NOT_SUPPORTED
HID_FORMAT_FONT
AFX_HIDP_FILE_HARD_IO
AFX_HIDD_CHANGESOURCE
HID_ADD_FORMAT
AFX_HIDP_FILE_NOT_FOUND
AFX_HIDW_DOCKBAR_TOP
AFX_HIDP_DAO_DFX_BIND
AFX_HIDP_SQL_ODBC_V2_REQUIRED
AFX_HIDP_SQL_NO_ROWS_AFFECTED
HID_OLE_EDIT_CONVERT
AFX_HIDP_SQL_SQL_CONFORMANCE
AFX_HIDD_INSERTOBJECT
AFX_HIDP_SQL_RECORDSET_READONLY
AFX_HIDP_PARSE_RADIO_BUTTON
HID_EDIT_PASTE_SPECIAL
AFX_HIDP_DAO_ROWTOOSHORT
AFX_HIDP_SQL_INCORRECT_ODBC
AFX_HIDP_NO_ERROR_AVAILABLE
AFX_HIDW_DOCKBAR_BOTTOM
AFX_HIDP_FILE_DIR_FULL
AFX_HIDP_DAO_BADBINDINFO
AFX_HIDP_SQL_UPDATE_DELETE_FAILED
AFX_HIDP_PARSE_DATETIME
HID_OLE_EDIT_CHANGE_ICON
AFX_HIDP_ARCH_ENDOFFILE
AFX_HIDP_SQL_SQL_NO_TOTAL
AFX_HIDP_SQL_CONNECT_FAIL
AFX_HIDP_SQL_API_CONFORMANCE
HID_OLE_EDIT_PROPERTIES
AFX_HIDP_FILE_DISKFULL
HID_ADD_MEMORY
HID_ADD_MIPMAP
AFX_HIDW_DOCKBAR_LEFT
AFX_HIDP_FILE_REMOVE_CURRENT
AFX_HIDP_ARCH_BADCLASS
AFX_HIDP_SQL_NO_POSITIONED_UPDATES
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
HID_OLE_VERB_1
AFX_HIDP_ARCH_BADINDEX
HID_ADD_PINKISALPHA
HID_WIZBACK
HID_WIZNEXT
AFX_HIDP_PARSE_CURRENCY
AFX_HIDP_FILE_NONE
HID_ADD_BLUEISALPHA
AFX_HIDP_FAILED_TO_CONVERT
HID_HELP_FINDER
AFX_HIDP_FILE_EOF
AFX_HIDP_FILE_LOCKING
AFX_HIDP_SQL_ILLEGAL_MODE
AFX_HIDD_PREVIEW_TOOLBAR
HID_ADD_PAGEOUT
AFX_HIDP_SQL_NO_CURRENT_RECORD
AFX_HIDP_FILE_BAD_PATH
AFX_HIDP_FILE_BAD_SEEK
AFX_HIDP_SQL_ROW_UPDATE_NOT_SUPPORTED
AFX_HIDP_FAILED_MAPI_LOAD
AFX_HIDP_FAILED_MAPI_SEND
AFX_HIDP_FILE_SHARING
HID_FILE_PRINT_DIRECT
AFX_HIDP_DLL_LOAD_FAILED
AFX_HIDP_SQL_DYNASET_NOT_SUPPORTED
AFX_HIDP_SQL_ROW_FETCH
AFX_HIDP_SET_NOT_SUPPORTED
AFX_HIDD_CHANGEICON
AFX_HIDP_DLL_BAD_VERSION
AFX_HIDP_ARCH_BADSCHEMA
AFX_HIDD_FILEBROWSE
AFX_HIDD_EDITLINKS
AFX_HIDP_SQL_DATA_TRUNCATED
HID_HT_HELP
HID_WIZFINISH
AFX_HIDP_INVALID_MAPI_DLL
AFX_HIDD_PREVIEW_SHORTTOOLBAR
AFX_HIDP_DAO_OBJECT_NOT_OPEN
AFX_HIDP_ARCH_WRITEONLY
HID_OLE_EDIT_LINKS
AFX_HIDP_SQL_MULTIPLE_ROWS_AFFECTED
HID_EDIT_PASTE_LINK
AFX_HIDP_DAO_ENGINE_INITIALIZATION
AFX_HIDW_DOCKBAR_FLOAT
AFX_HIDW_DOCKBAR_RIGHT
AFX_HIDP_PARSE_BYTE
AFX_HIDP_PARSE_UINT
AFX_HIDP_ARCH_GENERIC
AFX_HIDP_SQL_SNAPSHOT_NOT_SUPPORTED
AFX_HIDD_PASTESPECIAL
AFX_HIDP_FILE_GENERIC
AFX_HIDP_FILE_INVALID_FILE
HID_HT_CLOSE
AFX_HIDP_ARCH_READONLY
AFX_HIDP_SQL_RECORDSET_FORWARD_ONLY
HID_OLE_INSERT_NEW
AFX_HIDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED
HID_ADD_RELOADFROMDISK
HID_ADD_MEGATEXTURE
AFX_HIDP_DAO_COLUMNUNAVAILABLE
72 Topics
48 Jumps
16 Keywords
21 Bitmaps
Created D:\dev\mw4\Tools\Multitron\hlp\Multitron.HLP, 38,932 bytes
Bitmaps: 5,348 bytes
Phrase+Zeck compression decreased help file by 13,866 bytes.
Compile time: 0 minutes, 0 seconds
2 notes, 5 warnings
@@ -0,0 +1,9 @@
:Base Multitron.hlp
1 Menus
2 File menu=menu_file
2 Edit menu=menu_edit
2 View menu=menu_view
2 Window menu=menu_window
2 Help menu=menu_help
1 <<add your application-specific topics here>>
2 <<add your topic jumps here>>=main_index
@@ -0,0 +1,35 @@
// Commands (ID_* and IDM_*)
HID_ADD 0x18003
HID_ADD_MIPMAP 0x18004
HID_ADD_RELOADFROMDISK 0x18005
HID_ADD_READONLY 0x18006
HID_ADD_MEMORY 0x18007
HID_ADD_PAGEOUT 0x18008
HID_ADD_MIPFILTER 0x18009
HID_ADD_PINKISALPHA 0x1800A
HID_ADD_BLUEISALPHA 0x1800B
HID_ADD_NOGAMMA 0x1800C
HID_ADD_FORMAT 0x1800D
HID_ADD_RESOURCIFY 0x1800E
HID_ADD_MEGATEXTURE 0x1800F
HID_ADD_TEXTUREHINT 0x18010
HID_REMOVE_TEXTUREHINT 0x18011
HID_OPEN_TEXTURE 0x18012
HID_DELETEFROMDISK 0x18013
// Prompts (IDP_*)
// Resources (IDR_*)
HIDR_MAINFRAME 0x20080
HIDR_MULTITTYPE 0x20081
HIDR_SUBDOCTYPE 0x20082
// Dialogs (IDD_*)
HIDD_ABOUTBOX 0x20064
HIDD_PROJECT 0x20082
HIDD_TEXTURE_PROPERTIES 0x20084
HIDD_MULITRONDOC 0x20085
HIDD_FILEOPEN 0x20087
// Frame Controls (IDW_*)
@@ -0,0 +1,62 @@
[OPTIONS]
LCID=0x409 0x0 0x0 ;English (U.S.)
CONTENTS=main_index
TITLE=MULTITRON Application Help
COMPRESS=true
WARNING=2
BMROOT= ..,.
ROOT= ..,.
HLP=Multitron.HLP
ERRORLOG=Multitron.LOG
[FILES]
afxcore.rtf
afxprint.rtf
[ALIAS]
HIDR_MAINFRAME = main_index
HIDR_MULTITTYPE = HIDR_DOC1TYPE
HIDD_ABOUTBOX = HID_APP_ABOUT
HID_HT_SIZE = HID_SC_SIZE
HID_HT_HSCROLL = scrollbars
HID_HT_VSCROLL = scrollbars
HID_HT_MINBUTTON = HID_SC_MINIMIZE
HID_HT_MAXBUTTON = HID_SC_MAXIMIZE
AFX_HIDP_INVALID_FILENAME = AFX_HIDP_default
AFX_HIDP_FAILED_TO_OPEN_DOC = AFX_HIDP_default
AFX_HIDP_FAILED_TO_SAVE_DOC = AFX_HIDP_default
AFX_HIDP_ASK_TO_SAVE = AFX_HIDP_default
AFX_HIDP_FAILED_TO_CREATE_DOC = AFX_HIDP_default
AFX_HIDP_FILE_TOO_LARGE = AFX_HIDP_default
AFX_HIDP_FAILED_TO_START_PRINT = AFX_HIDP_default
AFX_HIDP_FAILED_TO_LAUNCH_HELP = AFX_HIDP_default
AFX_HIDP_INTERNAL_FAILURE = AFX_HIDP_default
AFX_HIDP_COMMAND_FAILURE = AFX_HIDP_default
AFX_HIDP_PARSE_INT = AFX_HIDP_default
AFX_HIDP_PARSE_REAL = AFX_HIDP_default
AFX_HIDP_PARSE_INT_RANGE = AFX_HIDP_default
AFX_HIDP_PARSE_REAL_RANGE = AFX_HIDP_default
AFX_HIDP_PARSE_STRING_SIZE = AFX_HIDP_default
AFX_HIDP_FAILED_INVALID_FORMAT = AFX_HIDP_default
AFX_HIDP_FAILED_INVALID_PATH = AFX_HIDP_default
AFX_HIDP_FAILED_DISK_FULL = AFX_HIDP_default
AFX_HIDP_FAILED_ACCESS_READ = AFX_HIDP_default
AFX_HIDP_FAILED_ACCESS_WRITE = AFX_HIDP_default
AFX_HIDP_FAILED_IO_ERROR_READ = AFX_HIDP_default
AFX_HIDP_FAILED_IO_ERROR_WRITE = AFX_HIDP_default
AFX_HIDP_STATIC_OBJECT = AFX_HIDP_default
AFX_HIDP_FAILED_TO_CONNECT = AFX_HIDP_default
AFX_HIDP_SERVER_BUSY = AFX_HIDP_default
AFX_HIDP_BAD_VERB = AFX_HIDP_default
AFX_HIDP_FAILED_MEMORY_ALLOC = AFX_HIDP_default
AFX_HIDP_FAILED_TO_NOTIFY = AFX_HIDP_default
AFX_HIDP_FAILED_TO_LAUNCH = AFX_HIDP_default
AFX_HIDP_ASK_TO_UPDATE = AFX_HIDP_default
AFX_HIDP_FAILED_TO_UPDATE = AFX_HIDP_default
AFX_HIDP_FAILED_TO_REGISTER = AFX_HIDP_default
AFX_HIDP_FAILED_TO_AUTO_REGISTER = AFX_HIDP_default
[MAP]
#include <D:\Program Files\Microsoft Visual Studio\VC98\MFC\include\afxhelp.hm>
#include <Multitron.hm>
@@ -0,0 +1,309 @@
(Control
(Edit
(File
(Help
(System
(View
(Window
(application
(document
<< Write application-specific help here. >>
<<YourApp>>
<<YourApp>>,
<<YourApp>>.
AFX_HIDP_xxx
About
Arrange Icons
Bar
Cascade
Choose
Choose this button to connect to a network location, assigning it a new drive letter.
Clear
Close
Commands
Context
Control
Control-menu
Copies
Copy
DIRECTION
Directories
Drives
Exit
File
File Name
File New dialog box
File menu commands
Find
Go to the
Help
Horizontal
Icons
Keys:
List
Lock
Minimize
Modify
Mouse:
Name
Name of the
Network...
New
No Help Available
No help is available for this
Note: This command is unavailable if you maximize the window.
Open
Open a
Pane
Prev
Prev Pane
Preview
Print
Print Setup dialog box
Quality
Remove
Repeat
Replace
Save
Save As dialog box
Scroll
Select
Setup
Shortcut
Shortcuts
Split
Status Bar
Toolbar
Toolbar,
Toolbar:
Undo
Use
Vertical
View
When
Window
Write
according
across
action
action.
actions
active
active.
affect
all
allow
also
and
another
appear
appears
application
application's
application-specific
application.
applications
area
arrange
arrow
assigning
author
available
bar.
bars
before
bottom
box
box.
button
button,
button.
buttons
can
cannot
change
changes
changes.
check
choose
click
clipboard
clipboard.
closes
command
command,
command.
commands,
commands:
connect
connection.
contents
create
current
currently
data
depending
describe
describes
description
destination
determines
dialog
different
directory
display
displayed
displayed.
displays
document
document,
document.
documents
documents.
down.
drive
each
editing
electronic
existing
extension
fashion.
field,
filename
files
following
for
four-headed
from
have
help.
here.
hide
icon
icons.
indicate
insert
instructions
interface
into
item
its
keyboard
keys
last
latched
letter.
location
location,
location.
main
mark
maximize
may
menu
menu)
menu.
message
minimized
mouse
move
multiple
name.
network
next
non-overlapped
not
number
offers
one
only
open.
opened
opening
option
options
options:
other
overlapped
page
page.
pages
panes.
parts
point.
pointer
presents
previous
previously
print preview toolbar
printed
printed.
printer
printers
printing
printing,
printing.
provides
range
record
reduced
replaces
return
reverse
same
screen
screen.
selected
selected.
selection
selection.
should
shown
single
size
some
specific
specified
specify
splitter
status
stored
stores
such
suggests
supports
switch
that
the
their
then
there
there.
they
this
through
time
time.
title
toolbar.
topic
topics
type
types
unavailable
using
various
version
views
want
where
which
will
window,
window.
windows
windows.
wish
with
you
your
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,13 @@
//
// MULTITRON.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,67 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Multitron.rc
//
#define IDD_ABOUTBOX 100
#define IDR_MAINFRAME 128
#define IDR_MULTITTYPE 129
#define IDD_PROJECT 130
#define IDR_SUBDOCTYPE 130
#define IDD_TEXTURE_PROPERTIES 132
#define IDD_MULITRONDOC 133
#define IDD_FILEOPEN 135
#define IDC_TREE_FILES 1002
#define IDC_LIST_HINTPAGE 1003
#define IDC_PREVIEW 1004
#define IDC_LIST_PAGE 1005
#define IDC_USED_IMAGEPROP 1006
#define IDC_UNUSED_IMAGEPROP 1007
#define IDC_ADD 1008
#define IDC_DELETE 1010
#define IDC_COMBO_VALUE 1011
#define IDC_EDIT_PAGENAME 1012
#define IDC_APPLY 1013
#define IDC_EDIT_ALIASNAME 1014
#define IDC_APPLY_ALIAS 1015
#define IDC_LIST_UNUSED 1018
#define IDC_PREVIEW_UNUSED 1019
#define IDC_LIST_USED 1020
#define IDC_PREVIEW_USED 1021
#define IDC_HINTFILENAME 1038
#define IDC_CHECK_SHOWSEUDO 1039
#define IDC_CHECK_SEARCHSUB 1040
#define IDC_BUILDFILENAME 1041
#define IDC_CHECK_SHOWALPHA 1041
#define IDC_FILEBROWSE 1042
#define IDC_CHECK_SHOWMIPMAP 1047
#define IDC_CHECK_SHOWSOLID 1048
#define IDC_CHECK_PREVIEWALPHA 1051
#define ID_ADD 32771
#define ID_ADD_MIPMAP 32772
#define ID_ADD_RELOADFROMDISK 32773
#define ID_ADD_READONLY 32774
#define ID_ADD_MEMORY 32775
#define ID_ADD_PAGEOUT 32776
#define ID_ADD_MIPFILTER 32777
#define ID_ADD_PINKISALPHA 32778
#define ID_ADD_BLUEISALPHA 32779
#define ID_ADD_NOGAMMA 32780
#define ID_ADD_FORMAT 32781
#define ID_ADD_RESOURCIFY 32782
#define ID_ADD_MEGATEXTURE 32783
#define ID_ADD_TEXTUREHINT 32784
#define ID_REMOVE_TEXTUREHINT 32785
#define ID_OPEN_TEXTURE 32786
#define ID_DELETEFROMDISK 32787
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 137
#define _APS_NEXT_COMMAND_VALUE 32788
#define _APS_NEXT_CONTROL_VALUE 1052
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif