mfc_Message - 8BitsCoding/RobotMentor GitHub Wiki


WIN32์—์„œ๋Š” ๋ฉ”์‹œ์ง€์ฒ˜๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•œ๋‹ค.

๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญ๋ฐ›๊ณ  ๋„ค๋ชจ๋ฅผ ๊ทธ๋ฆฌ๋Š” ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if(uMsg == WM_LBUTTONDOWN) {
        HDC h_dc = GetDC(hWnd);
        Rectangle(h_dc, 10, 10, 100, 100);
        ReleaseDC(hWnd, h_dc);
    } else if (uMsg == WM_DESTROY) {
        PostQuitMessage(0);
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) : ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Š” WndProc ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ณ  ๋„ค๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

HDC h_dc = GetDC(hWnd); : ์œˆ๋„์šฐ ํ•ธ๋“ค์˜ DC๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.


MFC์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜??

์ด๋ฏธ์ง€

WindowProc๋ฅผ ์žฌ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

LRESULT CMFCApplication5Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: ์—ฌ๊ธฐ์— ํŠน์ˆ˜ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ๋ฐ/๋˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

	return CDialogEx::WindowProc(message, wParam, lParam);
}

์žฌ ์ •์˜ ํ•˜๋ฉด ์œ„์™€ ๊ฐ™๊ณ , ๊ธฐ์กด WIN32์™€ ์ฐจ์ด์ ์€ HWND hWnd๊ฐ€ ์—†๋‹ค๋Š” ์ ์ธ๋ฐ Dlg์—์„œ๋Š” m_hWnd๋กœ ์ •์˜ ๋˜์–ด ์žˆ๊ธฐ์— ์‚ฌ์‹ค ํ•„์š”๊ฐ€ ์—†๋‹ค.


WIN32 ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ• Vs MFC ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

LRESULT CMFCApplication5Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if(message == WM_LBUTTONDOWN) {
        if(wParam & MK_CONTROL) dc.Ellipse(10, 10, 100, 100);

        // MFC ๊ถŒ์žฅ ์Šคํƒ€์ผ
        CClientDC dc(this);
        dc.Rectangle(10, 10, 100, 100);

        // WIN32 ์Šคํƒ€์ผ
        HDC h_dc = ::GetDC(m_hWnd);
        Rectangle(h_dc, 10, 10, 100, 100);
        ::ReleaseDC(m_hWnd, h_dc);

        // MFC ์ •ํ†ต ์Šคํƒ€์ผ
        CDC * p_dc = GetDC();
        p_dc->Rectangle(10, 10, 100, 100);
        ReleaseDC(p_dc);
    }
    
	return CDialogEx::WindowProc(message, wParam, lParam);
}

์ฐธ๊ณ ๋กœ WParam, lParam์— ์–ด๋–ค ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ๋ณด๊ณ ์‹ถ๋‹ค๋ฉด,

WM_LBUTTONDOWN์„ F1๋ˆ„๋ฅด๋ฉด ์„ค๋ช…์ด ๋‚˜์˜จ๋‹ค.

์ด๋ฏธ์ง€


๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†๋‚˜??

์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•์ด MFC์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด๋ฏธ์ง€

void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	// point.x, point.y ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

    CClientDC dc(this);

    if(nFlags & MK_CONNTROL) dc.Ellipse(point.x - 30, point.y - 30, point.x + 30, point.y +30);

	CDialogEx::OnLButtonDown(nFlags, point);
}