- 鼠标消息解析
2.SetWindLong和GetWindowLong解析
LONG GetWindowLong(stHwnd, iIndex);取出SetWindowLong(...)设置的值
3.BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint )
功能:将窗口移动到点(x, y),nWidth:窗口的宽,nHeight:窗口高
注:hWnd为父窗口句柄,则x,y为屏幕坐标; hWnd为子窗口句柄,则x,y为客户区坐标。
4.HWND SetCapture(HWND hwnd)
功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否 在窗口的边界内。
注:防止鼠标在窗口内按下,在窗口外弹起时失效,详见后文程式解析!!!
5.程式设计 参考《windows程式设计第五版》
#include <windows.h>
#define DIVISIONS (5)
#define MAXPOINTS (1000)
LRESULT CALLBACK pfnWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK pfnChildWndProc(HWND, UINT, WPARAM, LPARAM);
const TCHAR g_szChildName[] = TEXT("ChildDlg");
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MSG stMsg;
memset(&stMsg, 0, sizeof (stMsg));
HWND stHwnd;
memset(&stHwnd, 0, sizeof (stHwnd));
WNDCLASS stWndClass;
memset(&stWndClass, 0, sizeof (stWndClass));
const TCHAR szAppName[] = TEXT("Mouse TEST");
stWndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
stWndClass.lpfnWndProc = pfnWndProc;
stWndClass.cbClsExtra = 0;
stWndClass.cbWndExtra = 0;
stWndClass.hInstance = hInstance;
stWndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//加入图标资源IDI_APPLICATION
stWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);//鼠标的光标:IDC_ARROW光标名:斜箭头
stWndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
stWndClass.lpszMenuName = NULL;
stWndClass.lpszClassName = szAppName;
if (!RegisterClass(&stWndClass))//窗口类别
{
MessageBox(NULL, TEXT("Regiester failure"), szAppName, MB_ICONERROR);
return 0;
}
#if 0/*=========================子窗口命中测试666==============================*/
stWndClass.lpfnWndProc = pfnChildWndProc;
stWndClass.cbWndExtra = sizeof (long);
stWndClass.hIcon = NULL;
stWndClass.lpszClassName = g_szChildName;
//stWndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//测试用
if (!RegisterClass(&stWndClass))//窗口类别
{
MessageBox(NULL, TEXT("Regiester failure"), g_szChildName, MB_ICONERROR);
return 0;
}
#endif /*=========================子窗口命中测试666==============================*/
stHwnd = CreateWindow(szAppName,
TEXT("SCROLL TEST"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(stHwnd, iCmdShow);
UpdateWindow(stHwnd);
while (GetMessage(&stMsg, NULL, 0, 0))
{
TranslateMessa