移動する円の移動方向と色をツールバーから変更するプログラムです。
発生している問題と疑問について見解をお願いします。
1.ツールバーが表示されない
ウィンドウ枠をクリックしている間は表示される。
ウィンドウ枠をクリックするとウィンドウ位置が少し下方に移動する。
ツールボタンの位置をクリックまたは離したとき、そのボタンは一瞬表示される。
2.最大化ボタンが無効となっている
ウインドウスタイルに最大化ボタンを表示するように設定したが使用不可となっている。
ツールバー関係の処理をコメントアウトすると使用できるようになる。
3.最大化ボタンを押すと設定ウィンドウサイズの最大サイズを越える
最大化ボタンが有効なとき、最大化するとSetWindowMaxSize関数の設定が無視される。
ツールバーとは無関係ですが、最大化ボタンを押したときの動作は仕様でしょうか。
4.ウィンドウサイズの縦方向が自動補正される
SetWindowMaxSize関数で設定した縦の値に自動補正される。
320x240に設定したウィンドウが縦長になってしまいます。
SetWindowSizeChangeEnableFlagが有効だと補正され、無効だと補正されません。
以下試したプログラム
#include "DxLib.h"
// ツールバー機能を取り外す場合は0をセットしてください
#define TOOLBAR_BLOCK (1)
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
SetWindowStyleMode(7); // 最大化ボタンを有効化
SetGraphMode(::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN), 32); // バックバッファのサイズ
ChangeWindowMode(TRUE); // ウィンドウモード
SetWindowSizeChangeEnableFlag(TRUE, FALSE); // ウィンドウの拡大縮小を許可する
SetWindowMaxSize(1280, 720); // ウィンドウ拡大の最大サイズ
SetWindowMinSize(320, 240); // ウィンドウ縮小の最小サイズ
SetWindowSize(320, 240); // ウィンドウの初期サイズ
SetBackgroundColor(128, 128, 128); // 背景を灰色にする
if (DxLib_Init() == -1) { return -1; }
SetDrawScreen(DX_SCREEN_BACK);
#if TOOLBAR_BLOCK
SetupToolBar(TEXT("Num.bmp"), 10); // サンプル実行フォルダの4BPPのビットマップを使用する
DxLib::AddToolBarButton(TOOLBUTTON_TYPE_NORMAL, TOOLBUTTON_STATE_ENABLE, 0, 100);
DxLib::AddToolBarSep();
DxLib::AddToolBarButton(TOOLBUTTON_TYPE_CHECK, TOOLBUTTON_STATE_ENABLE, 1, 101);
DxLib::AddToolBarButton(TOOLBUTTON_TYPE_CHECK, TOOLBUTTON_STATE_ENABLE, 2, 102);
DxLib::AddToolBarButton(TOOLBUTTON_TYPE_CHECK, TOOLBUTTON_STATE_ENABLE, 3, 103);
#endif
int PosX = 0, AccelX = 2;
int R = 0, G = 0, B = 0;
while (ProcessMessage() == 0 && !CheckHitKey(KEY_INPUT_ESCAPE))
{
#if TOOLBAR_BLOCK
if (GetToolBarButtonState(100)) { AccelX = -AccelX; }
R = GetToolBarButtonState(101) ? 255 : 0;
G = GetToolBarButtonState(102) ? 255 : 0;
B = GetToolBarButtonState(103) ? 255 : 0;
#endif
ClearDrawScreen();
DrawCircle(PosX + 10, 20, 10, GetColor(R, G, B));
PosX = (PosX + AccelX + 300) % 300;
ScreenFlip();
}
DxLib_End();
return 0;
}