window鼠标消息解析

  1. 鼠标消息解析

       

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值