我觉得windows中的spotify看起来很漂亮,显然不是原生的窗口gui.
看似完全没有金属外观的边框.
我想知道他们用什么库来创建这么漂亮的应用程序?
是否有可能创建一个漂亮的应用程序跨平台(真的很好的Mac和Windows)?
我注意到最近新的 Windows 应用程序有没有边框的趋势。Github 桌面、MS Teams、VS Code。每次看清应用程序的边缘都会伤害我的大脑和眼睛。实际上没有边界,没有阴影,没有单个像素线,什么都没有。
我错过了什么吗?我是不是做错了什么?我是唯一一个有这种挫败感的人吗?
有谁知道并可以解释为什么以及如何做到这一点?有谁知道任何解决方法或强制某种边界的方法(即使是阴影也可以)?
我正在尝试在Qt中创建Metro风格的界面,这意味着不使用Windows 7 Aero边框.我已经将窗口设置为无边框,并添加了使其可拖动的代码以及使其最小化,最大化和关闭的按钮.但是,Aero Snap不起作用.
我知道这是可能的,因为Visual Studio 2012,MS Word 2013和Steam都有Aero Snap的无边界窗口.
如何将Aero Snap实现为无边框Qt应用程序?谢谢.
我正在尝试创建一个无边框窗口,用OpenGL视口填充屏幕.问题是,当我将窗口和视口设置为与桌面大小相同时,窗口会在丢失和获得焦点,退出和创建时闪烁黑色.这可能与Windows将窗口设置为某种类型的真正"全屏"模式有关.在使用这种无边框全屏窗口的其他应用程序(DirectX?)中似乎不会发生这种情况.
我相信SFML有这个问题的变种.
有一种解决方法:不要将窗口设置为桌面的确切大小.例如,使窗口的宽度比桌面的宽度大一个像素.
下面是一个没有错误检查的SSCCE,它显示了我正在谈论的内容.这将创建一个无边框全屏窗口,桌面大小的OpenGL视口显示丑陋的绿色(退出AltF4).您可以更改仅向窗口宽度添加一个额外像素的行#define FIX_BUG 0,#define FIX_BUG 1以查看我想要的行为.
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#pragma comment(lib, "OpenGL32.lib")
#define FIX_BUG 0
void MyRegisterClass(HINSTANCE hInstance);
HWND MyCreateWindow(HINSTANCE hInstance);
void MySetupOpenGLContext(HWND hWnd);
void MySetPixelFormat(HDC hDC);
RECT MyGetDesktopRect();
void MyLoadOpenGLFunctions();
#define APIENTRYP APIENTRY *
#define GLAPI extern
#define GL_COLOR 0x1800
typedef int GLint;
typedef int GLsizei;
typedef unsigned int GLenum;
typedef float GLfloat;
typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,但我不想要标题栏:
如果标题一直保持不变,显示它是否有意义?例如,如果一个应用程序没有显示文档的名称或它打开的任何其他资产的名称,并且在其他控件的顶部有足够的空间供您移动窗口时抓住,标题是否有多大用处?
问题是:我该怎么做?我试过使用,[mainWindow setStyleMask:NSBorderlessWindowMask];但我不能让它有圆角。我真的不知道如何制作圆角。除此之外,我不能让它有一个调整大小的控件。如果我使用[mainWindow setStyleMask:NSBorderlessWindowMask | NSResizableWindowMask];它就不再是无边界的了。谁能帮我?谢谢。
我的问题与此问题基本相同,但适用于Qt C++框架.
我通过使用标志Qt :: QPopup |继承QWidget来实现一个弹出窗口 Qt的:: QWindow.我希望这个窗口是可移动的和可调整大小的,我现在通过使用以下代码中的鼠标事件来实现这一点:
void TextPopup::mousePressEvent(QMouseEvent* event)
{
offset = event->pos();
QWidget::mousePressEvent(event);
}
void TextPopup::mouseMoveEvent(QMouseEvent* event)
{
if(event->buttons() & Qt::LeftButton)
if(resizeMode) {
QPoint p = mapToGlobal(event->pos()) - geometry().topLeft();
resize(p.x(), p.y());
} else
move(mapToParent(event->pos() - offset));
else {
QPoint diff = geometry().bottomRight() - mapToGlobal(event->pos());
if(diff.x() <= 6 && diff.y() <= 6) {
if(!resizeMode) {
setCursor(Qt::SizeFDiagCursor);
resizeMode = true;
}
} else {
if(resizeMode) {
setCursor(Qt::SizeAllCursor);
resizeMode = false;
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试调整无边框形状的大小,但是当我使用右/底侧增加大小时,边界和旧客户区之间会出现间隙,这取决于移动鼠标的速度.
当你从左边界或从左下角调整大小时,效果更明显,到处都是可怕的(我尝试过其他商业应用程序也会发生这种情况).当我改变为相当大的边框时,这种效果也会发生,但它并不像我删除表格边框那样糟糕
表单布局包含一个顶部面板,用于执行标题栏功能(带有一些tImages和按钮),还有一些其他面板显示其他信息(如备忘录,其他控件等)
有一段我的代码,我捕获鼠标按钮并向Windows发送消息,但我也尝试手动执行类似的结果
激活顶部面板的双缓冲区可避免闪烁,但调整面板大小不会与窗体大小调整同步,从而出现间隙或面板部分消失
procedure TOutputForm.ApplicationEvents1Message( var Msg: tagMSG;
var Handled: Boolean );
const
BorderBuffer = 5;
var
X, Y: Integer;
ClientPoint: TPoint;
direction: integer;
begin
Handled := false;
case Msg.message of
WM_LBUTTONDOWN:
begin
if fResizable then
begin
if fSides = [sTop] then
direction := 3
else if fSides = [sLeft] then
direction := 1
else if fSides = [sBottom] then
direction := 6
else if fSides = [sRight] then
direction := 2
else if fSides = [sRight, sTop] …Run Code Online (Sandbox Code Playgroud) 我需要创建一个具有指定背景颜色的无边框窗口.我知道如何删除非客户区域并得到这样的东西:

这很酷但不是我想要的.如果你仔细看看任何一个航空窗口 - 它周围有一个阴影(实际上这不是阴影,而是一些发光).我找到了一个可以使用此代码添加阴影的地方:
const MARGINS shadow_on = { 1, 1, 1, 1 };
DwmExtendFrameIntoClientArea(hwnd, &shadow_on);
Run Code Online (Sandbox Code Playgroud)
这几乎是做它的工作(认为这对我来说绝对不清楚 - 文档没有提到关于阴影和这个函数的关系).几乎.窗户周围出现了一个薄边框.看起来它是半透明的,它打破了窗口的外观和感觉:

我知道这是可能的 - 视觉工作室甚至以某种方式改变了这个边界的颜色!
更新:正如IInspectable在评论中注意到我可以使用负边距DwmExtendFrameIntoClientArea().我设置了-1值并得到了这个结果:

正如你所看到的 - 它甚至更奇怪.我试图用颜色填充背景,但没有运气.
我正在Qt中编写一个跨平台的Web浏览器,因为它通过QWebView或更新的QWebEngineView内置了WebKit支持.为了获得紧凑的窗口镶边,我想通过Qt :: FramelessWindowHint禁用本机窗口标题栏和边框,但仍然可以获得本机行为,如调整大小和Windows的Aero Snap.
首先,我减少了PKE的BorderlessWindow演示.这很好用:在Windows 8.1 x64上,窗口可以调整大小,可以拖动或双击自定义标题栏,Aero Snap也可以.
然后我尝试用QWebEngineView替换中央QLabel.这导致灰色原生大小的边框出现在我的窗口周围.当我在窗口顶部有交互式小部件时(如菜单或工具栏),带有QWebEngineView的"ghost"标题栏会将它们向下推,但会在其位置接受光标点击.
这是比较两个窗口的屏幕截图.(在深色背景上查看它以更好地看到右侧的浅灰色边框.)

QWebEngineView是否与无框窗口兼容,还是应该处理原生窗口chrome的浪费空间?
编辑:用QWebView替换QWebEngineView可以避免此问题:

但是,不推荐使用WebView,WebEngine具有更多有用的功能:
不过,我真的不想在原生标题栏上浪费空间,所以如果QWebEngineView可以用于无框窗口,我想知道如何使用.
mainwindow.h:
#include <QtWidgets>
#include <QToolBar>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow();
protected:
void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
private:
QToolBar *titleBar;
};
Run Code Online (Sandbox Code Playgroud)
mainwindow.cpp:
#include <QtWidgets>
#include <QLabel>
#include <QWebEngineView>
#include <windows.h>
#include <windowsx.h>
#include "mainwindow.h"
MainWindow::MainWindow() : QMainWindow() {
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
titleBar = addToolBar(tr("Title Bar")); …Run Code Online (Sandbox Code Playgroud) 我正在尝试删除表单的标题栏,同时保持边框具有可调整大小的形式.我设置BorderStyle到bsNone并重写CreateParams程序:
procedure TMainForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or WS_BORDER or WS_THICKFRAME;
end;
Run Code Online (Sandbox Code Playgroud)
我面临的唯一问题是表格上边缘的白条(在胜利10中):
我怎么能摆脱这个白色的酒吧?