import win.ui;
import gdi;
// 创建主窗口
var mainForm = win.form(text="最小边框窗口";right=600;bottom=400;border="none")
// 保留可调整大小的功能,但移除默认边框
mainForm.modifyStyle(0x800000/*WS_BORDER*/,0x40000/*WS_THICKFRAME*/)
// 禁用DWM边框
::Dwmapi := ..raw.loadDll("Dwmapi.dll");
::Dwmapi.DwmSetWindowAttribute(mainForm.hwnd, 2/*DWMWA_NCRENDERING_POLICY*/, {int value = 1}, 4);
// 最小化非客户区
var margins = {int left=1;int right=1;int top=1;int bottom=1}
::Dwmapi.DwmExtendFrameIntoClientArea(mainForm.hwnd, margins);
// 设置窗口区域为整个窗口
mainForm.onMouseDown = function(wParam,lParam){
mainForm.hitCaption()
}
// 绘制函数
mainForm.onPaint = function(hdc) {
var rc = mainForm.getClientRect();
// 填充白色背景
::Gdi32.FillRect(hdc, rc, ::Gdi32.GetStockObject(0/*WHITE_BRUSH*/));
// 绘制1像素黑色边框
var hPen = ::Gdi32.CreatePen(0/*PS_SOLID*/, 1, 0/*BLACK*/);
var hOldPen = ::Gdi32.SelectObject(hdc, hPen);
::Gdi32.MoveToEx(hdc, 0, 0, null);
::Gdi32.LineTo(hdc, rc.right-1, 0);
::Gdi32.LineTo(hdc, rc.right-1, rc.bottom-1);
::Gdi32.LineTo(hdc, 0, rc.bottom-1);
::Gdi32.LineTo(hdc, 0, 0);
::Gdi32.SelectObject(hdc, hOldPen);
::Gdi32.DeleteObject(hPen);
}
// 创建关闭按钮
var closeButton = mainForm.add(
button={cls="button";text="X";left=560;top=10;width=30;height=30}
)
closeButton.oncommand = function(id,event){
mainForm.close()
}
// 处理窗口大小改变
mainForm.onSize = function(flags,cx,cy){
mainForm.redraw();
}
// 显示窗口
mainForm.show();
// 运行消息循环
win.loopMessage();
这是我用 claude3.5生成的代码,经过几次反复要求它修改代码,它都无法实现没有边框,没有标题栏、可缩放的窗口。这段代码的生成的窗体,有一个灰色的边框我始终无法解决。我希望代码能够为我生成一个可以拖拽,可以缩放,可以自定义标题栏,窄边框甚至无边框,并且点击标题栏,可以移动窗体。我编写这个窗口本意是想做一个模仿 QQ 一样可以吸附隐藏的小软件,吸附隐藏的功能只实现了一小半。有哪位大佬能够帮助一下吗?