想做一个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);
}
是它自动生成的,我没改,所以不知道怎么错了.

解决方案 »

  1.   

    哦,明白了,是
    OnMouseWheel
    不是OnMouseHWheel那就换个问题了,
    就是Ctrl+end这种方式,怎么让edit消失,
    因为焦点这时候在edit身上,所以Ctrl+end作用不到list身上
    而且这个edit是我自己创建的,没办法给它添加消息呀
      

  2.   

    一、创建按钮    * 定义CButton变量为类的成员变量;
          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");
          }
      

  3.   

    让EDIT控件相应 Ctrl+End这个事件所带来的销毁,当Edit在焦点时,如果检测到用户按了这两个键,就执行Edit的OnDestory就可以了