구글애드센스


MFC CBN_DROPDOWN 후킹하기. STUDY



에.. 뭐 CBN_DROPDOWN만 후킹하는 건 아니고 WM_COMMAND에 실려오는 애들은 다 할수 있다.
CDialog를 상속받은 애들은,
CDialog의 WindowProc 라는 함수를 오버라이드하면 된다.

이 짓을 왜 하냐면,
CBN_DROPDOWN 메세지(?)가 날아올때 그것을 날리는 주체(Control)의 ID를 얻을 수 있기 때문이다.
나같은 경우 CComboBox를 두 개 맹글고, 이것을 DROPDOWN 할 때 값을 갱신하는데
내부적으로 호출되는 함수가 Control에 따라서 약간의 다른일을 하므로 Control을 아규먼트로 줘야할 필요가 있었기 때문이다.

대충 요런식으로 구성했다.

LRESULT CRM_DaemonDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_COMMAND :
        {
            switch (HIWORD(wParam))
            {
                case CBN_DROPDOWN :
                    int idx = (int)LOWORD(wParam);
                    if (idx == IDC_SERIAL_IN_LIST)
                        AfxMessageBox("IN");
                    else if (idx == IDC_SERIAL_OUT_LIST)
                        AfxMessageBox("OUT");
                    else
                        AfxMessageBox("NOTHING");
                    break;
            }
        }
        break;
    }
    return CDialog::WindowProc(message, wParam, lParam);
}


덧글

댓글 입력 영역