diff --git a/examples/osgviewerMFC/ChildFrm.cpp b/examples/osgviewerMFC/ChildFrm.cpp new file mode 100644 index 000000000..563b1525e --- /dev/null +++ b/examples/osgviewerMFC/ChildFrm.cpp @@ -0,0 +1,60 @@ +// ChildFrm.cpp : implementation of the CChildFrame class +// +#include "stdafx.h" +#include "MFC_OSG_MDI.h" +#include "ChildFrm.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CChildFrame + +IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd) + +BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd) +END_MESSAGE_MAP() + + +// CChildFrame construction/destruction + +CChildFrame::CChildFrame() +{ + // TODO: add member initialization code here +} + +CChildFrame::~CChildFrame() +{ +} + +BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) +{ + // TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs + if( !CMDIChildWnd::PreCreateWindow(cs) ) + return FALSE; + + cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU + | FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE; + + 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 diff --git a/examples/osgviewerMFC/ChildFrm.h b/examples/osgviewerMFC/ChildFrm.h new file mode 100644 index 000000000..f9542ef42 --- /dev/null +++ b/examples/osgviewerMFC/ChildFrm.h @@ -0,0 +1,34 @@ +// ChildFrm.h : interface of the CChildFrame class +// + + +#pragma once + + +class CChildFrame : public CMDIChildWnd +{ + DECLARE_DYNCREATE(CChildFrame) +public: + CChildFrame(); + +public: + +// Operations +public: + +// Overrides + public: + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + +// Implementation +public: + virtual ~CChildFrame(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +// Generated message map functions +protected: + DECLARE_MESSAGE_MAP() +}; diff --git a/examples/osgviewerMFC/MFC_OSG.cpp b/examples/osgviewerMFC/MFC_OSG.cpp new file mode 100644 index 000000000..a20a62034 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG.cpp @@ -0,0 +1,164 @@ +// MFC_OSG.cpp : implementation of the cOSG class +// +#include "stdafx.h" +#include "MFC_OSG.h" + + +cOSG::cOSG(HWND hWnd) : + m_hWnd(hWnd) +{ + // + // We must set the pixelformat before we can create the OSG Rendering Surface + // + PIXELFORMATDESCRIPTOR pixelFormat = + { + sizeof(PIXELFORMATDESCRIPTOR), + 1, + PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL, + PFD_TYPE_RGBA, + 24, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 24, + 0, + 0, + PFD_MAIN_PLANE, + 0, + 0, 0, 0 + }; + + HDC hdc = ::GetDC(m_hWnd); + if (hdc==0) + { + ::DestroyWindow(m_hWnd); + return; + } + + int pixelFormatIndex = ::ChoosePixelFormat(hdc, &pixelFormat); + if (pixelFormatIndex==0) + { + ::ReleaseDC(m_hWnd, hdc); + ::DestroyWindow(m_hWnd); + return; + } + + if (!::SetPixelFormat(hdc, pixelFormatIndex, &pixelFormat)) + { + ::ReleaseDC(m_hWnd, hdc); + ::DestroyWindow(m_hWnd); + return; + } +} + +void cOSG::InitOSG(std::string modelname) +{ + // Store the name of the model to load + m_ModelName = modelname; + + // Init different parts of OSG + InitManipulators(); + InitSceneGraph(); + InitCameraConfig(); +} + +void cOSG::InitManipulators(void) +{ + // Create a trackball manipulator + trackball = new osgGA::TrackballManipulator(); + + // Create a Manipulator Switcher + keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; + + // Add our trackball manipulator to the switcher + keyswitchManipulator->addMatrixManipulator( '1', "Trackball", trackball.get()); + + // Init the switcher to the first manipulator (in this case the only manipulator) + keyswitchManipulator->selectMatrixManipulator(0); // Zero based index Value +} + + +void cOSG::InitSceneGraph(void) +{ + // Init the main Root Node/Group + mRoot = new osg::Group; + + // Load the Model from the model name + mModel = osgDB::readNodeFile(m_ModelName); + + // Optimize the model + osgUtil::Optimizer optimizer; + optimizer.optimize(mModel.get()); + optimizer.reset(); + + // Add the model to the scene + mRoot->addChild(mModel.get()); +} + +void cOSG::InitCameraConfig(void) +{ + // Local Variable to hold window size data + RECT rect; + + // Create the viewer for this window + mViewer = new osgViewer::Viewer; + + // Add a Stats Handler to the viewer + mViewer->addEventHandler(new osgViewer::StatsHandler); + + // Get the current window size + ::GetWindowRect(m_hWnd, &rect); + + // Init the GraphicsContext Traits + osg::ref_ptr traits = new osg::GraphicsContext::Traits; + + // Init the Windata Variable that holds the handle for the Window to display OSG in. + osg::ref_ptr windata = new osgViewer::GraphicsWindowWin32::WindowData(m_hWnd); + + // Setup the traits parameters + traits->x = 0; + traits->y = 0; + traits->width = rect.right - rect.left; + traits->height = rect.bottom - rect.top; + traits->windowDecoration = false; + traits->doubleBuffer = true; + traits->sharedContext = 0; + traits->inheritedWindowData = windata; + + // Create the Graphics Context + osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get()); + + // Init a new Camera (Master for this View) + osg::ref_ptr camera = new osg::Camera; + + // Assign Graphics Context to the Camera + camera->setGraphicsContext(gc); + + // Set the viewport for the Camera + camera->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height)); + + // Add the Camera to the Viewer + mViewer->addSlave(camera.get()); + + // Add the Camera Manipulator to the Viewer + mViewer->setCameraManipulator(keyswitchManipulator.get()); + + // Set the Scene Data + mViewer->setSceneData(mRoot.get()); + + // Realize the Viewer + mViewer->realize(); +} + +void cOSG::Render(void* ptr) +{ + cOSG* osg = (cOSG*)ptr; + + osgViewer::Viewer* viewer = osg->getViewer(); + + viewer->run(); + + // For some reason this has to be here to avoid issue: + // if you have multiple OSG windows up + // and you exit one then all stop rendering + AfxMessageBox("Exit Rendering Thread"); +} \ No newline at end of file diff --git a/examples/osgviewerMFC/MFC_OSG.h b/examples/osgviewerMFC/MFC_OSG.h new file mode 100644 index 000000000..d182d1ab4 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class cOSG +{ +public: + cOSG(HWND hWnd); + ~cOSG(){}; + + void InitOSG(std::string filename); + void InitManipulators(void); + void InitSceneGraph(void); + void InitCameraConfig(void); + void SetupWindow(void); + void SetupCamera(void); + static void Render(void* ptr); + + osgViewer::Viewer* getViewer() { return mViewer.get(); } + +private: + std::string m_ModelName; + HWND m_hWnd; + osg::ref_ptr mViewer; + osg::ref_ptr mRoot; + osg::ref_ptr mModel; + osg::ref_ptr trackball; + osg::ref_ptr keyswitchManipulator; +}; \ No newline at end of file diff --git a/examples/osgviewerMFC/MFC_OSG_MDI.cpp b/examples/osgviewerMFC/MFC_OSG_MDI.cpp new file mode 100644 index 000000000..024e6c2de --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDI.cpp @@ -0,0 +1,145 @@ +// MFC_OSG_MDI.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "MFC_OSG_MDI.h" +#include "MainFrm.h" + +#include "ChildFrm.h" +#include "MFC_OSG_MDIDoc.h" +#include "MFC_OSG_MDIView.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CMFC_OSG_MDIApp + +BEGIN_MESSAGE_MAP(CMFC_OSG_MDIApp, CWinApp) + ON_COMMAND(ID_APP_ABOUT, &CMFC_OSG_MDIApp::OnAppAbout) + ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen) +END_MESSAGE_MAP() + + +// CMFC_OSG_MDIApp construction + +CMFC_OSG_MDIApp::CMFC_OSG_MDIApp() +{ +} + + +// The one and only CMFC_OSG_MDIApp object + +CMFC_OSG_MDIApp theApp; + + +// CMFC_OSG_MDIApp initialization + +BOOL CMFC_OSG_MDIApp::InitInstance() +{ + // InitCommonControlsEx() is required on Windows XP if an application + // manifest specifies use of ComCtl32.dll version 6 or later to enable + // visual styles. Otherwise, any window creation will fail. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // Set this to include all the common control classes you want to use + // in your application. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need + // Change the registry key under which our settings are stored + // TODO: You should modify this string to be something appropriate + // such as the name of your company or organization + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + LoadStdProfileSettings(4); // Load standard INI file options (including MRU) + // Register the application's document templates. Document templates + // serve as the connection between documents, frame windows and views + CMultiDocTemplate* pDocTemplate; + pDocTemplate = new CMultiDocTemplate(IDR_MFC_OSG_MDITYPE, + RUNTIME_CLASS(CMFC_OSG_MDIDoc), + RUNTIME_CLASS(CChildFrame), // custom MDI child frame + RUNTIME_CLASS(CMFC_OSG_MDIView)); + if (!pDocTemplate) + return FALSE; + AddDocTemplate(pDocTemplate); + + // create main MDI Frame window + CMainFrame* pMainFrame = new CMainFrame; + if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) + { + delete pMainFrame; + return FALSE; + } + m_pMainWnd = pMainFrame; + // call DragAcceptFiles only if there's a suffix + // In an MDI app, this should occur immediately after setting m_pMainWnd + + // Parse command line for standard shell commands, DDE, file open + CCommandLineInfo cmdInfo; + ParseCommandLine(cmdInfo); + + // Don't display a new MDI child window during startup + if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) + cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; + + + // Dispatch commands specified on the command line. Will return FALSE if + // app was launched with /RegServer, /Register, /Unregserver or /Unregister. + if (!ProcessShellCommand(cmdInfo)) + return FALSE; + // The main window has been initialized, so show and update it + pMainFrame->ShowWindow(m_nCmdShow); + pMainFrame->UpdateWindow(); + + return TRUE; +} + + + +// CAboutDlg dialog used for App About + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// Dialog Data + enum { IDD = IDD_ABOUTBOX }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + +// Implementation +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + +// App command to run the dialog +void CMFC_OSG_MDIApp::OnAppAbout() +{ + CAboutDlg aboutDlg; + aboutDlg.DoModal(); +} + + +// CMFC_OSG_MDIApp message handlers + diff --git a/examples/osgviewerMFC/MFC_OSG_MDI.h b/examples/osgviewerMFC/MFC_OSG_MDI.h new file mode 100644 index 000000000..ce8240e94 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDI.h @@ -0,0 +1,31 @@ +// MFC_OSG_MDI.h : main header file for the MFC_OSG_MDI application +// +#pragma once + +#ifndef __AFXWIN_H__ + #error "include 'stdafx.h' before including this file for PCH" +#endif + +#include "resource.h" // main symbols + + +// CMFC_OSG_MDIApp: +// See MFC_OSG_MDI.cpp for the implementation of this class +// + +class CMFC_OSG_MDIApp : public CWinApp +{ +public: + CMFC_OSG_MDIApp(); + + +// Overrides +public: + virtual BOOL InitInstance(); + +// Implementation + afx_msg void OnAppAbout(); + DECLARE_MESSAGE_MAP() +}; + +extern CMFC_OSG_MDIApp theApp; \ No newline at end of file diff --git a/examples/osgviewerMFC/MFC_OSG_MDI.rc b/examples/osgviewerMFC/MFC_OSG_MDI.rc new file mode 100644 index 000000000..ae1c25ca6 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDI.rc @@ -0,0 +1,382 @@ +//Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// + +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +#ifdef APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#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" + "LANGUAGE 9, 1\r\n" + "#pragma code_page(1252)\r\n" + "#include ""res\\MFC_OSG_MDI.rc2"" // non-Microsoft Visual C++ edited resources\r\n" + "#include ""afxres.rc"" // Standard components\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. + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 +#pragma code_page(1252) +IDR_MAINFRAME ICON "res\\MFC_OSG_MDI.ico" +IDR_MFC_OSG_MDITYPE ICON "res\\MFC_OSG_MDIDoc.ico" +#endif +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDR_MAINFRAME BITMAP "res\\Toolbar.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Toolbar +// + +IDR_MAINFRAME TOOLBAR 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 + BUTTON ID_APP_ABOUT +END + + + + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 +#pragma code_page(1252) +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MAINFRAME MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", ID_FILE_NEW + MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN + MENUITEM SEPARATOR + MENUITEM "Recent File", ID_FILE_MRU_FILE1,GRAYED + MENUITEM SEPARATOR + MENUITEM "&Close", ID_FILE_CLOSE + MENUITEM "E&xit", ID_APP_EXIT + END + POPUP "&View" + BEGIN + MENUITEM "&Toolbar", ID_VIEW_TOOLBAR + MENUITEM "&Status Bar", ID_VIEW_STATUS_BAR + END + POPUP "&Help" + BEGIN + MENUITEM "&About MFC_OSG_MDI...", ID_APP_ABOUT + END +END +IDR_MFC_OSG_MDITYPE MENU +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 "&Window" + BEGIN + MENUITEM "&New Window", ID_WINDOW_NEW + MENUITEM "&Cascade", ID_WINDOW_CASCADE + MENUITEM "&Tile", ID_WINDOW_TILE_HORZ + MENUITEM "&Arrange Icons", ID_WINDOW_ARRANGE + MENUITEM "S&plit", ID_WINDOW_SPLIT + END + POPUP "&Help" + BEGIN + MENUITEM "&About MFC_OSG_MDI...", ID_APP_ABOUT + END +END + + + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_MAINFRAME ACCELERATORS +BEGIN + "N", ID_FILE_NEW, VIRTKEY,CONTROL + "O", ID_FILE_OPEN, VIRTKEY,CONTROL + "S", ID_FILE_SAVE, 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 +END + + + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55 +CAPTION "About MFC_OSG_MDI" +STYLE DS_MODALFRAME | DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20 + LTEXT "MFC_OSG_MDI Version 1.0",IDC_STATIC,40,10,119,8, + SS_NOPREFIX + LTEXT "Copyright (C) 2007",IDC_STATIC,40,25,119,8 + DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP +END + + +IDR_MAINFRAME DIALOGEX 0, 0, 330, 16 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "TODO: layout dialog bar ",IDC_STATIC,12,4, + 300,8 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// 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 "040904e4" + BEGIN + VALUE "CompanyName", "TODO: " + VALUE "FileDescription", "TODO: " + VALUE "FileVersion", "1.0.0.1" + VALUE "InternalName", "MFC_OSG_MDI.exe" + VALUE "LegalCopyright", "TODO: (c) . All rights reserved." + VALUE "OriginalFilename","MFC_OSG_MDI.exe" + VALUE "ProductName", "TODO: " + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 228 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END +END +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN +// Non-mac-targeting apps remove the two extra substrings + IDR_MAINFRAME "MFC_OSG_MDI" + IDR_MFC_OSG_MDITYPE "\nMFC_OSG_MDI\nMFC_OSG_MDI\n\n\nMFCOSGMDI.Document\nMFC_OSG_MDI.Document" +END +STRINGTABLE +BEGIN + AFX_IDS_APP_TITLE "MFC_OSG_MDI" + AFX_IDS_IDLEMESSAGE "Ready" +END +STRINGTABLE +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 +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_APP_ABOUT "Display program information, version number and copyright\nAbout" + ID_APP_EXIT "Quit the application; prompts to save documents\nExit" + 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" + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" + 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" + 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" + ID_VIEW_TOOLBAR "Show or hide the toolbar\nToggle ToolBar" + ID_VIEW_STATUS_BAR "Show or hide the status bar\nToggle StatusBar" +END + +STRINGTABLE +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" + AFX_IDS_SCRESTORE "Restore the window to normal size" + AFX_IDS_SCTASKLIST "Activate Task List" + AFX_IDS_MDICHILD "Activate this window" +END + +#endif + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 +#pragma code_page(1252) +#include "res\\MFC_OSG_MDI.rc2" // non-Microsoft Visual C++ edited resources +#include "afxres.rc" // Standard components +#endif +#endif // not APSTUDIO_INVOKED diff --git a/examples/osgviewerMFC/MFC_OSG_MDI.vcproj b/examples/osgviewerMFC/MFC_OSG_MDI.vcproj new file mode 100644 index 000000000..c3102e1e4 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDI.vcproj @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/osgviewerMFC/MFC_OSG_MDIDoc.cpp b/examples/osgviewerMFC/MFC_OSG_MDIDoc.cpp new file mode 100644 index 000000000..3e6688fbb --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDIDoc.cpp @@ -0,0 +1,73 @@ +// MFC_OSG_MDIDoc.cpp : implementation of the CMFC_OSG_MDIDoc class +// + +#include "stdafx.h" +#include "MFC_OSG_MDI.h" + +#include "MFC_OSG_MDIDoc.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CMFC_OSG_MDIDoc + +IMPLEMENT_DYNCREATE(CMFC_OSG_MDIDoc, CDocument) + +BEGIN_MESSAGE_MAP(CMFC_OSG_MDIDoc, CDocument) +END_MESSAGE_MAP() + + +// CMFC_OSG_MDIDoc construction/destruction + +CMFC_OSG_MDIDoc::CMFC_OSG_MDIDoc() +{ +} + +CMFC_OSG_MDIDoc::~CMFC_OSG_MDIDoc() +{ +} + +BOOL CMFC_OSG_MDIDoc::OnOpenDocument(LPCTSTR lpszPathName) +{ + m_csFileName = lpszPathName; + + if (!CDocument::OnOpenDocument(lpszPathName)) + return FALSE; + + return TRUE; +} + + +// CMFC_OSG_MDIDoc serialization + +void CMFC_OSG_MDIDoc::Serialize(CArchive& ar) +{ + if (ar.IsStoring()) + { + // TODO: add storing code here + } + else + { + // TODO: add loading code here + } +} + + +// CMFC_OSG_MDIDoc diagnostics + +#ifdef _DEBUG +void CMFC_OSG_MDIDoc::AssertValid() const +{ + CDocument::AssertValid(); +} + +void CMFC_OSG_MDIDoc::Dump(CDumpContext& dc) const +{ + CDocument::Dump(dc); +} +#endif //_DEBUG + + +// CMFC_OSG_MDIDoc commands diff --git a/examples/osgviewerMFC/MFC_OSG_MDIDoc.h b/examples/osgviewerMFC/MFC_OSG_MDIDoc.h new file mode 100644 index 000000000..9604997d5 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDIDoc.h @@ -0,0 +1,42 @@ +// MFC_OSG_MDIDoc.h : interface of the CMFC_OSG_MDIDoc class +// + + +#pragma once + + +class CMFC_OSG_MDIDoc : public CDocument +{ +protected: // create from serialization only + CMFC_OSG_MDIDoc(); + DECLARE_DYNCREATE(CMFC_OSG_MDIDoc) + +// Attributes +public: + +// Operations +public: + +// Overrides +public: + virtual void Serialize(CArchive& ar); + virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); + CString GetFileName() const { return m_csFileName; } + +// Implementation +public: + virtual ~CMFC_OSG_MDIDoc(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + CString m_csFileName; + +// Generated message map functions +protected: + DECLARE_MESSAGE_MAP() +}; + + diff --git a/examples/osgviewerMFC/MFC_OSG_MDIView.cpp b/examples/osgviewerMFC/MFC_OSG_MDIView.cpp new file mode 100644 index 000000000..de9b2b5d5 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDIView.cpp @@ -0,0 +1,122 @@ +// MFC_OSG_MDIView.cpp : implementation of the CMFC_OSG_MDIView class +// + +#include "stdafx.h" +#include "MFC_OSG_MDI.h" +#include "MFC_OSG_MDIDoc.h" +#include "MFC_OSG_MDIView.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +IMPLEMENT_DYNCREATE(CMFC_OSG_MDIView, CView) + +BEGIN_MESSAGE_MAP(CMFC_OSG_MDIView, CView) + ON_WM_CREATE() + ON_WM_DESTROY() + ON_WM_KEYDOWN() +END_MESSAGE_MAP() + +CMFC_OSG_MDIView::CMFC_OSG_MDIView() : + mOSG(0L) +{ +} + +CMFC_OSG_MDIView::~CMFC_OSG_MDIView() +{ +} + +BOOL CMFC_OSG_MDIView::PreCreateWindow(CREATESTRUCT& cs) +{ + return CView::PreCreateWindow(cs); +} + +void CMFC_OSG_MDIView::OnDraw(CDC* /*pDC*/) +{ + CMFC_OSG_MDIDoc* pDoc = GetDocument(); + ASSERT_VALID(pDoc); + if (!pDoc) + return; +} + +#ifdef _DEBUG +void CMFC_OSG_MDIView::AssertValid() const +{ + CView::AssertValid(); +} + +void CMFC_OSG_MDIView::Dump(CDumpContext& dc) const +{ + CView::Dump(dc); +} + +CMFC_OSG_MDIDoc* CMFC_OSG_MDIView::GetDocument() const // non-debug version is inline +{ + ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC_OSG_MDIDoc))); + return (CMFC_OSG_MDIDoc*)m_pDocument; +} +#endif //_DEBUG + + +int CMFC_OSG_MDIView::OnCreate(LPCREATESTRUCT lpCreateStruct) +{ + // Let MFC create the window before OSG + if (CView::OnCreate(lpCreateStruct) == -1) + return -1; + + // Now that the window is created setup OSG + mOSG = new cOSG(m_hWnd); + + return 1; +} + +void CMFC_OSG_MDIView::OnDestroy() +{ + // Make sure OSG was created before we try to close it. + if(mOSG) + { + // Force osg Viewer to shut down + mOSG->getViewer()->setDone(true); + + // Wait while the Viewer closes + while(!mOSG->getViewer()->done()) + { + Sleep(0); // Allow others processor time + } + + // Remove mOSG + delete mOSG; + } + + // Destroy Window + CView::OnDestroy(); +} + +void CMFC_OSG_MDIView::OnInitialUpdate() +{ + CView::OnInitialUpdate(); + + // Get Filename from DocumentOpen Dialog + CString csFileName = GetDocument()->GetFileName(); + + // Init the osg class + mOSG->InitOSG(csFileName.GetString()); + + // Start the thread to do OSG Rendering + _beginthread(&cOSG::Render, 0, mOSG); +} + +void CMFC_OSG_MDIView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) +{ + // Pass Key Presses into OSG + mOSG->getViewer()->getEventQueue()->keyPress(nChar); + + // Close Window on Escape Key + if(nChar == VK_ESCAPE) + { + GetParent()->SendMessage(WM_CLOSE); + } +} + diff --git a/examples/osgviewerMFC/MFC_OSG_MDIView.h b/examples/osgviewerMFC/MFC_OSG_MDIView.h new file mode 100644 index 000000000..aa5a50886 --- /dev/null +++ b/examples/osgviewerMFC/MFC_OSG_MDIView.h @@ -0,0 +1,51 @@ +// MFC_OSG_MDIView.h : interface of the CMFC_OSG_MDIView class +// +#pragma once + +#include "MFC_OSG.h" + +class CMFC_OSG_MDIView : public CView +{ +protected: // create from serialization only + CMFC_OSG_MDIView(); + DECLARE_DYNCREATE(CMFC_OSG_MDIView) + +// Attributes +public: + CMFC_OSG_MDIDoc* GetDocument() const; + +// Operations +public: + +// Overrides +public: + virtual void OnDraw(CDC* pDC); // overridden to draw this view + virtual void OnInitialUpdate(); + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); +protected: + +// Implementation +public: + virtual ~CMFC_OSG_MDIView(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + cOSG* mOSG; + +// Generated message map functions +protected: + DECLARE_MESSAGE_MAP() + + afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); + afx_msg void OnDestroy(); + afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); +}; + +#ifndef _DEBUG // debug version in MFC_OSG_MDIView.cpp +inline CMFC_OSG_MDIDoc* CMFC_OSG_MDIView::GetDocument() const + { return reinterpret_cast(m_pDocument); } +#endif + diff --git a/examples/osgviewerMFC/MainFrm.cpp b/examples/osgviewerMFC/MainFrm.cpp new file mode 100644 index 000000000..98d785521 --- /dev/null +++ b/examples/osgviewerMFC/MainFrm.cpp @@ -0,0 +1,114 @@ +// MainFrm.cpp : implementation of the CMainFrame class +// + +#include "stdafx.h" +#include "MFC_OSG_MDI.h" + +#include "MainFrm.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CMainFrame + +IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd) + +BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) + ON_WM_CREATE() +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() +{ + m_bAutoMenuEnable = false; +} + +CMainFrame::~CMainFrame() +{ +} + + +int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) +{ + if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) + return -1; + + if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT) || + !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) + { + TRACE0("Failed to create toolbar\n"); + return -1; // fail to create + } + if (!m_wndDlgBar.Create(this, IDR_MAINFRAME, + CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR)) + { + TRACE0("Failed to create dialogbar\n"); + return -1; // fail to create + } + + if (!m_wndReBar.Create(this) || + !m_wndReBar.AddBar(&m_wndToolBar) || + !m_wndReBar.AddBar(&m_wndDlgBar)) + { + TRACE0("Failed to create rebar\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 + } + + // TODO: Remove this if you don't want tool tips + m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | + CBRS_TOOLTIPS | CBRS_FLYBY); + + return 0; +} + +BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) +{ + if( !CMDIFrameWnd::PreCreateWindow(cs) ) + return FALSE; + // TODO: Modify the Window class or styles here by modifying + // the CREATESTRUCT cs + + 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 + + + diff --git a/examples/osgviewerMFC/MainFrm.h b/examples/osgviewerMFC/MainFrm.h new file mode 100644 index 000000000..6b7866284 --- /dev/null +++ b/examples/osgviewerMFC/MainFrm.h @@ -0,0 +1,44 @@ +// MainFrm.h : interface of the CMainFrame class +// + + +#pragma once + +class CMainFrame : public CMDIFrameWnd +{ + DECLARE_DYNAMIC(CMainFrame) +public: + CMainFrame(); + +// Attributes +public: + +// Operations +public: + +// Overrides +public: + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + +// 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; + CReBar m_wndReBar; + CDialogBar m_wndDlgBar; + +// Generated message map functions +protected: + afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); + afx_msg void OnTimer(UINT nIDEvent); + DECLARE_MESSAGE_MAP() +}; + + diff --git a/examples/osgviewerMFC/ReadMe.txt b/examples/osgviewerMFC/ReadMe.txt new file mode 100644 index 000000000..30b2b118f --- /dev/null +++ b/examples/osgviewerMFC/ReadMe.txt @@ -0,0 +1,9 @@ +This project is a very simple implementation of the Microsoft Multiple Document/View Architecture. +The only changes needed to compile the project should be to modify the include paths for headers +and librarys. This project was written to show how to implement the new osgViewer library with MFC. + +There is only one problem that I have seen to this point and that is when you have multiple OSG documents +open and then you close one of them then all remaining OSG documents quit rendering. I have a small work +around in the code that calls AfxMessageBox when the closing windows tread exits and this keeps the other +windows rendering correctly. Not sure what the problem is at this point so if anyone finds the cause and +has a fix please update the code. \ No newline at end of file diff --git a/examples/osgviewerMFC/Resource.h b/examples/osgviewerMFC/Resource.h new file mode 100644 index 000000000..3622e18de --- /dev/null +++ b/examples/osgviewerMFC/Resource.h @@ -0,0 +1,18 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by MFC_OSG_MDI.rc +// +#define IDD_ABOUTBOX 100 +#define IDR_MAINFRAME 128 +#define IDR_MFC_OSG_MDITYPE 129 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 130 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 32771 +#endif +#endif diff --git a/examples/osgviewerMFC/res/MFC_OSG_MDI.ico b/examples/osgviewerMFC/res/MFC_OSG_MDI.ico new file mode 100644 index 000000000..8a84ca3d3 Binary files /dev/null and b/examples/osgviewerMFC/res/MFC_OSG_MDI.ico differ diff --git a/examples/osgviewerMFC/res/MFC_OSG_MDI.rc2 b/examples/osgviewerMFC/res/MFC_OSG_MDI.rc2 new file mode 100644 index 000000000..2df74c228 --- /dev/null +++ b/examples/osgviewerMFC/res/MFC_OSG_MDI.rc2 @@ -0,0 +1,13 @@ +// +// MFC_OSG_MDI.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... + +///////////////////////////////////////////////////////////////////////////// diff --git a/examples/osgviewerMFC/res/MFC_OSG_MDIDoc.ico b/examples/osgviewerMFC/res/MFC_OSG_MDIDoc.ico new file mode 100644 index 000000000..2a1f1ae6e Binary files /dev/null and b/examples/osgviewerMFC/res/MFC_OSG_MDIDoc.ico differ diff --git a/examples/osgviewerMFC/res/Toolbar.bmp b/examples/osgviewerMFC/res/Toolbar.bmp new file mode 100644 index 000000000..d501723c1 Binary files /dev/null and b/examples/osgviewerMFC/res/Toolbar.bmp differ diff --git a/examples/osgviewerMFC/stdafx.cpp b/examples/osgviewerMFC/stdafx.cpp new file mode 100644 index 000000000..7c320f547 --- /dev/null +++ b/examples/osgviewerMFC/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// MFC_OSG_MDI.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/examples/osgviewerMFC/stdafx.h b/examples/osgviewerMFC/stdafx.h new file mode 100644 index 000000000..bba99695a --- /dev/null +++ b/examples/osgviewerMFC/stdafx.h @@ -0,0 +1,64 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +#ifndef _SECURE_ATL +#define _SECURE_ATL 1 +#endif + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Allow use of features specific to Windows XP or later. +#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. +#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. +#endif + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include // MFC core and standard components +#include // MFC extensions + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_IA64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + +