想做一个grid控件,网上虽然例子很多,但自己做的时候,碰到很多不如意的地方。
我的想法是继承自CListCtrl派生一个类,这个类里有个edit,鼠标点到哪行哪列,这个edti就跑到哪儿,当
滚动那个list的时候,让edit消失,滚动,就是用鼠标滚轮滚动或者点右边的滚动条。
点滚动条可以用ON_WM_VSCROLL()消失,我添加的时候是用类消息向导那儿自动添加的,添加这个没问题,
只要鼠标手动垂直滚动条,edit就不见了,但滚轮就没用,然后我想到用ON_WM_MOUSEHWHEEL()
这个也是类消息向导那儿自动添加的,竟然报错!
error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CEditList::* )(UINT,short,CPoint)' to 'void (__thiscall CWnd::* )BEGIN_MESSAGE_MAP(CEditList, CListCtrl)
ON_NOTIFY_REFLECT(NM_CLICK, &CEditList::OnNMClick)
ON_WM_VSCROLL()
ON_WM_MOUSEHWHEEL()
END_MESSAGE_MAP()报错行指向ON_WM_MOUSEHWHEEL()这儿.
但这个函数
BOOL CEditList::OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt)
{
// This feature requires Windows Vista or greater.
// The symbol _WIN32_WINNT must be >= 0x0600.
// TODO: Add your message handler code here and/or call default
return CListCtrl::OnMouseHWheel(nFlags, zDelta, pt);
}
是它自动生成的,我没改,所以不知道怎么错了.
我的想法是继承自CListCtrl派生一个类,这个类里有个edit,鼠标点到哪行哪列,这个edti就跑到哪儿,当
滚动那个list的时候,让edit消失,滚动,就是用鼠标滚轮滚动或者点右边的滚动条。
点滚动条可以用ON_WM_VSCROLL()消失,我添加的时候是用类消息向导那儿自动添加的,添加这个没问题,
只要鼠标手动垂直滚动条,edit就不见了,但滚轮就没用,然后我想到用ON_WM_MOUSEHWHEEL()
这个也是类消息向导那儿自动添加的,竟然报错!
error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CEditList::* )(UINT,short,CPoint)' to 'void (__thiscall CWnd::* )BEGIN_MESSAGE_MAP(CEditList, CListCtrl)
ON_NOTIFY_REFLECT(NM_CLICK, &CEditList::OnNMClick)
ON_WM_VSCROLL()
ON_WM_MOUSEHWHEEL()
END_MESSAGE_MAP()报错行指向ON_WM_MOUSEHWHEEL()这儿.
但这个函数
BOOL CEditList::OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt)
{
// This feature requires Windows Vista or greater.
// The symbol _WIN32_WINNT must be >= 0x0600.
// TODO: Add your message handler code here and/or call default
return CListCtrl::OnMouseHWheel(nFlags, zDelta, pt);
}
是它自动生成的,我没改,所以不知道怎么错了.
OnMouseWheel
不是OnMouseHWheel那就换个问题了,
就是Ctrl+end这种方式,怎么让edit消失,
因为焦点这时候在edit身上,所以Ctrl+end作用不到list身上
而且这个edit是我自己创建的,没办法给它添加消息呀
CButton button;
* 定义该按钮的ID;
#define IDC_BUTTON1 8888
* 在适当的地方创建按钮;
button.Create("BUTTON", WS_VISIBLE | WS_CHILD | WS_BORDER | BS_AUTO3STATE,
CRect(10 , 10, 100, 40), this, IDC_BUTTON1 );二、实现ON_BN_CLICKED消息 * 在头文件中定义消息响应函数;
// Generated message map functions
//{{AFX_MSG(CDialogTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
//}}AFX_MSG
afx_msg void OnBnClicked();
DECLARE_MESSAGE_MAP()
* 在CPP文件中完成消息路有;
BEGIN_MESSAGE_MAP(CDialogTestDlg, CDialog)
//{{AFX_MSG_MAP(CDialogTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClicked)
END_MESSAGE_MAP()
* 完成消息函数本身;
void CDialogTestDlg::OnBnClicked()
{
AfxMessageBox("Button1");
}