MyColorDlgBar.cpp
上传用户:cding2008
上传日期:2007-01-03
资源大小:1812k
文件大小:19k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // MyColorDlgBar.cpp : implementation file of the CMycolorDlgBar class
  3. //
  4. // ModelMagic 3D and 'glOOP' (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1999
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. /////////////////////////////////////////////////////////////////////////////
  17. #include "stdafx.h"
  18. #include "ModelMagic3D.h"
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24. ////////////////////////////////////////////////////////////////////
  25. // CMyColorDlgBar globals
  26. // RECT {left, top, right, bottom };
  27. static RECT rectColorPaletteWnd = {  5,   5, 110, 100};
  28. static RECT rectGradientWnd = {112,   5, 125, 100};
  29. static RECT rectSliderWnd = {125,   0, 140, 105};
  30. static RECT rectLButtonWnd = {  5, 105, 137, 130};
  31. static RECT rectComboBox = {  5, 135, 137, 245};
  32. //static RECT rectLButtonWnd = {  5, 105,  85, 130};
  33. //static RECT rectRButtonWnd = { 57, 115, 137, 140};
  34. //static RECT rectComboBox = {  5, 145, 137, 245};
  35. ////////////////////////////////////////////////////////////////////
  36. // CMyColorDlgBar Construction/Destruction
  37. CMyColorDlgBar::CMyColorDlgBar()
  38. {
  39. m_pColorWnd = NULL;
  40. m_pLButtonWnd = NULL;
  41. // m_pRButtonWnd = NULL;
  42. m_pColorGradientWnd = NULL;
  43. m_pSliderCtrl = NULL;
  44. m_pComboBox = NULL;
  45. m_Color.SetColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Default to White
  46. m_ColorRef.SetColor4f(1.0f, 1.0f, 1.0f, 1.0f);
  47. m_Color.m_szName = "White";
  48. m_iSliderMaxRange = 255;
  49. }
  50.  
  51. CMyColorDlgBar::~CMyColorDlgBar()
  52. {
  53. }
  54.  
  55.  
  56. BOOL CMyColorDlgBar::Create( CWnd* pParentWnd,
  57.  UINT nIDTemplate,
  58.  UINT nStyle,
  59.  UINT nID, BOOL bChange)
  60. {
  61. if(!CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID))
  62. return FALSE;
  63.  
  64. m_bChangeDockedSize = bChange;
  65. m_sizeFloating = m_sizeDocked = m_sizeDefault;
  66. return TRUE;
  67. }
  68.  
  69. BOOL CMyColorDlgBar::Create( CWnd* pParentWnd,
  70.  LPCTSTR lpszTemplateName,
  71.  UINT nStyle,
  72.  UINT nID, BOOL bChange)
  73. {
  74. if (!CDialogBar::Create( pParentWnd, lpszTemplateName,
  75.                              nStyle, nID))
  76. return FALSE;
  77.  
  78. m_bChangeDockedSize = bChange;
  79. m_sizeFloating = m_sizeDocked = m_sizeDefault;
  80. return TRUE;
  81. }
  82.  
  83. ////////////////////////////////////////////////////////////////////
  84. // Overloaded functions
  85. CSize CMyColorDlgBar::CalcDynamicLayout(int nLength, DWORD nMode)
  86. {
  87.     // Return default if it is being docked or floated
  88.     if ((nMode & LM_VERTDOCK) || (nMode & LM_HORZDOCK))
  89.     {
  90.         if (nMode & LM_STRETCH) // if not docked stretch to fit
  91.             return CSize((nMode & LM_HORZ) ? 32767 : m_sizeDocked.cx,
  92.                          (nMode & LM_HORZ) ? m_sizeDocked.cy : 32767);
  93.           else
  94.             return m_sizeDocked;
  95.     }
  96.     if (nMode & LM_MRUWIDTH)
  97.         return m_sizeFloating;
  98.     // In all other cases, accept the dynamic length
  99.     if (nMode & LM_LENGTHY)
  100.         return CSize(m_sizeFloating.cx, (m_bChangeDockedSize) ?
  101.                      m_sizeFloating.cy = m_sizeDocked.cy = nLength :
  102.                      m_sizeFloating.cy = nLength);
  103.      else
  104.         return CSize((m_bChangeDockedSize) ?
  105.                      m_sizeFloating.cx = m_sizeDocked.cx = nLength :
  106.                      m_sizeFloating.cx = nLength, m_sizeFloating.cy);
  107. }
  108. BEGIN_MESSAGE_MAP(CMyColorDlgBar, CDialogBar)
  109.     //{{AFX_MSG_MAP(CMyColorDlgBar)
  110. ON_WM_CREATE()
  111. ON_WM_PALETTECHANGED()
  112. ON_WM_QUERYNEWPALETTE()
  113. ON_WM_DESTROY()
  114. ON_WM_KEYDOWN()
  115. ON_WM_PAINT()
  116. ON_WM_VSCROLL()
  117. ON_CONTROL(CBN_DROPDOWN, IDC_COLORDLG_COMBO, OnDropdown)
  118. ON_CONTROL(CBN_SELCHANGE, IDC_COLORDLG_COMBO, OnSelchange)
  119. ON_WM_PARENTNOTIFY()
  120. ON_WM_TIMER()
  121. //}}AFX_MSG_MAP
  122. // USER defined messages
  123. ON_MESSAGE( WM_CPW_LBUTTONDOWN, OnColorPaletteLButtonDown)
  124. ON_MESSAGE( WM_CPW_RBUTTONDOWN, OnColorPaletteRButtonDown)
  125. END_MESSAGE_MAP()
  126. /////////////////////////////////////////////////////////////////////
  127. // CMyColorDlgBar methods/implementation
  128. void CMyColorDlgBar::PaintSelColorWnd(CWnd* pWnd, C3dColor* pColor)
  129. {
  130. if(!pWnd)
  131. return;
  132. // Get the size of color window
  133. RECT rect;
  134. pWnd->GetWindowRect(&rect);
  135. // Get a pointer to the windows device context
  136. CDC* pDC = pWnd->GetDC();
  137. if(pDC && pColor)
  138. pDC->FillSolidRect(0,
  139.    0,
  140.    rect.right-rect.left,
  141.    rect.bottom-rect.top,
  142.    COLORREF RGB(pColor->m_fColor[0]*255,
  143. pColor->m_fColor[1]*255,
  144. pColor->m_fColor[2]*255));
  145. ReleaseDC(pDC);
  146. }
  147. void CMyColorDlgBar::PaintObject(C3dColor* pColor)
  148. {
  149. if(!pColor)
  150. return;
  151. // Get a pointer to our windows main frame
  152. CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
  153. ASSERT_VALID(pMainFrame);
  154. // Get a pointer to our active view
  155. CMyglView* pView = (CMyglView*)pMainFrame->m_pActiveView;
  156. ASSERT_VALID(pView);
  157. // Get a pointer to our view's document
  158. CMyglDoc* pDoc = pView->GetDocument();
  159. ASSERT_VALID(pDoc);
  160. // Get a pointer to our document's 3dWorld
  161. C3dWorld* pWorld = pDoc->m_pWorld;
  162. ASSERT_VALID(pWorld);
  163. // Get a pointer to our worlds selected object
  164. C3dObject* pObj = pWorld->m_pSelectedObj;
  165. if(pObj)
  166. {
  167. // Set the objects color
  168. pObj->m_Color.SetColor4fv(pColor);
  169. // Force the object to rebuild its' display list
  170. pObj->m_bBuildLists = TRUE;
  171. }
  172. // Force a repaint of the active C3dWorld window
  173. if(pView)
  174. pView->InvalidateRect(NULL, FALSE);
  175. }
  176. void CMyColorDlgBar::ResetColorSlider()
  177. {
  178. int iStepsPlus;
  179. int iStepsMinus;
  180. // Bias our initial slider position based on the rgb color
  181. // values of our selected color
  182. m_iInitColorSliderPos = (int)(((m_Color.m_fColor[0]+m_Color.m_fColor[1]+m_Color.m_fColor[2])/3)*255);
  183. // Set the slider to our starting position
  184. m_pSliderCtrl->SetPos(m_iInitColorSliderPos);
  185. // Determine the number of incremental steps
  186. iStepsPlus  = m_iSliderMaxRange-m_iInitColorSliderPos;
  187. iStepsMinus = m_iInitColorSliderPos;
  188. // Define our color index values
  189. if(iStepsPlus)
  190. {
  191. m_fRedPlus = (1-m_Color.m_fColor[0])/iStepsPlus;
  192. m_fGrnPlus = (1-m_Color.m_fColor[1])/iStepsPlus;
  193. m_fBluPlus = (1-m_Color.m_fColor[2])/iStepsPlus;
  194. }
  195. else
  196. {
  197. m_fRedPlus = 0.0f;
  198. m_fGrnPlus = 0.0f;
  199. m_fBluPlus = 0.0f;
  200. }
  201. if(iStepsMinus)
  202. {
  203. m_fRedMinus = m_Color.m_fColor[0]/iStepsMinus;
  204. m_fGrnMinus = m_Color.m_fColor[1]/iStepsMinus;
  205. m_fBluMinus = m_Color.m_fColor[2]/iStepsMinus;
  206. }
  207. else
  208. {
  209. m_fRedMinus = 0.0f;
  210. m_fGrnMinus = 0.0f;
  211. m_fBluMinus = 0.0f;
  212. }
  213. PaintRangeWnd(&m_Color, m_iInitColorSliderPos, m_iSliderMaxRange);
  214. }
  215. void CMyColorDlgBar::PaintRangeWnd(C3dColor* pColor, int iPosn, int iRange)
  216. {
  217. CDC* pDC;
  218. RECT rect;
  219. int i, x, cx;
  220. // Get the size of the gradient window
  221. m_pColorGradientWnd->GetWindowRect(&rect);
  222. m_pColorGradientWnd->ScreenToClient(&rect);
  223. // Get a pointer to the windows device context
  224. pDC = m_pColorGradientWnd->GetDC();
  225. // Calcualte a few constants for later use...
  226. float fWindowHeight = (float)(rect.bottom-rect.top);
  227. float fGradientHeight = fWindowHeight/iRange;
  228. cx = (int)fGradientHeight;
  229. if(cx<1)
  230. cx=1;
  231. // Display gradient fill for colors below the CSliderCtrl
  232. // position.
  233. for(i=0; i<iPosn; i++)
  234. {
  235. float fColorScale = (float)i/iPosn;
  236. float gradientX = (fWindowHeight/iRange)*i;
  237. x = (int)gradientX;
  238. pDC->FillSolidRect(0, x,
  239.   (rect.right-rect.left), cx,
  240.   COLORREF RGB(pColor->m_fColor[0]*fColorScale*255,
  241.    pColor->m_fColor[1]*fColorScale*255,
  242.    pColor->m_fColor[2]*fColorScale*255));
  243. }
  244. // Display gradient fill for colors above the CSliderCtrl
  245. // position.
  246. for(i=iPosn; i<=iRange; i++)
  247. {
  248. float gradientX = (fWindowHeight/iRange)*i;
  249. x = (int)gradientX;
  250. float red = pColor->m_fColor[0]+(m_fRedPlus*(i-iPosn));
  251. float grn = pColor->m_fColor[1]+(m_fGrnPlus*(i-iPosn));
  252. float blu = pColor->m_fColor[2]+(m_fBluPlus*(i-iPosn));
  253. pDC->FillSolidRect(0, x,
  254.   (rect.right-rect.left), cx,
  255.   COLORREF RGB(red*255, grn*255, blu*255));
  256. }
  257. ReleaseDC(pDC);
  258. }
  259. /////////////////////////////////////////////////////////////////////
  260. // CMyColorDlgBar message handlers
  261. int CMyColorDlgBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  262. {
  263. if (CDialogBar::OnCreate(lpCreateStruct) == -1)
  264. return -1;
  265. // Get the last setting of the window position from
  266. // the ini file and restore
  267. WINDOWPLACEMENT wp;
  268. if (ReadWindowPlacement(&wp, "Settings", "ColorDlgWndPos"))
  269. SetWindowPlacement(&wp);
  270. // Initially hide the Dialog bar until all windows have been
  271. // positioned.
  272. ShowWindow(SW_HIDE);
  273. // Create a font for our DialogBar and our combo box
  274. m_hFont = ::CreateFont(-8, // nHeight
  275. 0, // nWidth
  276. 0, // nEscapement
  277. 0, // nOrientation
  278. FW_NORMAL, // nWeight
  279. FALSE, // bItalic
  280. FALSE, // bUnderline
  281. 0, // cStrikeOut
  282. ANSI_CHARSET, // nCharSet
  283. OUT_DEFAULT_PRECIS, // nOutPrecision
  284. CLIP_DEFAULT_PRECIS,// nClipPrecision
  285. DEFAULT_QUALITY, // nQuality
  286. DEFAULT_PITCH | // nPitchAndFamily
  287. FF_SWISS,
  288. "MS Sans Serif"); // lpszFacename
  289. // Set the child window font
  290. SendMessage(WM_SETFONT, (WPARAM)m_hFont, 0L);
  291. // Create the Color Palette window
  292. m_pColorWnd = new CMyColorPaletteWnd();
  293. if (!m_pColorWnd->Create(NULL, // dwExtStyle
  294. NULL, // Class Name
  295. "Palette Cube", // Window Name
  296. WS_CHILD | WS_VISIBLE | // dwStyle
  297. WS_DLGFRAME,
  298. rectColorPaletteWnd, // rect
  299. this, // CWnd* pParentWnd
  300. 0, // UINT  nID
  301. 0)) { // pContext
  302. delete m_pColorWnd;
  303. m_pColorWnd = NULL;
  304. return -1;
  305. }
  306. // Create the Left mouse color window
  307. m_pLButtonWnd = new CWnd();
  308. if (!m_pLButtonWnd->Create(NULL, // lpszClassName
  309. NULL, // lpszWindowName
  310. WS_CHILD | WS_VISIBLE | WS_DLGFRAME | WS_CLIPSIBLINGS, //dwStyle
  311. rectLButtonWnd, // rect
  312. this, // CWnd* pParentWnd
  313. IDC_COLORDLG_LBUTTONWND,// UINT  nID
  314. 0)) { // pContext
  315. delete m_pLButtonWnd;
  316. m_pLButtonWnd = NULL;
  317. return -1;
  318. }
  319. /*
  320. // Create the Right mouse color window
  321. m_pRButtonWnd = new CWnd();
  322. if (!m_pRButtonWnd->Create(NULL, // lpszClassName
  323. NULL, // lpszWindowName
  324. WS_CHILD | WS_VISIBLE | WS_DLGFRAME | WS_CLIPSIBLINGS, //dwStyle
  325. rectRButtonWnd, // rect
  326. this, // CWnd* pParentWnd
  327. IDC_COLORDLG_RBUTTONWND,// UINT  nID
  328. 0)) { // pContext
  329. delete m_pRButtonWnd;
  330. m_pRButtonWnd = NULL;
  331. return -1;
  332. }
  333. */
  334. // Create the color gradient window
  335. m_pColorGradientWnd = new CWnd();
  336. if (!m_pColorGradientWnd->Create(NULL, // lpszClassName
  337. NULL, // lpszWindowName
  338. WS_CHILD | WS_VISIBLE | WS_DLGFRAME | WS_CLIPSIBLINGS, //dwStyle
  339. rectGradientWnd, // rect
  340. this, // CWnd* pParentWnd
  341. NULL, //IDC_COLORDLG_RBUTTONWND,// UINT  nID
  342. 0)) { // pContext
  343. delete m_pColorGradientWnd;
  344. m_pColorGradientWnd = NULL;
  345. return -1;
  346. }
  347. // Create our color gradient slider control
  348. m_pSliderCtrl = new CSliderCtrl();
  349. if (!m_pSliderCtrl->Create(WS_CHILD | WS_VISIBLE | TBS_VERT | TBS_NOTICKS | TBS_LEFT, //dwStyle
  350.    rectSliderWnd, // rect
  351.    this, // CWnd* pParentWnd
  352.    IDC_COLORDLG_SLIDER)) { // UINT  nID
  353. delete m_pSliderCtrl;
  354. m_pSliderCtrl = NULL;
  355. return -1;
  356. }
  357. m_pSliderCtrl->SetRange(0, m_iSliderMaxRange, TRUE);
  358. // Create our color ComboBox
  359. m_pComboBox = new CComboBox();
  360. if (!m_pComboBox->Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, //dwStyle
  361.  rectComboBox, // rect
  362.  this, // CWnd* pParentWnd
  363.  IDC_COLORDLG_COMBO)) { // UINT  nID
  364. delete m_pComboBox;
  365. m_pComboBox = NULL;
  366. return -1;
  367. }
  368. // Set the combo box font
  369. m_pComboBox->SendMessage(WM_SETFONT, (WPARAM)m_hFont, 0L);
  370. // Start a timer, which when called will fill the combo box.  We need a slight
  371. // delay while the application creates a default world..
  372. SetTimer( 0, 900, NULL);
  373. return 0;
  374. }
  375. void CMyColorDlgBar::OnTimer(UINT nIDEvent) 
  376. {
  377. // Stop the timer
  378. KillTimer(0);
  379. // Fill the combo box
  380. OnDropdown();
  381. CDialogBar::OnTimer(nIDEvent);
  382. }
  383. void CMyColorDlgBar::OnPaint() 
  384. {
  385. CPaintDC dc(this); // device context for painting
  386. PaintSelColorWnd(m_pLButtonWnd, &m_Color);
  387. ResetColorSlider();
  388. // Do not call CDialogBar::OnPaint() for painting messages
  389. }
  390. void CMyColorDlgBar::OnPaletteChanged(CWnd* pFocusWnd) 
  391. {
  392. // Route message to CWnd derived class
  393. // Notify the Color Palette window of a palette change...
  394. if (m_pColorWnd) {
  395.         // OnPaletteChanged is not public, so send a message.
  396. m_pColorWnd->SendMessage(WM_PALETTECHANGED,
  397. (WPARAM)(pFocusWnd->GetSafeHwnd()),
  398. (LPARAM)0);
  399. }
  400. }
  401. BOOL CMyColorDlgBar::OnQueryNewPalette() 
  402. {
  403. // Route message to CWnd derived class
  404. // Notify the Color Palette window of a palette change...
  405. if (m_pColorWnd) {
  406.         // OnPaletteChanged is not public, so send a message.
  407. m_pColorWnd->SendMessage(WM_QUERYNEWPALETTE,
  408. (WPARAM)0,
  409. (LPARAM)0);
  410. }
  411. return FALSE;
  412. }
  413. void CMyColorDlgBar::OnDestroy() 
  414. {
  415. CDialogBar::OnDestroy();
  416. // Save the state of our CDialogBar derived class window
  417. WINDOWPLACEMENT wp;
  418. wp.length = sizeof wp;
  419. if (GetWindowPlacement(&wp))
  420. {
  421. wp.flags = 0;
  422. if (IsZoomed())
  423. wp.flags |= WPF_RESTORETOMAXIMIZED;
  424. // and write it to the .INI file
  425. WriteWindowPlacement(&wp, "Settings", "ColorDlgWndPos");
  426. }
  427. if(m_pColorWnd)
  428. {
  429. // Destroy the window and delete the class
  430. m_pColorWnd->DestroyWindow();
  431. delete m_pColorWnd;
  432. }
  433. /*
  434. if(m_pRButtonWnd)
  435. {
  436. // Destroy the right mouse color window and
  437. // delete the class
  438. m_pRButtonWnd->DestroyWindow();
  439. delete m_pRButtonWnd;
  440. }
  441. */
  442. if(m_pLButtonWnd)
  443. {
  444. // Destroy the left mouse color window and
  445. // delete the class
  446. m_pLButtonWnd->DestroyWindow();
  447. delete m_pLButtonWnd;
  448. }
  449. if(m_pColorGradientWnd)
  450. {
  451. // Destroy the color range window and
  452. // delete the class
  453. m_pColorGradientWnd->DestroyWindow();
  454. delete m_pColorGradientWnd;
  455. }
  456. if(m_pSliderCtrl)
  457. {
  458. // Destroy the left mouse color window and
  459. // delete the class
  460. m_pSliderCtrl->DestroyWindow();
  461. delete m_pSliderCtrl;
  462. }
  463. if(m_pComboBox)
  464. {
  465. // Destroy the combobox window and
  466. // delete the class
  467. m_pComboBox->DestroyWindow();
  468. delete m_pComboBox;
  469. }
  470. if(m_hFont)
  471. // Delete the font object
  472. DeleteObject(m_hFont);
  473. }
  474. void CMyColorDlgBar::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  475. {
  476. // Route message to CMyColorPaletteWnd derived CWnd class
  477. if (m_pColorWnd) {
  478. // OnKeyDown is not public, so send a message.
  479. m_pColorWnd->SendMessage(WM_KEYDOWN,
  480. (WPARAM)nChar,
  481. (LPARAM)nFlags<<16 | nRepCnt);
  482. }
  483. CDialogBar::OnKeyDown(nChar, nRepCnt, nFlags);
  484. }
  485. long CMyColorDlgBar::OnColorPaletteLButtonDown(WPARAM wParam, LPARAM lParam)
  486. {
  487. m_Color.m_fColor[0] = m_pColorWnd->m_fRed;
  488. m_Color.m_fColor[1] = m_pColorWnd->m_fGrn;
  489. m_Color.m_fColor[2] = m_pColorWnd->m_fBlu;
  490. m_ColorRef.m_fColor[0] = m_pColorWnd->m_fRed;
  491. m_ColorRef.m_fColor[1] = m_pColorWnd->m_fGrn;
  492. m_ColorRef.m_fColor[2] = m_pColorWnd->m_fBlu;
  493. PaintSelColorWnd(m_pLButtonWnd, &m_Color);
  494. // DisplayRGBValues();
  495. ResetColorSlider();
  496. return 0L;
  497. }
  498. long CMyColorDlgBar::OnColorPaletteRButtonDown(WPARAM wParam, LPARAM lParam)
  499. {
  500. // PaintSelColorWnd(m_pRButtonWnd, &m_Color);
  501. return 0L;
  502. }
  503. void CMyColorDlgBar::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  504. {
  505. // Note:  MFC maps vertically oriented CSliderCtrl to WM_VSCROLL
  506. //   and horizontally oriented CSliderCtrl to WM_HSCROLL
  507. int posn, delta;
  508. // Get the position of our color slider and calculate the 
  509. // difference in position to our initial position
  510. posn = m_pSliderCtrl->GetPos();
  511. delta = posn - m_iInitColorSliderPos;
  512. if(delta > 0)
  513. {
  514. m_Color.m_fColor[0] = m_ColorRef.m_fColor[0]+(m_fRedPlus*delta);
  515. m_Color.m_fColor[1] = m_ColorRef.m_fColor[1]+(m_fGrnPlus*delta);
  516. m_Color.m_fColor[2] = m_ColorRef.m_fColor[2]+(m_fBluPlus*delta);
  517. }
  518. else
  519. {
  520. m_Color.m_fColor[0] = m_ColorRef.m_fColor[0]+(m_fRedMinus*delta);
  521. m_Color.m_fColor[1] = m_ColorRef.m_fColor[1]+(m_fGrnMinus*delta);
  522. m_Color.m_fColor[2] = m_ColorRef.m_fColor[2]+(m_fBluMinus*delta);
  523. }
  524. // Limit check our color values
  525. if( m_Color.m_fColor[0] > 1.0f) // red
  526. m_Color.m_fColor[0] = 1.0f;
  527. if( m_Color.m_fColor[0] < 0.0f)
  528. m_Color.m_fColor[0] = 0.0f;
  529. if( m_Color.m_fColor[1] > 1.0f) // green
  530. m_Color.m_fColor[1] = 1.0f;
  531. if( m_Color.m_fColor[1] < 0.0f)
  532. m_Color.m_fColor[1] = 0.0f;
  533. if( m_Color.m_fColor[2] > 1.0f) // blue
  534. m_Color.m_fColor[2] = 1.0f;
  535. if( m_Color.m_fColor[2] < 0.0f)
  536. m_Color.m_fColor[2] = 0.0f;
  537. PaintSelColorWnd(m_pLButtonWnd, &m_Color);
  538. // DisplayRGBValues();
  539. CDialogBar::OnVScroll(nSBCode, nPos, pScrollBar);
  540. }
  541. void CMyColorDlgBar::OnDropdown() 
  542. {
  543. // Get a pointer to our windows main frame
  544. CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
  545. ASSERT_VALID(pMainFrame);
  546. // Get a pointer to our active view
  547. CMyglView* pView = (CMyglView*)pMainFrame->m_pActiveView;
  548. ASSERT_VALID(pView);
  549. // Get a pointer to our view's document
  550. CMyglDoc* pDoc = pView->GetDocument();
  551. ASSERT_VALID(pDoc);
  552. // Get a pointer to our document's 3dWorld
  553. C3dWorld* pWorld = pDoc->m_pWorld;
  554. ASSERT_VALID(pWorld);
  555. // Get a pointer to our color list
  556. C3dColorList* pList = &pWorld->m_ColorList;
  557. // Fill the color ComboBox listbox
  558. if(pList && m_pComboBox)
  559. pList->LoadComboBox(m_pComboBox, &m_Color);
  560. }
  561. void CMyColorDlgBar::OnSelchange() 
  562. {
  563. int select = m_pComboBox->GetCurSel();
  564. if(select == CB_ERR)
  565. return;
  566. C3dColor* pColor = (C3dColor*)m_pComboBox->GetItemData(select);
  567. if(pColor)
  568. {
  569. m_Color.m_fColor[0] = pColor->m_fColor[0];
  570. m_Color.m_fColor[1] = pColor->m_fColor[1];
  571. m_Color.m_fColor[2] = pColor->m_fColor[2];
  572. m_ColorRef.m_fColor[0] = pColor->m_fColor[0];
  573. m_ColorRef.m_fColor[1] = pColor->m_fColor[1];
  574. m_ColorRef.m_fColor[2] = pColor->m_fColor[2];
  575. PaintSelColorWnd(m_pLButtonWnd, &m_Color);
  576. // DisplayRGBValues();
  577. ResetColorSlider();
  578. }
  579. }
  580. void CMyColorDlgBar::OnParentNotify(UINT message, LPARAM lParam) 
  581. {
  582. CDialogBar::OnParentNotify(message, lParam);
  583. if(message == WM_LBUTTONDOWN)
  584. {
  585. CPoint point;
  586. point.x = lParam & 0x00FF; //mask
  587. point.y = lParam>>16;
  588. if(point.x > rectLButtonWnd.left &&
  589.    point.x < rectLButtonWnd.right &&
  590.    point.y > rectLButtonWnd.top &&
  591.    point.y < rectLButtonWnd.bottom)
  592. {
  593. PaintObject(&m_Color);
  594. }
  595. }
  596. if(message == WM_PAINT)
  597. {
  598. int temp = 0;
  599. }
  600. }