#include "OgreExport.h" #include "resource.h" static OgreMaxExport_General* sInst; void OgreMaxExport_General::onInitDialog(HWND hDlg) { OgreMaxExport_TabPaneHandler::onInitDialog(hDlg); // set the initial dialog state std::stringstream ss; SetWindowText(GetDlgItem(m_hDlg, IDC_TXT_EXPORT_DIR), m_config.getExportPath().c_str()); SendMessage(GetDlgItem(m_hDlg, IDC_CHK_FLIP_YZ), BM_SETCHECK, (m_config.getInvertYZ() ? BST_CHECKED : BST_UNCHECKED), 0); ss << m_config.getScale(); SetWindowText(GetDlgItem(m_hDlg, IDC_TXT_SCALE), ss.str().c_str()); } void OgreMaxExport_General::onInvertYZ(bool checked) { m_config.setInvertYZ(checked); } void OgreMaxExport_General::onSetScale(float newScale) { } void OgreMaxExport_General::onExportDirectoryChanged(const std::string& newDirectory) { m_config.setExportPath(newDirectory); } void OgreMaxExport_General::onDestroy() { update(); } // read the contents from the dialog controls void OgreMaxExport_General::update() { char buf[64]; // export path is not settable in the dialog at this time, skip it // get the scale and invert-YZ settings m_config.setInvertYZ(BST_CHECKED==IsDlgButtonChecked(m_hDlg, IDC_CHK_FLIP_YZ)); // we really can only do this here unless we want to process every keystroke in the scale edit box GetWindowText(GetDlgItem(m_hDlg, IDC_TXT_SCALE), buf, 64); float scale = atof(buf); if (scale == 0.0f) //sets to 0.0 if the text cannot be converted; change to 1.0 in that case scale = 1.0f; m_config.setScale(scale); } // for the sake of sanity, keep the dlgproc and the handler class implementation here in the same source file INT_PTR CALLBACK GeneralTabDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: sInst = (OgreMaxExport_General*) lParam; sInst->onInitDialog(hDlg); SetWindowPos(hDlg, HWND_TOP, 10, 40, 0, 0, SWP_NOSIZE); ShowWindow(hDlg, SW_SHOW); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SELECT_EXPORT_DIR: switch(HIWORD(wParam)) { case BN_CLICKED: break; } break; case IDC_CHK_FLIP_YZ: sInst->onInvertYZ(BST_CHECKED==IsDlgButtonChecked(hDlg, IDC_CHK_FLIP_YZ)); break; } break; case WM_DESTROY: sInst->onDestroy(); break; } return FALSE; }