⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 此书为Visual C++ 高级编程技术OpenGL篇
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Triangle.h"

#include "MainFrm.h"
#include "TriangleView.h"
#include "body.h"
#include <string.h>

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_COMMAND_EX(CG_ID_VIEW_FRAMEDIALOGBAR, OnBarCheck)
	ON_UPDATE_COMMAND_UI(CG_ID_VIEW_FRAMEDIALOGBAR, OnUpdateControlBarMenu)
	ON_COMMAND_EX(CG_ID_VIEW_INFOBAR, OnBarCheck)
	ON_UPDATE_COMMAND_UI(CG_ID_VIEW_INFOBAR, OnUpdateControlBarMenu)
	ON_WM_CREATE()
	ON_COMMAND_EX(CG_ID_VIEW_SKELETENDIALOGBAR, OnBarCheck)
	ON_UPDATE_COMMAND_UI(CG_ID_VIEW_SKELETENDIALOGBAR, OnUpdateControlBarMenu)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_PALETTECHANGED()
	ON_WM_QUERYNEWPALETTE()
	ON_NOTIFY(TVN_SELCHANGED, IDC_BODYTREE, OnSelchangedTree)
	ON_BN_CLICKED(IDC_BUTTON_PLAY, OnButtonPlay)
	ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)
	ON_BN_CLICKED(IDC_BUTTON_ADDGROUP, OnButtonAddGroup)
	ON_BN_CLICKED(IDC_BUTTON_DELGROUP, OnButtonDelGroup)
	ON_BN_CLICKED(IDC_BUTTON_ADDFRAME, OnButtonAddFrame)
	ON_BN_CLICKED(IDC_BUTTON_DELFRAME, OnButtonDelFrame)
	ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)
	ON_BN_CLICKED(IDC_BUTTON_PREV, OnButtonPrev)
	ON_BN_CLICKED(IDC_BUTTON_FIRST, OnButtonFirst)
	ON_BN_CLICKED(IDC_BUTTON_LAST, OnButtonLast)
	ON_COMMAND(ID_TOGGLE_ATTRIBUTEBAR, OnToggleAttributebar)
	ON_UPDATE_COMMAND_UI(ID_TOGGLE_ATTRIBUTEBAR, OnUpdateToggleAttributebar)
	ON_COMMAND(ID_TOGGLE_MANIPULATEBAR, OnToggleManipulatebar)
	ON_UPDATE_COMMAND_UI(ID_TOGGLE_MANIPULATEBAR, OnUpdateToggleManipulatebar)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static char *BodyTypes[] = 
{
	"body            ",	
	"upper_body      ",
	"head            ",
	"shoulder        ",
	"left_arm        ",
	"right_arm       ",	
	"left_upper_arm  ",
	"right_upper_arm ",	
	"left_lower_arm  ",
	"right_lower_arm ",	
	"left_hand       ",
	"right_hand      ",	
	"lower_body      ",	
	"left_leg        ",
	"right_leg       ",	
	"left_upper_leg  ",
	"right_upper_leg ",	
	"left_lower_leg  ",
	"right_lower_leg ",	
	"left_foot       ",
	"right_foot      ",
	"left_elbow      ",
	"right_elbow     ",
	"left_wrist     ",
	"right_wrist     ",
	"left_knee       ",
	"right_knee      ",
	"left_ankle      ",
	"right_ankle     "
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_pView = NULL;	
	body_id = BODY;
}

CMainFrame::~CMainFrame()
{
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	//  the CREATESTRUCT cs

	return CFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

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

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

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) 
	{
    CView* pView = GetActiveView();
    if (pView) 
		{
        // OnPaletteChanged is not public, so send a message.
        pView->SendMessage(WM_PALETTECHANGED,
                           (WPARAM)(pFocusWnd->GetSafeHwnd()),
                           (LPARAM)0);
		}
	}

