thank you very much,but as you know,Edit has a function,as DefWindowProc, I want to Overload that to do something like this: LRESULT CPsdEditCtrl::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if(message == WM_GETTEXT || message == EM_GETLINE || EM_SETPASSWORDCHAR) { if(TRUE == m_GetFlag) { return 0; } else { m_GetFlag = TRUE; return COleControl::DefWindowProc(message, wParam, lParam); } } else { return COleControl::DefWindowProc(message, wParam, lParam); } } Otherwise, if I build A Activex Control based edit,How I know which message it(means edit) answer or not?
I do as you told me: ALT_MSG_MAP(1) // Replace this with message map entries for superclassed Edit MESSAGE_HANDLER(WM_CHAR, OnChar) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) END_MSG_MAP() LRESULT OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // TODO : Add Code for message handler. Call DefWindowProc if necessary. m_ctlEdit.DefWindowProc(WM_CHAR, wParam, lParam); return 0; } LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // TODO : Add Code for message handler. Call DefWindowProc if necessary. m_ctlEdit.SubclassWindow(::GetWindow(GetDlgItem(IDC_HEDIT), GW_CHILD)); MessageBox("a","b",MB_OK); return 0; }OnChar can work, but OnInitDialog cant work, why? Can you tell me?
ALT_MSG_MAP(1)
MESSAGE_HANDLER(
WM_GETDLGCODE, OnGetDlgCode)
MESSAGE_HANDLER(WM_KEYDOWN, onkeydown)
MESSAGE_HANDLER(
WM_CHAR, OnEditInputMagnification)
END_MSG_MAP()
.cpp
in constructor: CYourClass::CYourClass() : m_Edit(_T("EDIT"), this, 1) {}
in OnInitDialog: m_Edit.SubclassWindow(::GetWindow(GetDlgItem(IDC_COMBO), GW_CHILD));
add if you want all keys add following:
LRESULT CYourClass::OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return DLGC_WANTALLKEYS;
}
and finally you can get KeyDown:
LRESULT CYourClass::onkeydown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
switch (wParam)
{
case VK_RETURN:
{
...
}
break;
case VK_TAB:
{
...
}
break;
}
bHandled = FALSE;
return S_OK;
}
LRESULT CPsdEditCtrl::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_GETTEXT || message == EM_GETLINE || EM_SETPASSWORDCHAR)
{
if(TRUE == m_GetFlag)
{
return 0;
}
else
{
m_GetFlag = TRUE;
return COleControl::DefWindowProc(message, wParam, lParam);
}
}
else
{
return COleControl::DefWindowProc(message, wParam, lParam);
}
}
Otherwise, if I build A Activex Control based edit,How I know which message it(means edit) answer or not?
ALT_MSG_MAP(1)
// Replace this with message map entries for superclassed Edit
MESSAGE_HANDLER(WM_CHAR, OnChar)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
END_MSG_MAP() LRESULT OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
m_ctlEdit.DefWindowProc(WM_CHAR, wParam, lParam);
return 0;
} LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
m_ctlEdit.SubclassWindow(::GetWindow(GetDlgItem(IDC_HEDIT), GW_CHILD));
MessageBox("a","b",MB_OK);
return 0;
}OnChar can work, but OnInitDialog cant work, why? Can you tell me?