SkinDlg.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // SkinDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "QQ.h"
  5. #include "SkinDlg.h"
  6. #define ITEM_WIDTH 150
  7. #define ITEM_HEIGHT 75
  8. #define ITEM_GAP_X 5
  9. #define ITEM_GAP_Y 5
  10. // CSkinDlg 对话框
  11. IMPLEMENT_DYNAMIC(CSkinDlg, CSkinManager)
  12. CSkinDlg::CSkinDlg(CWnd* pParent /*=NULL*/)
  13. : CSkinManager(IDD_SKIN, pParent)
  14. {
  15. m_pImageTest = NULL;
  16. ZeroMemory(m_pImageSkin,sizeof m_pImageSkin);
  17. ZeroMemory(&m_rcItem,sizeof m_rcItem);
  18. ZeroMemory(&m_bLeftDrawExtrude,sizeof m_bLeftDrawExtrude);
  19. m_nHovenItem = 0;
  20. m_nSelItem = 0;
  21. }
  22. CSkinDlg::~CSkinDlg()
  23. {
  24. RenderEngine->RemoveImage(m_pImageTest);
  25. for (int i=0;i<SKIN_COUNT;i++)
  26. {
  27. RenderEngine->RemoveImage(m_pImageSkin[i]);
  28. }
  29. }
  30. void CSkinDlg::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CSkinManager::DoDataExchange(pDX);
  33. }
  34. BEGIN_MESSAGE_MAP(CSkinDlg, CSkinManager)
  35. ON_WM_SETCURSOR()
  36. ON_WM_LBUTTONDOWN()
  37. END_MESSAGE_MAP()
  38. BOOL CSkinDlg::OnInitDialog()
  39. {
  40. CSkinManager::OnInitDialog();
  41. m_pImageTest = RenderEngine->GetImage(TEXT("QQ\\Skin\\fengmian_2.png"));
  42. m_pImageSkin[0] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main1.jpg"));
  43. m_pImageSkin[1] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main2.jpg"));
  44. m_pImageSkin[2] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main3.jpg"));
  45. m_pImageSkin[3] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main4.jpg"));
  46. m_pImageSkin[4] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main5.jpg"));
  47. m_pImageSkin[5] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main6.jpg"));
  48. m_pImageSkin[6] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main7.jpg"));
  49. m_pImageSkin[7] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main8.jpg"));
  50. m_pImageSkin[8] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main9.jpg"));
  51. m_pImageSkin[9] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main10.jpg"));
  52. m_pImageSkin[10] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main11.jpg"));
  53. m_pImageSkin[11] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main12.jpg"));
  54. m_pImageSkin[12] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main13.jpg"));
  55. m_pImageSkin[13] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main14.jpg"));
  56. m_pImageSkin[14] = RenderEngine->GetImage(TEXT("QQ\\Skin\\main15.jpg"));
  57. //其实这里应该是读取配置文件的,为了测试效果,就不做这个了
  58. for (int i=0;i<SKIN_COUNT;i++)
  59. {
  60. if( i>11 )
  61. m_bLeftDrawExtrude[i] = true;
  62. else
  63. m_bLeftDrawExtrude[i] = false;
  64. }
  65. int nLeft = 0;
  66. int nTop = 0;
  67. for (int i=0,j=0;i<SKIN_COUNT;i++)
  68. {
  69. nLeft = 25 + (ITEM_WIDTH+ITEM_GAP_X)*(i%3);
  70. if ( i%3 == 0 )
  71. {
  72. nTop = 70 + (ITEM_HEIGHT+ITEM_GAP_Y)*j;
  73. j++;
  74. }
  75. m_rcItem[i].SetRect(nLeft,nTop,nLeft+ITEM_WIDTH,nTop+ITEM_HEIGHT);
  76. }
  77. return TRUE;
  78. }
  79. void CSkinDlg::DrawClientArea( CDC*pDC,int nWidth,int nHeight )
  80. {
  81. CSkinManager::DrawClientArea(pDC,nWidth,nHeight);
  82. pDC->FillSolidRect(1,62,nWidth-3,nHeight-64,RGB(249,245,237));
  83. for (int i=0,j=0;i<SKIN_COUNT;i++)
  84. if ( m_pImageSkin[i] != NULL && !m_pImageSkin[i]->IsNull() )
  85. m_pImageSkin[i]->DrawImage(pDC,m_rcItem[i]);
  86. if ( m_nHovenItem < SKIN_COUNT )
  87. {
  88. CImageEx *pImage = m_pImageSkin[m_nHovenItem];
  89. if ( pImage != NULL && !pImage->IsNull() )
  90. pImage->DrawImage(pDC,nWidth-215,70,200,200,(m_bLeftDrawExtrude[m_nHovenItem]?0:(pImage->GetWidth()-200)),0,(m_bLeftDrawExtrude[m_nHovenItem]?pImage->GetWidth()/3:200),200);
  91. }
  92. if ( m_pImageTest != NULL && !m_pImageTest->IsNull() )
  93. {
  94. m_pImageTest->DrawImage(pDC,nWidth-215,70,200,410);
  95. }
  96. }
  97. BOOL CSkinDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
  98. {
  99. CRect rcClient;
  100. GetClientRect(&rcClient);
  101. CPoint point;
  102. GetCursorPos(&point);
  103. ScreenToClient(&point);
  104. static int nOldHoven = -1;
  105. for (int i=0,j=0;i<SKIN_COUNT;i++)
  106. {
  107. if ( PtInRect(&m_rcItem[i],point))
  108. {
  109. m_nHovenItem = i;
  110. SetCursor(LoadCursor(GetModuleHandle(SKINUI_DLL_NAME),MAKEINTRESOURCE(8000)));
  111. if( nOldHoven != m_nHovenItem )
  112. {
  113. nOldHoven = m_nHovenItem;
  114. Invalidate(FALSE);
  115. }
  116. return TRUE;
  117. }
  118. }
  119. return CSkinManager::OnSetCursor(pWnd, nHitTest, message);
  120. }
  121. void CSkinDlg::OnLButtonDown( UINT nFlags, CPoint point )
  122. {
  123. for (int i=0,j=0;i<SKIN_COUNT;i++)
  124. {
  125. if ( PtInRect(&m_rcItem[i],point))
  126. {
  127. m_nHovenItem = i;
  128. TCHAR szWorkDirectory[MAX_PATH];
  129. RenderEngine->GetWorkDirectory(szWorkDirectory,MAX_PATH);
  130. ZeroMemory(GlobalUnits->m_szDefaultSkin,CountArray(GlobalUnits->m_szDefaultSkin));
  131. _sntprintf_s(GlobalUnits->m_szDefaultSkin,CountArray(GlobalUnits->m_szDefaultSkin),TEXT("%s\\QQ\\Skin\\main%d.jpg"),szWorkDirectory,i+1);
  132. GlobalUnits->m_bLeftDrawExtrude = m_bLeftDrawExtrude[i];
  133. CSkinManager::UpdateSkin();
  134. Invalidate(FALSE);
  135. break;
  136. }
  137. }
  138. CSkinManager::OnLButtonDown(nFlags, point);
  139. }
  140. // CSkinDlg 消息处理程序