- Edit control 로부터 입력값 처리.
코드 이전에 리소스 뷰에서 edit control 의 속성을 보면

"숫자" 를 True 로 해주면, 입력값을 숫자로만 받을 수 있음.
// CScene_Tool.cpp
...
INT_PTR CALLBACK TileCountInputProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
// 자리수 제한(선택)
SendMessage(GetDlgItem(hDlg, IDC_EDIT_TILECOUNTCOLUMN), EM_SETLIMITTEXT, 3, 0);
SendMessage(GetDlgItem(hDlg, IDC_EDIT_TILECOUNTROW), EM_SETLIMITTEXT, 3, 0);
// 초기값(선택): 1
SetDlgItemInt(hDlg, IDC_EDIT_TILECOUNTCOLUMN, 1, TRUE);
SetDlgItemInt(hDlg, IDC_EDIT_TILECOUNTROW, 1, TRUE);
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
UINT tileCountCol = GetDlgItemInt(hDlg, IDC_EDIT_TILECOUNTCOLUMN, NULL, FALSE);
UINT tileCountRow = GetDlgItemInt(hDlg, IDC_EDIT_TILECOUNTROW, NULL, FALSE);
CScene* pCurScene = CSceneMgr::GetInstance()->GetCurScene();
// 현재 씬이 툴 씬인지 확인
if(dynamic_cast<CScene_Tool*>(pCurScene) == nullptr)
{
MessageBox(hDlg, L"Current scene is not tool scene.", L"Error", MB_OK);
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
pCurScene->ClearGroupObjects(GROUP_TYPE::TILE);
pCurScene->CreateTile(tileCountCol, tileCountRow);
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
else if(LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
GetDlgItemInt 함수에 해당 edit control 의 ID 값을 넘겨줌. NULL 자리에는 번역 성공 여부를 bool* 에 받을 수 있는데, 여기서는 숫자값이 확정이니까 넘어가고, FALSE 자리에는 singed 값, 즉 음수 처리인데 이것도 false 로 설정해둠.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 48화. (0) | 2025.09.24 |
|---|---|
| Win32 api 강의 47화. (0) | 2025.09.24 |
| Win32 api 강의 44 - 45화. (0) | 2025.09.24 |
| Win32 api 강의 43화. (0) | 2025.09.23 |
| Win32 api 강의 41 - 42화. (0) | 2025.09.23 |