BOOL CMainFrame::OnQueryNewPalette() 
	{
	CView* pView = GetActiveView();
    if (pView)
		{
        return pView->SendMessage(WM_QUERYNEWPALETTE,
                                  (WPARAM)0,
                                  (LPARAM)0);
	    }
    return FALSE; 
	}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndManipulateBar.Create(this) ||
		!m_wndManipulateBar.LoadToolBar(IDR_MANIPULATEBAR))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;
	}

	m_wndManipulateBar.SetBarStyle(m_wndManipulateBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	m_wndManipulateBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndManipulateBar);

	if (!m_wndAttributeBar.Create(this) ||
		!m_wndAttributeBar.LoadToolBar(IDR_ATTRIBUTEBAR))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	m_wndAttributeBar.SetBarStyle(m_wndAttributeBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	m_wndAttributeBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndAttributeBar);

	// TODO: Add a menu item that will toggle the visibility of the
	// dialog bar named "Skeleten Dialog Bar":
	//   1. In ResourceView, open the menu resource that is used by
	//      the CMainFrame class
	//   2. Select the View submenu
	//   3. Double-click on the blank item at the bottom of the submenu
	//   4. Assign the new item an ID: CG_ID_VIEW_SKELETENDIALOGBAR
	//   5. Assign the item a Caption: Skeleten Dialog Bar

	// TODO: Change the value of CG_ID_VIEW_SKELETENDIALOGBAR to an appropriate value:
	//   1. Open the file resource.h
	// CG: The following block was inserted by the 'Dialog Bar' component
	{
		// Initialize dialog bar m_wndSkeletenDialogBar
		if (!m_wndSkeletenDialogBar.Create(this, CG_IDD_SKELETENDIALOGBAR,
			CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
			CG_ID_VIEW_SKELETENDIALOGBAR))
		{
			TRACE0("Failed to create dialog bar m_wndSkeletenDialogBar\n");
			return -1;		// fail to create
		}

		m_wndSkeletenDialogBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
		EnableDocking(CBRS_ALIGN_ANY);
		DockControlBar(&m_wndSkeletenDialogBar);
	}

    CTreeCtrl *pTreeCtrl = (CTreeCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_BODYTREE);
	TV_INSERTSTRUCT temp;
	temp.hParent = NULL;
	temp.hInsertAfter = TVI_LAST;
	temp.item.mask = TVIF_TEXT;
	temp.item.hItem = NULL;
	temp.item.state = 0;
	temp.item.stateMask = 0;
	temp.item.cchTextMax = 12;
	temp.item.iSelectedImage = 0;
	temp.item.cChildren = 0;
	temp.item.lParam = 0;

	temp.item.pszText = "body";
	body = pTreeCtrl->InsertItem(&temp);

	temp.hParent = body;
	temp.item.pszText = "upper_body";
	upper_body = pTreeCtrl->InsertItem(&temp);

	temp.hParent = body;
	temp.item.pszText = "lower_body";
	lower_body = pTreeCtrl->InsertItem(&temp);

	temp.hParent = upper_body;
	temp.item.pszText = "head";
	head = pTreeCtrl->InsertItem(&temp);

	temp.hParent = upper_body;
	temp.item.pszText = "shoulder";
	shoulder = pTreeCtrl->InsertItem(&temp);

	temp.hParent = upper_body;
	temp.item.pszText = "left_arm";
	left_arm = pTreeCtrl->InsertItem(&temp);

	temp.hParent = upper_body;
	temp.item.pszText = "right_arm";
	right_arm = pTreeCtrl->InsertItem(&temp);

	temp.hParent = lower_body;
	temp.item.pszText = "left_leg";
	left_leg = pTreeCtrl->InsertItem(&temp);

	temp.hParent = lower_body;
	temp.item.pszText = "right_leg";
	right_leg = pTreeCtrl->InsertItem(&temp);

	temp.hParent = left_arm;
	temp.item.pszText = "left_upper_arm";
	left_upper_arm = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "left_lower_arm";
	left_lower_arm = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "left_hand";
	left_hand = pTreeCtrl->InsertItem(&temp);

	temp.hParent = right_arm;
	temp.item.pszText = "right_upper_arm";
	right_upper_arm = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "right_lower_arm";
	right_lower_arm = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "right_hand";
	right_hand = pTreeCtrl->InsertItem(&temp);

	temp.hParent = left_leg;
	temp.item.pszText = "left_upper_leg";
	left_upper_leg = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "left_lower_leg";
	left_lower_leg = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "left_foot";
	left_foot = pTreeCtrl->InsertItem(&temp);

	temp.hParent = right_leg;
	temp.item.pszText = "right_upper_leg";
	right_upper_leg = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "right_lower_leg";
	right_lower_leg = pTreeCtrl->InsertItem(&temp);

	temp.item.pszText = "right_foot";
	right_foot = pTreeCtrl->InsertItem(&temp);

	CSpinButtonCtrl *pSpin;

	pSpin = (CSpinButtonCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_SPIN_BODYTYPE);
	pSpin->SetRange(0, 1);
	pSpin->SetPos(0);
	
	pSpin = (CSpinButtonCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_SPIN_ORIENTATIONX);
	pSpin->SetRange(0, 1);
	pSpin->SetPos(0);

	pSpin = (CSpinButtonCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_SPIN_ORIENTATIONY);
	pSpin->SetRange(0, 1);
	pSpin->SetPos(0);

	pSpin = (CSpinButtonCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_SPIN_POSITIONY);
	pSpin->SetRange(0, 1);
	pSpin->SetPos(0);

	CString str = "Body Type : ";
	str += (LPCTSTR)BodyTypes[body_id];
	m_wndSkeletenDialogBar.SetDlgItemText(IDC_STATIC_BODYTYPE, (LPCTSTR)str);
	// TODO: Add a menu item that will toggle the visibility of the
	// dialog bar named "Frame Dialog Bar":
	//   1. In ResourceView, open the menu resource that is used by
	//      the CMainFrame class
	//   2. Select the View submenu
	//   3. Double-click on the blank item at the bottom of the submenu
	//   4. Assign the new item an ID: CG_ID_VIEW_FRAMEDIALOGBAR
	//   5. Assign the item a Caption: Frame Dialog Bar

	// TODO: Change the value of CG_ID_VIEW_FRAMEDIALOGBAR to an appropriate value:
	//   1. Open the file resource.h
	// CG: The following block was inserted by the 'Dialog Bar' component
	{
		// Initialize dialog bar m_wndFrameDialogBar
		if (!m_wndFrameDialogBar.Create(this, CG_IDD_FRAMEDIALOGBAR,
			CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
			CG_ID_VIEW_FRAMEDIALOGBAR))
		{
			TRACE0("Failed to create dialog bar m_wndFrameDialogBar\n");
			return -1;		// fail to create
		}

		m_wndFrameDialogBar.EnableDocking(CBRS_ALIGN_BOTTOM | CBRS_ALIGN_TOP);
		EnableDocking(CBRS_ALIGN_ANY);
		DockControlBar(&m_wndFrameDialogBar);
	}

	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	return 0;
}

