チュートリアルだけでは理解が及んでいないので、その補完を行いました。
自分が実装したいことは最後は考えないとね〜
前回、アプリの背景として画像を埋め込んだのですが、画像を使い始めると、ウィンドウのサイズ変更がGUIの実装をかなり複雑にしそうな気がしてきました。
JUCEアプリでウィンドウのとりあえず固定サイズにしたいと思い、setResizeを使おうと思ったのですが、しっかり理解しきれておらず、試行錯誤をしましたので、その備忘録です。
ちなみに、ウィンドウのリサイズについては、以前に以下のチュートリアルでもやっていましたが、それだけでは理解が及んでいなかったので、今回の調査に時間が取られてしましました^^;
以前勉強していたウィンドウの設定に関するチュートリアルです。
こんな人の役に立つかも
・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箇所以上に定義されることになり、と色々と紆余曲折をしました 笑