实例:根据鼠标的移动,将光标所在位置的坐标值显示在窗口中
步骤:
1、在消息处理函数中添加鼠标移动消息
case WM_MOUSEMOVE:
hdc = GetDC(hWnd);
MyPaint(hdc, lParam);
ReleaseDC(hWnd, hdc);
break;
2、自定义绘图函数,记得在全局变量中声明
void MyPaint(HDC hdc, LPARAM lParam)
{
int x,y;
char str[20]=" ";
x=LOWORD(lParam); //取得鼠标的X坐标值
y=HIWORD(lParam); //取得鼠标的Y坐标值
SetTextColor(hdc, RGB(255, 0, 0);
TextOut(hdc, 10, 10, "鼠标坐标", strlen("鼠标坐标"));
sprintf(str, "X坐标: %d", x);
TextOut(hdc, 30, 30, str, strlen(str));
sprintf(str, "Y坐标: %d", y);
TextOut(hdc, 30, 50, str, strlen(str));
}
3、知识点补充
TestOut()函数是常见的文本输出函数之一,使用方式如下:
BOOL TextOut ( HDC hdc,
int 要输出的字符串的X坐标
int 要输出的字符串的Y坐标
LPCTSTR 要输出的字符串的指针
int 要输出的字符串的长度 );
sprintf是字符串格式化命令,主要功能是把格式化的数据写入某字符串中,需要包含头文件“stdio.h"
sprintf()函数的功能与printf()函数的功能基本一样,但它能把结果输出到指定的字符串中
函数原型:
int sprintf (char *buffer, const char *format, [argument]...)
buffer:char型指针,指向将要写入的字符串的缓冲区
format:格式化字符串
[argument]...:可选参数,可以是任意类型的数据,不限量
本例中,sprintf(str, "X坐标: %d", x);将x坐标的值和文字”X坐标: "打包为一个字符串,传给TestOut()函数输出,因为TestOut()只能输出字符串,不能单独输出x的值
4、字符转换:
项目——属性——常规——字符集——使用多字节字符集
5、在VS2010中,并不会提醒你是不是少了半个括号,但会有红色的波浪线,必须排除所有bug,否则运行的是上次成功的结果
运行结果: