easyx 实现无边框窗口

#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;
		}
	}
}

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值