MyCombo.cpp
上传用户:lj3531212
上传日期:2007-06-18
资源大小:346k
文件大小:3k
源码类别:

绘图程序

开发平台:

Visual C++

  1. // MyCombo.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "GraphSoft.h"
  5. #include "MyCombo.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMyCombo
  13. CMyCombo::CMyCombo()
  14. {
  15. }
  16. CMyCombo::~CMyCombo()
  17. {
  18. }
  19. BEGIN_MESSAGE_MAP(CMyCombo, CComboBox)
  20. //{{AFX_MSG_MAP(CMyCombo)
  21. ON_WM_KEYDOWN()
  22. ON_WM_KEYUP()
  23. ON_WM_SYSKEYDOWN()
  24. ON_WM_SYSKEYUP()
  25. ON_WM_CHAR()
  26. ON_CONTROL_REFLECT(CBN_EDITCHANGE, OnEditchange)
  27. //}}AFX_MSG_MAP
  28. END_MESSAGE_MAP()
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMyCombo message handlers
  31. void CMyCombo::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  32. {
  33. // TODO: Add your message handler code here and/or call default
  34. if(nChar>=(UINT)'0'&&nChar<=(UINT)'9')
  35. CComboBox::OnKeyDown(nChar, nRepCnt, nFlags);
  36. }
  37. void CMyCombo::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
  38. {
  39. // TODO: Add your message handler code here and/or call default
  40.   if(nChar>=(UINT)'0'&&nChar<=(UINT)'9')
  41. CComboBox::OnKeyUp(nChar, nRepCnt, nFlags);
  42. }
  43. void CMyCombo::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  44. {
  45. // TODO: Add your message handler code here and/or call default
  46. if(nChar>=(UINT)'0'&&nChar<=(UINT)'9')
  47. CComboBox::OnSysKeyDown(nChar, nRepCnt, nFlags);
  48. }
  49. void CMyCombo::OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
  50. {
  51. // TODO: Add your message handler code here and/or call default
  52. if(nChar>=(UINT)'0'&&nChar<=(UINT)'9')
  53. CComboBox::OnSysKeyUp(nChar, nRepCnt, nFlags);
  54. }
  55. void CMyCombo::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
  56. {
  57. // TODO: Add your message handler code here and/or call default
  58. if(nChar>=(UINT)'0'&&nChar<=(UINT)'9')
  59. CComboBox::OnChar(nChar, nRepCnt, nFlags);
  60. }
  61. void CMyCombo::OnEditchange() 
  62. {
  63. // TODO: Add your control notification handler code here
  64.     CString m_str; 
  65. GetWindowText(m_str);
  66. if(m_str.GetLength()>0)
  67. {
  68. if(IsNumber(m_str))
  69. {
  70. if(atoi(m_str)>999){
  71. SetWindowText(m_str.Left(3));
  72. SetEditSel(3,3);
  73. }else if(atoi(m_str)<-999){//多了一个‘-’号
  74. SetWindowText(m_str.Left(4));
  75. SetEditSel(4,4);
  76. }
  77. }
  78. else
  79. {
  80. SetWindowText(GetNumberStr(m_str));
  81. SetEditSel(GetNumberStr(m_str).GetLength(),GetNumberStr(m_str).GetLength());
  82. }
  83. }
  84. }
  85. BOOL CMyCombo::PreTranslateMessage(MSG* pMsg) 
  86. {
  87. // TODO: Add your specialized code here and/or call the base class
  88. return CComboBox::PreTranslateMessage(pMsg);
  89. }
  90.  BOOL CMyCombo::IsNumber(CString str)
  91.  {
  92.    int i,j;
  93.    i=0;
  94.    j=str.GetLength();
  95.    if((str[0]<'0'||str[0]>'9')&&str[0]!='-')
  96.    return FALSE;
  97.    for(i=1;i<j;i++)
  98.    {
  99.    if(str[i]<'0'||str[i]>'9')
  100.     return FALSE;
  101.    }
  102.    return TRUE;
  103.  }
  104.    CString CMyCombo::GetNumberStr(CString str)
  105.    {
  106.    int i,j,k;
  107.    char* m_pchar=new char[str.GetLength()];   
  108.    k=0;
  109.    j=str.GetLength();
  110.    i=0;
  111.    if(str[0]=='-'){
  112.    i=1;
  113.    m_pchar[k++]='-';
  114.    }
  115.    for(;i<j;i++)
  116.    {
  117.    if(str[i]<'0'||str[i]>'9')
  118.    {            
  119.    }
  120.    else
  121.    {
  122.    m_pchar[k++]=str[i];
  123.    }
  124.    }    
  125.    m_pchar[k]='';
  126.    CString m_str(m_pchar);
  127.    delete[] m_pchar;
  128.    return m_str;
  129.    }