[MFC] SendMessage์ PostMessage์ ์ฐจ์ด (์์ ์ฝ๋ ํฌํจ)
์๊ฐ
๋ชจ๋ Windows ํ๋ก๊ทธ๋จ์ ๋ฉ์์ง ๋ฃจํ(message loop)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. ๋ฉ์์ง ๋ฃจํ๋ ๋ฉ์์ง๋ฅผ ๋ฐ์๋ค์ด๋ ๋ถ๋ถ์ ๋ปํ๋ฉฐ, ์ฌ์ฉ์์ ์ ๋ ฅ์ด๋ ๊ธฐํ ํ๋์ ๋ฐ์ ๋ฉ์์ง ํ์ ๋ฃ๊ณ , ๊ฐ ํ๋ก์ธ์ค๋ ๋ฉ์์ง๋ค์ ์ง์์ ์ผ๋ก ์ฝ์ด ๋ค์ด๋ฉด์ ๊ฐ ๋ฉ์์ง์ ๋์ํ๋ ํ๋์ ์ํํฉ๋๋ค.
MFC๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. MFC์์๋ ์๋ก ๋ค๋ฅธ ์๋์ฐ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ SendMessage ์ PostMessage API๊ฐ ์์ต๋๋ค.
๋ API์ ์ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
BOOL PostMessageA(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
๋ฐํํ๊ณผ ํจ์ ์ด๋ฆ๋ง ๋ค๋ฅผ ๋ฟ ์ธ์๋ ๋์ผํฉ๋๋ค.
๊ทธ๋ผ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
โป ์์ ํ์ผ์ด ๋ณธ๋ฌธ ํ๋จ์ ์์ต๋๋ค.
SendMessage & PostMessage
SendMessage๋ ์๋์ฐ ํ๋ก์์ (window procedure)๋ฅผ ์ง์ ํธ์ถํ๋ฉฐ, ํ๋ก์์ ๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๋ ๊น์ง ๋ฐํํ์ง ์์ต๋๋ค. ์ฆ, ํจ์ ๋ด์ ๋ค๋ฅธ ํจ์๊ฐ ํธ์ถ๋๋ฉด ๊ทธ ํจ์๊ฐ ๋ฐํํ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ์ด ์ผ๋ฐ ํจ์ ํธ์ถ๊ณผ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
PostMessage๋ ํธ์ถ๋ ๋ฉ์์ง๊ฐ ๋ฉ์์ง ํ์ ๋ค์ด๊ฐ๋ฉฐ, ์๋์ฐ ํ๋ก์์ ์์ ์ด ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ด ์๋ฏธํ๋ ๊ฒ์, ๋ฉ์์ง๊ฐ ์ฆ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ฒ์ด ์๋๋ผ GetMessage()์ ์ํด ํด์๋ ๋ฉ์์ง๊ฐ DispatchMessage()์ ์ํด ์๋์ฐ ํ๋ก์์ ๋ก ์ ๋ฌ๋์ด ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ PostMessage์ ์ํด ์ ๋ฌ๋ ๋ฉ์์ง๋ ์ธ์ ์ฒ๋ฆฌ๋ ์ง ์์ธกํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
๋ ํจ์์ ์ฐจ์ด๋ฅผ ์์ฝํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SendMessage |
PostMessage |
์๋์ฐ ํ๋ก์์ ๋ฅผ ์ง์ ํธ์ถํ๋ฉฐ, ํ๋ก์์ ๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๋ ๊น์ง ๋ฐํํ์ง ์๋๋ค. |
๋ฉ์์ง ํ์ ๋ฉ์์ง๊ฐ ์ฝ์ ๋๋ฉฐ, ์๋์ฐ ํ๋ก์์ ์์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ค. ํด๋น ๋ฉ์์ง๊ฐ ์ธ์ ์ฒ๋ฆฌ๋ ์ง ์์ธก์ด ์ด๋ ต๋ค. |
์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ(sequentially) |
๋น ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ(not sequentially) |
๋๊ธฐ ๋ฐฉ์(synchronous) |
๋น๋๊ธฐ ๋ฐฉ์(asynchronous) |
์ํ ์ฝ๋ ๋์
๋ API๋ฅผ ์ฌ์ฉํ ์์ ๋ฅผ ๋ง๋ค์ด ๋ณด์์ต๋๋ค.
SendMessage ๋ฒํผ์ ์๋์ ๊ฐ์ด ๋์ํฉ๋๋ค.
void CExamMessageDlg::OnBnClickedButtonSendmessage()
{
m_wndListBox.AddString(_T("Enter Send Message Button"));
SendMessage(EVENT_SENDMESSAGE);
m_wndListBox.AddString(_T("Leave Send Message Button"));
}
PostMessage ๋ฒํผ์ ์๋์ ๊ฐ์ด ๋์ํฉ๋๋ค.
void CExamMessageDlg::OnBnClickedButtonPostmessage()
{
m_wndListBox.AddString(_T("Enter Post Message Button"));
PostMessage(EVENT_POSTMESSAGE);
m_wndListBox.AddString(_T("Leave Post Message Button"));
}
๊ฐ ๋ฉ์์ง ๋ฒํผ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, SendMessage๋ ๋ฒํผ์ด ๋๋ฆฐ ํจ์๊ฐ ๋๋๊ธฐ ์ ์ ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๊ฐ ๋์๊ณ , PostMessage๋ ๋ฒํผ์ด ๋๋ฆฐ ํจ์๊ฐ ๋๋๊ณ ๋ฉ์์ง๊ฐ ์ฒ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
SendMessage์ PostMessage์ ๋์
์ฐธ๊ณ ๋งํฌ:
SendMessage(MSDN):https://docs.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-sendmessage
PostMessage(MSDN):https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagea
SendMessage & PostMessage 1: https://stackoverflow.com/questions/18526961/sendmessage-and-postmessage-which-one-is-better-to-use/18528227
SendMessage & PostMessage 2: https://www.codeproject.com/Tips/1029254/SendMessage-and-PostMessage
'Programming > MFC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ) (4) | 2019.09.06 |
---|---|
[MFC] ์์ ์ ์ค๋ ๋ ์์ฑ๊ณผ ํด์ ์ฌ์ฉ ๋ฐฉ๋ฒ (์์ ์ฒจ๋ถ) (2) | 2019.09.03 |
[MFC] ์์ ์ ์ค๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ค๋ ๋ (1) | 2019.08.31 |
[MFC] lib, dll ํด๋์ ํ์ผ ๋ชฉ๋ก ์ฝ๊ฒ ์ป๋ ๋ฐฉ๋ฒ (0) | 2019.05.25 |
[GDI] ์ด๋ฏธ์ง์ ์์ง์ด๋ ์ง์ ๊ทธ๋ฆฌ๊ธฐ (3) | 2019.03.02 |
[GDI+] ๋๋ธ ๋ฒํผ๋ง(Double Buffering) ์ฌ์ฉํ๊ธฐ (0) | 2019.02.28 |
[GDI] ๋๋ธ ๋ฒํผ๋ง(Double Buffering) ์ฌ์ฉํ๊ธฐ (2) | 2019.02.26 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[MFC] ์์ ์ ์ค๋ ๋ ์์ฑ๊ณผ ํด์ ์ฌ์ฉ ๋ฐฉ๋ฒ (์์ ์ฒจ๋ถ)
[MFC] ์์ ์ ์ค๋ ๋ ์์ฑ๊ณผ ํด์ ์ฌ์ฉ ๋ฐฉ๋ฒ (์์ ์ฒจ๋ถ)
2019.09.03 -
[MFC] ์์ ์ ์ค๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ค๋ ๋
[MFC] ์์ ์ ์ค๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ค๋ ๋
2019.08.31 -
[MFC] lib, dll ํด๋์ ํ์ผ ๋ชฉ๋ก ์ฝ๊ฒ ์ป๋ ๋ฐฉ๋ฒ
[MFC] lib, dll ํด๋์ ํ์ผ ๋ชฉ๋ก ์ฝ๊ฒ ์ป๋ ๋ฐฉ๋ฒ
2019.05.25 -
[GDI] ์ด๋ฏธ์ง์ ์์ง์ด๋ ์ง์ ๊ทธ๋ฆฌ๊ธฐ
[GDI] ์ด๋ฏธ์ง์ ์์ง์ด๋ ์ง์ ๊ทธ๋ฆฌ๊ธฐ
2019.03.02