
๐ฅ๏ธ C++ MFC ํ๋ก๊ทธ๋๋ฐ <ํค๋ณด๋ ์ ๋ ฅ ํธ>
ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐ์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
โ VS 2022 ํ๊ฒฝ์์ ์งํ๋์์ต๋๋ค โ
ํ์ฌ์ ๋ค์ด์ผ๋ก๊ทธ๋ X๋ฅผ ๋๋ฌ ๋ซ์ง ์๊ณ ESC ํค ์
๋ ฅ ์ ์ฐฝ์ด ์ฌ๋ผ์ง๋๋ก ๋์ด ์์ต๋๋ค.
์ด๋ฅผ ํค์ ๋ ฅ์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ๊ฒ ์ต๋๋ค.
PreTranslateMessage ํจ์๋ ๋ฉ์์ง๊ฐ ์ค์ ๋ก ์๋์ฐ ํ๋ก์์ ์์ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ํธ์ถ๋๋ ๊ฐ์ ํจ์์
๋๋ค.
์ฐ์ ํด๋์ค ๋ง๋ฒ์ฌ๋ฅผ ์ผ์ฃผ์ธ์.
ํด๋น ํจ์์ ์๋์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
- ํค๋ณด๋ ๋ฐ ๋ง์ฐ์ค ์ ๋ ฅ ์ฒ๋ฆฌ
- ํค๋ณด๋ ๋จ์ถํค๋ ๋ง์ฐ์ค ํด๋ฆญ ๋ฑ์ ์ ๋ ฅ์ ํน๋ณํ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ PreTranslateMessage๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
- ๋ฉ์์ง ํํฐ๋ง
- ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ๊ฑฐ๋ ํํฐ๋งํ ์ ์์ต๋๋ค.
- ์ปค์คํ ๋ฉ์์ง ์ฒ๋ฆฌ
- ๊ธฐ๋ณธ ๋ฉ์์ง ์ฒ๋ฆฌ ์ ์ ํน์ ์์ ์ ์ํํ๊ณ ์ถ์ ๋ ํ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ด์ผ๋ก๊ทธ ํด๋์ค๋ฅผ ์ ํํด์ฃผ๊ณ ,
๊ฐ์ ํจ์ ํญ์์ PreTranslateMessage๋ฅผ ๋๋ธํด๋ฆญํด์ ์ถ๊ฐํด์ฃผ์ธ์.

๊ทธ๋ฌ๋ฉด ํด๋น ํจ์๊ฐ ์๊ธธ๊ฒ๋๋ค.
์ฌ๊ธฐ์ ํค์
๋ ฅ์ ๋ฐฉ์งํ๋ ์ฝ๋๋ฅผ ๋ฃ๊ฒ ์ต๋๋ค.

MSG* pMsg ์ธ์๋ ๋ฉ์์ง์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ MSG ๊ตฌ์กฐ์ฒด์ ๋ํ ํฌ์ธํฐ์
๋๋ค.
message ๊ฐ ํค ๋ค์ด์ผ ๋,
wParam ์ด ESC ์
๋ ฅ์ผ ๋ return ํด์ฃผ๋๋ก ํด์ฃผ๊ฒ ์ต๋๋ค.
BOOL TestDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_ESCAPE)
{
return TRUE;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
์ด์ ๋ ์ด์ ESC๋ฅผ ์
๋ ฅํด๋ ๋ค์ด์ผ๋ก๊ทธ๊ฐ ์ข
๋ฃ๋์ง ์์ต๋๋ค.
๊ผญ PreTranslateMessage์์ ํ ํ์๋ ์์ต๋๋ค.
๋ฏธ๋ฆฌ ์ ์ํ์ง ์๊ณ GetKeyStateํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ์ ์ฒดํฌํ ์ ์์ต๋๋ค.
์์๋ก ๋ง๋ ๋ฒํผ ์ ๋ ฅ ์ด๋ฒคํธ์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ฃ์์ต๋๋ค.
๋ง์ฝ ์ปจํธ๋กค ์
๋ ฅ ์ ๋ฌด์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฌธ๊ตฌ์ ๋ฉ์ธ์ง๋ฐ์ค๋ฅผ ๋์ฐ๋๋ก ํ์ต๋๋ค.

์คํํด๋ณด๋ฉด ์ ๊ฐ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฌธ๊ตฌ์ ๋ฉ์ธ์ง๋ฐ์ค๊ฐ ๋์์ง๋๋ค.

ํค์
๋ ฅ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋ํด ์์ ๋ดค์ต๋๋ค.
๋ค์์๋ ํ
์คํธ ์ปจํธ๋กค์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.