본문 바로가기

Programming/MFC

특정 컨트롤에 숫자키만 입력 받도록 한다.

PreTranslateMessage를 재정의 하고, 다음과 같이 코딩한다.

 

// PreTranslateMessage
BOOL CSystemSetDlg::PreTranslateMessage(MSG* pMsg)
{
 // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.

 //////////////////////////////////////////////////////////////////////////
 // 숫자만 입력해야 할 경우를 생각해서 숫자 이외의 값이 입력되면 제한을 걸도록 한다.
 // 현재 포커스가 설정된 컨트롤의 ID를 알아낸다.
 CWnd* pWnd = NULL ;
 pWnd = this->GetFocus() ;
 if ( pWnd == NULL )
  return TRUE ;

 int nID = 0 ;
 nID = pWnd->GetDlgCtrlID() ;
 //////////////////////////////////////////////////////////////////////////

 //////////////////////////////////////////////////////////////////////////
 // 콤보박스가 Decimal 모드인지 확인한다.
 BOOL bIsNum = FALSE ;

 if ( m_ctrl_combo_decimal.GetCurSel() == 0 )
 {  
  // 해당 ID가 맞는지 체크한다.
  switch( nID )
  {
  case IDC_EDIT_NETWORK_ID :   
  case IDC_EDIT_ORG_NETWORK_ID :   
  case IDC_EDIT_TS_ID :     
  case IDC_EDIT_PLATFORM_ID :     
  case IDC_EDIT_PLATFORM_PROVIDER_ID :
   bIsNum = TRUE ;
   break;
  } 
 }
 //////////////////////////////////////////////////////////////////////////

 //////////////////////////////////////////////////////////////////////////
 // 숫자만 입력해야 하는 컨트롤에 제한을 건다.
 if ( bIsNum == TRUE )
 {
  if ( pMsg->message == WM_KEYDOWN )
  {
   // backspace 키는 넣어주자.
   // 0x30 ~ 0x39까지는 숫자키이다. 0 ~ 9와 같다.

   switch( pMsg->wParam )
   {
   case 0x30 :
   case 0x31 :
   case 0x32 :
   case 0x33 : 
   case 0x34 :
   case 0x35 :
   case 0x36 :
   case 0x37 : 
   case 0x38 :
   case 0x39 :
   case VK_BACK :
   case VK_NUMPAD0 :
   case VK_NUMPAD1 : 
   case VK_NUMPAD2 :
   case VK_NUMPAD3 :
   case VK_NUMPAD4 :
   case VK_NUMPAD5 : 
   case VK_NUMPAD6 :
   case VK_NUMPAD7 :
   case VK_NUMPAD8 : 
   case VK_NUMPAD9 :
    break;
   default :
    return TRUE ;
   }
  }
 } 

 return CDialog::PreTranslateMessage(pMsg);
}

'Programming > MFC' 카테고리의 다른 글

WinExec  (0) 2007.03.22
윈도우의 상태를 바꿔주는 GetWindowLong , SetWindo..  (0) 2007.03.16
STL을 DLL로 사용할때  (0) 2007.03.09
DLL 인터페이스 사용하도록 지정해야 합니다  (0) 2007.03.09
컨트롤 클래스  (0) 2007.03.09