键盘消息: WM_CHAR:该消息的处理函数OnChar(),在用户输入有效的ASCII码时才会发生
WM_KEYDOWN :键盘按下事件
WM_KEYUP:键盘释放事件
键盘消息处理方式如下:
BOOL C**Dlg::PreTranslateMessage(MSG* pMsg)//pMsg表示消息类型
{
//判断是否为键盘消息
if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
//判断是否按下键盘Enter键
if(pMsg->wParam==VK_RETURN)
{
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
然后介绍虚拟键代码符号形式
VK_LBUTTON
VK_RBUTTON
VK_CANCEL
VK_MBUTTON
VK_BACK
VK_TAB
VK_CLEAR
VK_RETURN
VK_SHIFT
VK_CONTROL
VK_MENU
VK_PAUSE
VK_CAPITAL
VK_ESCAPE
VK_SPACE
VK_PRIOR
VK_NEXT
VK_END
VK_HOME
VK_LEFT
VK_UP
VK_RIGHT
VK_DOWN
VK_SELECT
VK_EXECUTE
VK_SNAPSHOT
VK_INSERT
VK_DELETE
VK_HELP
VK_LWIN
VK_RWIN
VK_APPS
VK_NUMPAD0
VK_NUMPAD1
VK_NUMPAD2
VK_NUMPAD3
VK_NUMPAD4
VK_NUMPAD5
VK_NUMPAD6
VK_NUMPAD7
VK_NUMPAD8
VK_NUMPAD9
VK_MULTIPLY
VK_ADD
VK_SEPARATOR
VK_SUBTRACT
VK_DECIMAL
VK_DIVIDE
VK_F1
VK_F2
VK_F3
VK_F4
VK_F5
VK_F6
VK_F7
VK_F8
VK_F9
VK_F10
VK_F11
VK_F12
VK_F13
VK_F14
VK_F15
VK_F16
VK_F17
VK_F18
VK_F19
VK_F20
VK_F21
VK_F22
VK_F23
VK_F24
VK_NUMLOCK
VK_SCROLL
VK_ATTN
VK_CRSEL
VK_EXSEL
VK_EREOF
VK_PLAY
VK_ZOOM
VK_OEM_CLEAR
鼠标消息:WM_MOUSEMOVE:用户将鼠标移进窗口或在窗口中移动
WM_LBUTTONDOWN:
WM_LBUTTONUP:
WM_LBUTTONDBCLICK:
void C**Dlg::OnMouseMove(UINT nFlags, CPoint point)//鼠标移动消息,nFlags表示传递回来的信息,point表示坐标
{
CDialogEx::OnMouseMove(nFlags, point);
if(nFlags & MK_LBUTTON) //表示移动的时候左键按下
{
...
}
}
void C**Dlg::OnLButtonDown(UINT nFlags, CPoint point)//鼠标左键单击消息
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnLButtonDown(nFlags, point);
}
void C**Dlg::OnLButtonUp(UINT nFlags, CPoint point)//鼠标左键释放消息
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnLButtonUp(nFlags, point);
}
void C**Dlg::OnLButtonDblClk(UINT nFlags, CPoint point)//鼠标左键双击消息
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnMButtonDblClk(nFlags, point);
}
PS(右键消息与左键消息只是把L改成R)
窗口消息:WM_CREATE:窗口创建
WM_DESTROY:窗口销毁
WM_CLOSE:窗口关闭
WM_MOVE:窗口移动
WM_SIZE:窗口改变
WM_PAINT:窗口重绘
WM_SETFOCUS:窗口得到焦点
WM_KILLFOCU::窗口失去焦点
int C**Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void C**Dlg::OnDestroy()
{
CDialogEx::OnDestroy();
// TODO: 在此处添加消息处理程序代码
}
void C**Dlg::OnMove(int x, int y)
{
CDialogEx::OnMove(x, y);
// TODO: 在此处添加消息处理程序代码
}
void C**Dlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnClose();
}
void C**Dlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
CDialogEx::OnPaint();
}
void C**Dlg::OnSize(UINT nType, int cx, int cy)//nType表示调整的类型
{
CDialogEx::OnSize(nType, cx, cy);
}
lpCreateStruct表示为 CREATESTRUCT 结构 的指针。
typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;//指向要使用的数据创建一个窗口。
HANDLE hInstance;//标识拥有新窗口模块的模块实例句柄。
HMENU hMenu;//标识新窗口将使用的菜单。 如果子窗口,包含整数 ID.
HWND hwndParent;//标识拥有新窗口的父窗口。 如果新窗口是顶级窗口,此成员是 NULL 。
int cy;//指定新窗口的高度。
int cx;//指定新窗口的宽度
int y;//指定新窗口的左上角的 y 坐标。 ,如果新窗口是子窗口,坐标系是相对于父窗口;否则坐标系是相对于屏幕的原点。
int x;//指定新窗口的左上角的 x 坐标。 ,如果新窗口是子窗口,坐标系是相对于父窗口;否则坐标系是相对于屏幕的原点
LONG style;//指定新窗口的 样式
LPCSTR lpszName;//指向指定新窗口的名称为 NULL 终止的字符串
LPCSTR lpszClass;//指向指定新窗口的窗口类名的一个 NULL 终止的字符串
DWORD dwExStyle;//为新窗口指定 扩展样式
} CREATESTRUCT;
定时器消息:WM_TIMER,其消息相应函数使OnTimer(UINT nIDEvent);\\nIDEvent表示定时器ID
对于定时器消息,通常都会和SetTimer配合使用。
void C**Dlg::OnTimer(UINT_PTR nIDEvent)//nIDEvent表示定时器ID
{
CDialogEx::OnTimer(nIDEvent);
}
SetTimer(1,2000,NULL);//表示ID为1的定时器2秒执行一次
命令消息:WM_COMMAND.命令消息是很常用的一个消息,命令消息是当用户选择某项菜单或单击某按钮时发送的消息
ON_COMMAND(ID_POP,&CHisCtrlDlg::ClickPop)//当点击名为ID_POP的控件后,执行ClickPop函数
void C**Dlg::ClickPop()
{
}