Day 7:持续拆解主类别

上一篇漏掉了一个主类别的函数:

void anotherInstanceStarted (const String& commandLine) override
{
}

以 Windows 系统为例,执行档 .exe 被重覆执行时,会有多个 Process 产生。而 anotherInstanceStarted 这支 Callback 函数当「条件」满足时,会被呼叫。

预设情况下,JUCE 程序可以同时运行。不过,有时候会限制同时间只有一支程序执行。要达到这个目的,只要修改主类别中的 moreThanOneInstanceAllowed() 函数回传值,由 true 改成 false

class SamGUIApplicationApplication  : public juce::JUCEApplication
{
public:
  SamGUIApplicationApplication() {}
  
  bool moreThanOneInstanceAllowed() override { return false; }
};

上述改动编译後,同支程序被执行第二次时,anotherInstanceStarted() 会被呼叫,而 commandLine 参数是第二次执行时指示的参数。例如:

demo.exe
demo.exe 2ndArg

anotherInstanceStarted() 会被呼叫,而 commandLine 的值为「2ndArg」。

不少应用程序只允许一个 Process 存在,JUCE 只要改动一个地方即可达到目的。轻松惬意。

前述几个函数是 JUCE GUI Application 的核心,接下来是视窗应用程序中,负责「视窗」显示的核心。

SamGUIApplicationApplication class 内含了一个 MainWindow class,继承自 juce::DocumentWindowMainWindow 负责下图中,红框以外的区域:

上图中的系统按钮(关闭、缩小、最大化),以及视窗大小是否可变,预设视窗大小,是否以全萤幕的方式呈现,是否要隐藏等逻辑,通通由 MainWindow 负责。其预设建构式如下:

MainWindow (String name)
    : DocumentWindow (name,
                      Desktop::getInstance().getDefaultLookAndFeel()
                                                  .findColour (ResizableWindow::backgroundColourId),
                      DocumentWindow::allButtons)
{
    setUsingNativeTitleBar (true);
    setContentOwned (new MainComponent(), true);

   #if JUCE_IOS || JUCE_ANDROID
    setFullScreen (true);
   #else
    setResizable (true, true);
    centreWithSize (getWidth(), getHeight());
   #endif

    setVisible (true);
}

底下列出几个重点说明。JUCE 的视窗风格有两种,一种是符合系统原生外观样式(如上图);另一种是 JUCE 自有风格,如下:

只要将 MainWindow 建构式中的 setUsingNativeTitleBar 参数改成 false,表示不使用原生(Native)的视窗风格。


<<:  Day 7 - DOM - Window Object

>>:  数位 AI 新时代

资安学习路上-picoCTF 解题(Web)2

4. Some Assembly Required 1 按右键,检视网页原始码 点击js档看到下面,...

从零开始的ASP.Net Core 学习

万事起头难 平常的学习方式都是遇到问题才去学、上哪门课学什麽、对哪个主题有兴趣才去学,现在想要有组织...

铁人赛 Day9-- PHP SQL基本语法(四) -- SELECT 到底在SELECT什麽 & WHERE 基本语法

>SELECT:查询 SELECT 基本语法 SELECT '栏位名称' FROM '资料表名...

Day12 跟着官方文件学习Laravel-Session

因为Http是无状态的,我们可以利用session让使用者表明自己的身份。 首先我们必须先建立一个s...

Day25阵列(JavaScript)

Array阵列 简单来说 阵列就是一个有序的序列而且里面可以储存不定数量的任何值 我是把它想像成一个...