http://book.51cto.com/art/200801/63840.htm

来源:百度文库 编辑:神马文学网 时间:2024/04/30 03:46:59
http://book.51cto.com/art/200801/63840.htm
3.5 编写第一个Windows程序——实时显示鼠标位置
http://book.51cto.com  2008-01-08 11:18  屈磊,李媛媛编著  电子工业出版社易飞思公司  我要评论(0)
摘要:《Visual C++开发入门与编程实践》在介绍Visual C++编程语言的同时阐述了Visual C++及面向对象的开发技术和思想。第三章内容介绍了一些必要掌握Windows编程的要点,本文是编写第一个Windows程序——实时显示鼠标位置。 标签:编程  鼠标  Windows程序  Visual C++开发入门与编程实践Oracle帮您准确洞察各个物流环节
3.5  编写第一个Windows程序——实时显示鼠标位置
通过上面4节的内容,Windows编程的基本内容都已讲解完了。在本节中,就用一个例子来应用前面讲解的知识,从而对Windows编程有一个更加完整的认识。
实例3-14:实时显示鼠标在窗口中的位置。
程序的目的是捕获鼠标在进入程序窗口后的位置,并且在鼠标移动的时候,实时跟踪鼠标运动,同时显示鼠标当前的坐标。在程序中将通过WM_MOUSEMOVING来取得鼠标的实时坐标,并且在窗口的中间将鼠标的位置显示出来。
根据前面学过的知识直接生成一个Win32的应用程序,然后加入下面的代码即可,当然也可以直接使用光盘中的程序文件。
窗口的创建和主程序代码如下:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
// TODO: Place code here.
MSG msg;
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style   = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc  = (WNDPROC)WndProc;
wcex.cbClsExtra  = 0;
wcex.cbWndExtra  = 0;
wcex.hInstance  = hInstance;
wcex.hIcon   = LoadIcon(hInstance, (LPCTSTR)IDI_MOUSEMOVE);
wcex.hCursor   = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MouseMove";
wcex.hIconSm   = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(  "MouseMove",
"实时鼠标位置", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
Windows的窗口处理函数的代码如下,注意WM_MOUSEMOVE消息响应的处理。在这个消息处理中,使用了另外的一种获取图形设备句柄的方法。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
POINT pt;
CHAR szString[255];
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_MOUSEMOVE:     //响应鼠标的移动
pt.x = LOWORD(lParam); //取得x的坐标
pt.y = HIWORD(lParam); //取得y的坐标
//空格的目的是保证显示的正确性。sprintf函数目的是将需要输出
//的信息转换成字符串
sprintf( szString, "[ %d,  %d ]   ", pt.x, pt.y );
hdc = GetDC( hWnd );
//输出字符串
TextOut( hdc, 300, 200, szString, strlen( szString ) );
ReleaseDC( hWnd, hdc );
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
程序运行结果如图3-16所示。

图3-16  鼠标实时捕捉结果
上面的程序是完整的实时显示鼠标的程序代码。在WM_MOUSEMOVE中读取鼠标位置使用到了两个宏,由于本书的篇幅有限,因此对这两个宏的详细使用和适用位置,不做解释,在MSDN中有详细的说明。
GetDC()函数和ReleaseDC()函数是一对函数。GetDC()函数的使用范围是非WM_PAINT消息。在这个消息以外如果需要取得图形设备句柄,那么就只能通过这个函数来读取。当使用完成后,需要使用ReleaseDC()来释放句柄。
http://book.51cto.com/art/200801/63840.htm C# http分析常用工具浅析 - 51CTO.COM 在线读书网 http://ds.eywedu.com/index.htm http://www.yation.com/article/webpro/freetextbox.htm Squid中文权威指南 http://blog.s135.com/book/squid/ 分布式计算在中国http://www.equn.com/info/fd03.htm 网格技术及应用一览http://www.pcdog.com/network/html/200444/44200410587_1.htm 分布式计算在中国http://www.equn.com/info/fd03.htm 802.11标准 - 51CTO.COM 开发网格计算应用程序http://industry.ccidnet.com/art/322/20030506/45354 意念经络为什么会感觉到凉气? QQ账户897209957、邮箱fchy9957@qq.com。http://wenwen.soso.com/z/q166923461.htm http://book.sina.com.cn/nzt/live/ele/zubujkf/index.shtml 许小年:房价还得涨 尽管不会永远涨(http://blog.soufun.com/21403192/9825236/articledetail.htm) 时尚观点:“二线品牌”为什么这样红?http://content.chinasspp.com/News/Detail/2008-6-16/62611.htm 住建部:房价波动前所未有 调控压力前所未有http://finance.qq.com/a/20101126/006212.htm?pgv_ref=aio 石油业商会称油荒源于垄断 民营油企无米下炊http://finance.qq.com/a/20101127/000620.htm?pgv_ref=aio 编写质量手册(2) - 51CTO.COM 软件工程师的务实职业生涯规划 - 51CTO.COM 布线:什么是PDS? - 51CTO.COM 使用Jython编写Servlet - 51CTO.COM 详解Cassandra数据模型 - 51CTO.COM 13.3.2 程序设计 - 51CTO.COM 关于C#知识点总结 - 51CTO.COM XML节点学习总结 - 51CTO.COM