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 |