OnSysCommand()这个函数主要是截获控制命令的,msdn上的解释如下:
SC_MOVE Move the CWnd object.//移动
补充:
1、OnSysCommand 和OnCommand的不同主要在于
OnSysCommand 是响应系统菜单的消息,例如最大,最小化,关闭等(SC_MINIMIZE,SC_MAXIMIZE,SC_CLOSE)
OnCommand是响应自己添加的消息事件,因此如果对菜单响应事件进行修改可以用OnCommand。
2、ON_COMMAND,ON_MESSAGE,ON_NOTIFY的区别
ON_COMMAND用来响应相应工具栏和菜单栏的命令WM_COMMAND,不用自己解开WM_COMMAND中wParam和lParam中传送的控件ID。
ON_COMMAND(ID_MYMENU,OnMenuClear)
void CGameWnd::OnMenuClear(){}
ON_MESSAGE用来响应自定义消息,能够处理所有的消息响应,在程序中需要自己设定相应的消息响应函数。
ON_MESSAGE(ID_MYID, &CGameWnd::OnGetMsg)
LRESULT CGameWnd::OnGetMsg(WPARAM wparam, LPARAM lparam)
ON_NOTIFY是控件向其父窗口发送消息处理的宏,扩展了ON_COMMAND的功能,使用了相应的NMHDR结构。
1.定义NOTIFY消息
#define NM_MOUSEUP (NM_FIRST-25)
2.定义结构(任意结构)
typedef struct tagNMLVSELFDEFINEDATA
{
NMHDR hdr;
int iStatus;
PVOID myData;
} NMLVSELFDEFINEDATA, *LPNMLVSELFDEFINEDATA;
3.发送NOTIFY消息
NMLVSELFDEFINEDATA dispinfo = {0};
dispinfo.hdr.code = NM_MOUSEUP;
dispinfo.hdr.hwndFrom = m_hWnd;
dispinfo.hdr.idFrom = GetDlgCtrlID();
dispinfo.iStatus = -1;
dispinfo.myData = NULL;
::SendMessage(this->GetParent()->m_hWnd, WM_NOTIFY, GetDlgCtrlID(), (LPARAM) &dispinfo);
4.接收控件ON_NOTIFY消息
BEGIN_MESSAGE_MAP(TF_PhotoGroupDlg, CDialog)
//{{AFX_MSG_MAP(TF_PhotoGroupDlg)
ON_NOTIFY(NM_MOUSEUP, IDC_LIST_PHOTO, OnMouseUpListPhoto)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()