XTComboBoxEx.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTComboBoxEx.cpp : implementation of the CXTComboBoxEx class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "XTDefines.h"
  22. #include "XTGlobal.h"
  23. #include "XTComboBoxEx.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CXTComboBoxEx
  31. /////////////////////////////////////////////////////////////////////////////
  32. BOOL CXTComboBoxEx::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
  33. {
  34. #if (_MSC_VER <= 1100) // Using Visual C++ 5.0
  35. // initialize common controls
  36. INITCOMMONCONTROLSEX icex;
  37. icex.dwSize = sizeof(icex);
  38. icex.dwICC = ICC_USEREX_CLASSES;
  39. VERIFY(InitCommonControlsEx(&icex));
  40. #else
  41. // initialize common controls
  42. VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTL_USEREX_REG));
  43. #endif//#if (_MSC_VER <= 1100) // Using Visual C++ 5.0
  44. CWnd* pWnd = this;
  45. return pWnd->Create(WC_COMBOBOXEX, NULL, dwStyle, rect, pParentWnd, nID);
  46. }
  47. int CXTComboBoxEx::DeleteItem(int iIndex)
  48. {
  49. ASSERT(::IsWindow(m_hWnd));
  50. return (int) ::SendMessage(m_hWnd, CBEM_DELETEITEM, (WPARAM) iIndex, 0);
  51. }
  52. BOOL CXTComboBoxEx::GetItem(COMBOBOXEXITEM* pCBItem)
  53. {
  54. ASSERT(::IsWindow(m_hWnd));
  55. ASSERT(pCBItem != NULL);
  56. ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM)));
  57. return (int) ::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM) pCBItem);
  58. }
  59. int CXTComboBoxEx::InsertItem(const COMBOBOXEXITEM* pCBItem)
  60. {
  61. ASSERT(::IsWindow(m_hWnd));
  62. ASSERT(pCBItem != NULL);
  63. ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
  64. return (int) ::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM) pCBItem);
  65. }
  66. int CXTComboBoxEx::InsertItem(int iItem, UINT nStringID, int iIndent, int iImage, int iSelectedImage, UINT mask)
  67. {
  68. CString strItem;
  69. VERIFY(strItem.LoadString(nStringID));
  70. return InsertItem(iItem, strItem, iIndent, iImage, iSelectedImage, mask);
  71. }
  72. int CXTComboBoxEx::InsertItem(int iItem, LPCTSTR lpszItem, int iIndent, int iImage, int iSelectedImage, UINT mask)
  73. {
  74. COMBOBOXEXITEM cbItem;
  75. cbItem.mask = mask;
  76. cbItem.iItem = iItem;
  77. cbItem.pszText = const_cast<LPTSTR>(lpszItem);
  78. cbItem.iImage = iImage;
  79. cbItem.iSelectedImage = iSelectedImage;
  80. cbItem.iIndent = iIndent;
  81. return InsertItem(&cbItem);
  82. }
  83. BOOL CXTComboBoxEx::SetItem(const COMBOBOXEXITEM* pCBItem)
  84. {
  85. ASSERT(::IsWindow(m_hWnd));
  86. ASSERT(pCBItem != NULL);
  87. ASSERT(AfxIsValidAddress(pCBItem, sizeof(COMBOBOXEXITEM), FALSE));
  88. return (int) ::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM) pCBItem);
  89. }
  90. CXTComboBoxEx::~CXTComboBoxEx()
  91. {
  92. DestroyWindow();
  93. }
  94. BOOL CXTComboBoxEx::PreTranslateMessage(MSG* pMsg)
  95. {
  96. CEdit* pEditCtrl = GetEditCtrl();
  97. if (pEditCtrl && ::IsWindow(pEditCtrl->m_hWnd))
  98. {
  99. if (pMsg->message == WM_KEYDOWN)
  100. {
  101. if (::GetKeyState(VK_CONTROL) < 0)
  102. {
  103. switch (pMsg->wParam)
  104. {
  105. case 'a':
  106. case 'A':
  107. pEditCtrl->SetSel(0, -1);
  108. return TRUE;
  109. case 'c':
  110. case 'C':
  111. pEditCtrl->Copy();
  112. return TRUE;
  113. case 'x':
  114. case 'X':
  115. pEditCtrl->Cut();
  116. return TRUE;
  117. case 'v':
  118. case 'V':
  119. pEditCtrl->Paste();
  120. return TRUE;
  121. }
  122. }
  123. else
  124. {
  125. if (::GetKeyState(VK_CLEAR))
  126. {
  127. pEditCtrl->Clear();
  128. return TRUE;
  129. }
  130. }
  131. }
  132. }
  133. return CComboBox::PreTranslateMessage(pMsg);
  134. }
  135. IMPLEMENT_DYNAMIC(CXTComboBoxEx, CComboBox)