void CMainFrame::SetRoot(void)
{
   CTreeCtrl *pTreeCtrl = (CTreeCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_BODYTREE);
	pTreeCtrl->SelectItem(pTreeCtrl->GetRootItem());
}

void CMainFrame::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
    CTreeCtrl *pTreeCtrl = (CTreeCtrl*)m_wndSkeletenDialogBar.GetDlgItem(IDC_BODYTREE);

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	HTREEITEM hNewItem;
	HTREEITEM hOldItem;
    CString str = "Body Type : ";

	hOldItem = pNMTreeView->itemOld.hItem;

	hNewItem = pNMTreeView->itemNew.hItem;

	if(hNewItem != NULL)
	{
	  if(hNewItem == body)
	  {
		  body_id = BODY;
	  }else
	  if(hNewItem == upper_body)
	  {
		  body_id = UPPER_BODY;
	  }else
	  if(hNewItem == lower_body)
	  {
		  body_id = LOWER_BODY;
	  }else
	  if(hNewItem == left_arm)
	  {
		  body_id = LEFT_ARM;
	  }else
	  if(hNewItem == right_arm)
	  {
		  body_id = RIGHT_ARM;
	  }else
	  if(hNewItem == left_leg)
	  {
		  body_id = LEFT_LEG;
	  }else
	  if(hNewItem == right_leg)
	  {
		  body_id = RIGHT_LEG;
	  }else
	  if(hNewItem == left_upper_arm)
	  {
		  body_id = LEFT_UPPER_ARM;
	  }else
	  if(hNewItem == right_upper_arm)
	  {
		  body_id = RIGHT_UPPER_ARM;
	  }else
	  if(hNewItem == left_lower_arm)
	  {
		  body_id = LEFT_LOWER_ARM;
	  }else
	  if(hNewItem == right_lower_arm)
	  {
		  body_id = RIGHT_LOWER_ARM;
	  }else
	  if(hNewItem == left_hand)
	  {
		  body_id = LEFT_HAND;
	  }else
	  if(hNewItem == right_hand)
	  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -