JUCEプログラミング、ウィンドウのリサイズについて

チュートリアルだけでは理解が及んでいないので、その補完を行いました。

自分が実装したいことは最後は考えないとね〜

前回、アプリの背景として画像を埋め込んだのですが、画像を使い始めると、ウィンドウのサイズ変更がGUIの実装をかなり複雑にしそうな気がしてきました。

JUCEアプリでウィンドウのとりあえず固定サイズにしたいと思い、setResizeを使おうと思ったのですが、しっかり理解しきれておらず、試行錯誤をしましたので、その備忘録です。

ちなみに、ウィンドウのリサイズについては、以前に以下のチュートリアルでもやっていましたが、それだけでは理解が及んでいなかったので、今回の調査に時間が取られてしましました^^;

以前勉強していたウィンドウの設定に関するチュートリアルです。

あわせて読みたい
JUCEプログラミング、The application window、ウィンドウのカスタマイズについて ウィンドウの機能の設定も色々とできるみたいですね。 コンストラクタで設定をするだけなので、用途に応じて設定していきたいね。 前回に引き続き、JUCEプログラミング...
目次

こんな人の役に立つかも

・JUCEプログラミングを勉強している人

・JUCEアプリのウィンドウを固定サイズにしたい人

ウィンドウサイズの固定をするプログラム

Projucerで生成したプロジェクトには、main.cppというプログラムが存在します。

※スクショはVisualStudio2019のものになります。

この「main.cpp」には、ウィンドウの生成など、これから作成するアプリの基本的な部分が実装されています。

Main.cppへの実装

Main.cppの実装しているアプリ名のクラスの中、MainWindowサブクラスのコンストラクタに追加します。

class ImageTestApplication  : public juce::JUCEApplication
{
public:

//...略...

    class MainWindow    : public juce::DocumentWindow
    {
    public:
//MainWindowのコンストラクタです。
        MainWindow (juce::String name)
            : DocumentWindow (name,
                              juce::Desktop::getInstance().getDefaultLookAndFeel()
                                                          .findColour (juce::ResizableWindow::backgroundColourId),
                              DocumentWindow::allButtons)
        {
            //...略...
            setResizable(false, false);//←ここに追加しました。
            setVisible (true);
        }

//...略...
private:
    std::unique_ptr<MainWindow> mainWindow;
};

最終的には、setResizable関数を一行追加するだけなのですが、JUCEアプリのクラス構造に詳しくない場合、迷う点もあるかと思います。

ちなみに、setResizable関数はResizableWindowクラスの関数で、DocumentWindowクラスはResizableWindowクラスを継承していますので、setResizableを使うことができます。MainWinodwクラスはDocumentWindowクラスを継承しているクラスなので、setResizableを同様に利用することができます。

くどい説明ですみません・・・

とにかく、ウィンドウに関する基本的な設定は、このサブクラスのMainWindowクラスで設定すると肝に命じておきます。

失敗していた点

私がやらかしていた失敗として、今まで通り、MainComponentクラスをいじってウィンドウの固定を行おうとしていた点でした。

MainComponentクラスに独自の機能を実装していましたので、そういう流れの考え方になっていたのかと思います。でも、よく考えたら、MainComponentクラスはテンプレートによって、継承しているクラスが違います。GUIテンプレートの場合は「Component」クラスを継承、でもウィンドウサイズを固定するためのsetResizable関数はComponentクラスでは利用できません。継承するクラスを増やしたりしたのですが、そうすると今度はsetSizeなどが2箇所以上に定義されることになり、と色々と紆余曲折をしました 笑

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次