#include <graphics.h>
#include <Windows.h>
#include <stdio.h>
int main()
{
int rW = GetSystemMetrics(SM_CXSCREEN); // 屏幕宽度 像素
int rH = GetSystemMetrics(SM_CYSCREEN); // 屏幕高度 像素
HWND hwnd = initgraph(rW, rH, EW_DBLCLKS); // 初始化绘图窗口并获取窗口句柄(以 EasyX 为例)
LONG l_WinStyle = GetWindowLong(hwnd, GWL_STYLE); // 获取窗口信息
// 设置窗口信息 最大化 取消标题栏及边框
SetWindowLong(hwnd, GWL_STYLE, (l_WinStyle | WS_POPUP | WS_MAXIMIZE) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);// 直接修改窗口样式
// SendMessage(hwnd, WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
SetWindowPos(hwnd, HWND_TOP, 0, 0, rW, rH, 0);
ExMessage m; // 定义消息变量
FILE* fp = fopen("a.txt", "w+");
POINT point;
char buff[1024] = { 0 };
while (true)
{
// 获取一条鼠标或按键消息
m = getmessage(EM_MOUSE | EM_KEY);
GetCursorPos(&point);
ScreenToClient(hwnd, &point); // 将鼠标指针位置转换为窗口坐标
if (point.x < 0 || point.y < 0 || point.x > rW || point.y > rH)
{
fprintf(fp, "在窗口外\n");
sprintf(buff, "在窗口外 源pos:%d %d 转换后pos:%d %d", m.x, m.y, point.x, point.y);
// cleardevice();
outtextxy(200, 200, buff);
}
else
{
fprintf(fp, "在窗口内\n");
sprintf(buff, "在窗口内 源pos:%d %d 转换后pos:%d %d", m.x, m.y, point.x, point.y);
// cleardevice();
outtextxy(200, 200, buff);
}
switch (m.message)
{
case WM_MOUSEMOVE:
// 鼠标移动的时候画红色的小点
putpixel(m.x, m.y, RED);
SendMessage(hwnd, WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
/*point.x = m.x;
point.y = m.y;*/
break;
case WM_LBUTTONDBLCLK:
SetWindowPos(hwnd, HWND_TOP, 0, 0, rW, rH, SWP_NOSIZE);
break;
case WM_LBUTTONDOWN:
// 如果点左键的同时按下了 Ctrl 键
if (m.ctrl)
// 画一个大方块
rectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);
else
// 画一个小方块
rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
break;
case WM_KEYDOWN:
if (m.vkcode == VK_ESCAPE)
return 0; // 按 ESC 键退出程序
break;
}
}
}