BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == 13)
{
pMsg->message = WM_KILLFOCUS;
}
else if(pMsg->wParam == 27)
{
m_bEditValid = FALSE;
pMsg->message = WM_KILLFOCUS;
}
}
return CEdit::PreTranslateMessage(pMsg);
}CMyEdit是继承自CEdit的
MSDN上wParam是这样解释的,实在搞不懂,麻烦各位高帮忙解释下了
nVirtKey
Specifies the virtual-key code of the nonsystem key.
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == 13)
{
pMsg->message = WM_KILLFOCUS;
}
else if(pMsg->wParam == 27)
{
m_bEditValid = FALSE;
pMsg->message = WM_KILLFOCUS;
}
}
return CEdit::PreTranslateMessage(pMsg);
}CMyEdit是继承自CEdit的
MSDN上wParam是这样解释的,实在搞不懂,麻烦各位高帮忙解释下了
nVirtKey
Specifies the virtual-key code of the nonsystem key.
{
// TODO: Add your specialized code here and/or call the base class
ModifyStyle(LVS_EDITLABELS, 0L);
ModifyStyle(0L, LVS_REPORT);
ModifyStyle(0L, LVS_SHOWSELALWAYS);
ModifyStyle(0L, LVS_SINGLESEL);
SetExtendedStyle(//LVS_EX_FULLROWSELECT |
LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP |
LVS_EX_ONECLICKACTIVATE |
LVS_EX_FLATSB);
CListCtrl::PreSubclassWindow();
}这有这一段,这里是干嘛的呢?
#define VK_ESCAPE 27
看了这个你会不会明白一些
就是改变了消息
按回车或空格让窗口失去焦点
你这个应该是给ListCtrl之类控件做辅助编辑的edit吧
所以在他被创建出来之前需要按需求设置风格
这些代码就是干这个的
PreSubclassWindows这个虚函数的被框架调用允许窗口被子类化之前做一些其它的子类化操作,如修改窗口的样式等等
ModifyStyle(0L, LVS_REPORT); //这个LVS_REPORT是干嘛的?
ModifyStyle(0L, LVS_SHOWSELALWAYS);
ModifyStyle(0L, LVS_SINGLESEL);
SetExtendedStyle(//LVS_EX_FULLROWSELECT |
LVS_EX_GRIDLINES |
LVS_EX_HEADERDRAGDROP | //下面这三个又是什么属性,有什么用啊?
LVS_EX_ONECLICKACTIVATE |
LVS_EX_FLATSB);
LVS_EX_GRIDLINES,显示项和它子项周围边线
LVS_EX_HEADERDRAGDROP,头可以被拖动
LVS_EX_ONECLICKACTIVATE,当用户单击控件时,发送一个 LVN_ITEMACTIVATE通造消息给父窗口,它也必需启用hot tracking-当用户鼠标移动到一个项目时,高亮显示但不选择。
LVS_EX_TWOCLICKACTIVATE,当用户双击控件时,发送一个 LVN_ITEMACTIVATE通造消息给父窗口
LVS_EX_UNDERLINEHOT,hot项显示下划线。
LVS_EX_UNDERLINECOLD,hot项不显示下划线。
建议你去看MSDN