色々ツールストリップボタンにねじ込める

アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

色々ツールストリップボタンにねじ込める

投稿記事 by もるも » 2年前

パネルにボタン配置のデザインがなーんか気に入らなくなってきたので全部ねじ込んでみた。
昔は扱い方がよくわからなくて避けていたが、マウスカーソルが乗ったらフォーカスさせれば反応の悪さは何とかなった・・・と思う。

ツールストリップボタンがマウスホイールのイベント持ってたら、グリグリしてペンサイズ変えたかったけども、
どうせドット打つのに太いペン使わんだろうと思って1pxだけのまま放置。
NumericUpDown追加するの可能らしいが手間がかかるしなぁ。

フォームだらけだと邪魔なのでレイヤーアニメーションは左上に表示させたが、
よくよく考えると連結して見たい場合もあるので(海とか水辺のアニメーションとか)
直さなきゃ(´・ω・`)


スクリーンショット (323).png


タイルモードでもツールボタンは同じものを使うからついでに図形を配列に書きこんで描けるようにしてみた。
図形描くアルゴリズムに詳しくないから思いっきり仮想画像から転写というせこいやり方w(ちゃんと描画予測も出るよ!)
スクリーンショット (324).png

アバター
usao
記事: 1887
登録日時: 11年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by usao » 2年前

> ツールストリップボタン

Winformsでこいつら使ってみたとき…

・ボタンをドラッグで位置移動できる ← 好きな順序に並べ替えできるのね.
・他のツールストリップにも移動できる ← いや,そこまでは…
・他のフォーム上にあるツールストリップにも移動できる ← 何なんだよマジで

という感じだった記憶.
最初のが欲しいんだけど,それを許すと(? 設定だったような?) 後ろ2つのやめてほしい挙動がもれなく付いてくる,みたいな.

アバター
いわん
記事: 30
登録日時: 8年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by いわん » 2年前

DOSプログラマーの私にはWindowsプログラムのツールボタンとかメニューとかの
GUI部分のコードを書くのがしんどくてw。作りたい本質的な部分とは関係ないから
どうしてもおざなりになってしまします。
以前はコンソール画面に直接グラフィックを描画するプログラム作ってたんですが、
Windows10になってから画面の表示スケール変更に追随できないという問題が発生
したため今はウィンドウ版に移植する作業を頑張っています(;^_^A
3_92_126_6_s.png
昔作ったコンソール画面に描くプログラム

アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by もるも » 2年前

>>usaoさん
自由度が高すぎるwツールコントロールは挙動を把握するまで扱いに戸惑いますよねぇ(;^ω^)

>>いわんさん
コンソール画面は文字だけだと思っていましたΣ(・ω・ノ)ノ!わお

アバター
usao
記事: 1887
登録日時: 11年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by usao » 2年前

WinFormsだと(? 他でも同じだろうか?),こいつら(ツールストリップボタン)とかメニュー項目は
フォーム上のコントロールとは違って「フォーカス」の概念が無いので,場合によっては面倒.

例えば,TextBoxとかグリッドのセルとかに入力している最中にこいつらを押すことができる
(:TextBoxはフォーカスを奪われないからまだ入力作業中の状態で,その状態下でイベントハンドラが走ることになる)
ので,そのイベントで行う処理がフォーム上のTextBoxとかで入力する情報に関係している場合,挙動がイミフになる.

ユーザから見れば,このような操作は【TextBoxに「入力してから」ボタンを押したつもり】なんだけど,TextBoxへ入力した内容は実は動作に反映されてない,みたいな.

アバター
usao
記事: 1887
登録日時: 11年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by usao » 2年前

> コンソール画面に直接グラフィック

ウィンドウを探してきて DC に強引に描くやつかな?

まぁメニューとかちまちま作るのが面倒な場合は,あれですよ,全部キーボード操作ですよ.
メニューに関しては一項目:【キー操作の説明が長々と書かれたメッセージボックスを出す機能】さえ追加すれば「最低限のことはやった感」が出せます.

アバター
いわん
記事: 30
登録日時: 8年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by いわん » 2年前

usao さんが書きました:
2年前
ウィンドウを探してきて DC に強引に描くやつかな?
概ねそんな感じだったかな?
なんかいろいろやっていた気がするので、昔のソースから初期設定部分だけ抜粋してきました。

CODE:

HANDLE m_hStdIn;
HANDLE m_hScrBuf;
HWND m_hWnd;
CONSOLE_SCREEN_BUFFER_INFO m_csbi;
CONSOLE_CURSOR_INFO m_cci;

// 標準出力ハンドル取得
m_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (m_hStdOut == INVALID_HANDLE_VALUE)
{
	return false;
}
// コンソールスクリーンバッファの情報を取得
if (GetConsoleScreenBufferInfo(m_hStdOut, &m_csbi) == 0)
{
	return false;
}
// ウィンドウの最大サイズを表示のサイズに合わせる(スクロールバーが消える)
m_csbi.dwMaximumWindowSize = m_csbi.dwSize;
if (SetConsoleScreenBufferSize(m_hStdOut, m_csbi.dwMaximumWindowSize) == 0)
{
	return false;
}
// コンソールスクリーンバッファを作成(表示用)
m_hScrBuf = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
if (m_hScrBuf == INVALID_HANDLE_VALUE)
{
	return false;
}
// アクティブなスクリーンバッファに設定
if (SetConsoleActiveScreenBuffer(m_hScrBuf) == 0)
{
	return false;
}
// カーソルを消す
if (::GetConsoleCursorInfo(m_hStdOut, &m_cci))
{
	m_cci.bVisible = false;
	::SetConsoleCursorInfo(m_hScrBuf, &m_cci);
}
// 入力モードを設定する
DWORD dwMode;
m_hStdIn = ::GetStdHandle(STD_INPUT_HANDLE);
if (m_hStdIn == INVALID_HANDLE_VALUE)
{
	return false;
}
else
{
	if (::GetConsoleMode(m_hStdIn, &dwMode) != 0)
	{
		dwMode |= ENABLE_MOUSE_INPUT;
		if (::SetConsoleMode(m_hStdIn, dwMode) != 0)
		{
		}
		else
		{
			// error
		}
	}
	else
	{
		// error
	}
}

// コンソールウィンドウを取得
m_hWnd = ::GetConsoleWindow();
if (m_hWnd == NULL)
{
	return false;
}
思った以上にいろいろやってました(;^_^A
一番最後がコンソール画面のハンドルを取得する処理ですね。

アバター
もるも
記事: 54
登録日時: 8年前
連絡を取る:

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by もるも » 2年前

文字変換中でも押せちゃうみたいな感じですかね。となると変更前のテキスト情報で処理されたり?

コンソールウィンドウのゲームは本のサンプルで文字列をどんどん表示して画面更新していくものしか見たことが無かったので、
ひたすら驚き(@_@)

アバター
usao
記事: 1887
登録日時: 11年前

Re: 色々ツールストリップボタンにねじ込める

投稿記事 by usao » 2年前

> となると変更前のテキスト情報で処理されたり?

そういうことになりますね.

「だったら俺はツールストリップボタンのイベントの先頭でどこかてきとーな奴にフォーカス移す処理でも書いてやんよ」
とかいう小手先の対応策を考えたりすると,
それをいちいち書くのが面倒なだけでなく,validating 関係の処理と絡み合って面倒な事態が発生したような記憶.