ページ 11

ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 07:12
by yamataka
タイトルの通りで、DXライブラリとC言語を使ってウィンドウの枠の太さを変えることは出来ないでしょうか?
もし出来たら、やり方を教えていただけると有り難いです。

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 09:38
by Dixq (管理人)
DXライブラリで作ったウィンドウの枠のサイズを変更するのではなく、
DXライブラリとC言語で他のアプリのウィンドウのサイズを変更したいと言う事でしょうか?

前者であればこちら参考にして下さい。
http://www.play21.jp/board/formz.cgi?ac ... &lognum=54

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 11:51
by yamataka
> DXライブラリで作ったウィンドウの枠のサイズを変更するのではなく、
> DXライブラリとC言語で他のアプリのウィンドウのサイズを変更したいと言う事でしょうか?

いえ、DXライブラリで作ったウィンドウの枠の太さを変更したいのです。

DXライブラリで作ったウィンドウの枠は、なぜか他のソフトより少し枠が太いと思ったので。

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 12:48
by ぬるぽ

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 13:08
by yamataka
画像を張れれば質問の意味が伝えやすいのですが…
すみません、画像の張り方がわかりません。

あと、SetWindowStyleMode()は違う気がするので、CreateWindow()?

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 13:26
by シエル
ファイルを選択から、該当の画像を選択するだけで貼れますよ

Re:ウィンドウの枠の太さ

Posted: 2010年7月25日(日) 13:31
by yamataka
おお、気付かなかった!
シエルさんありがとうございます。

上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?

(まあ、そんな気になる程の違いではないのですが…) 画像

Re:ウィンドウの枠の太さ

Posted: 2010年7月27日(火) 00:42
by ISLe
> 上の画像のように、DXライブラリを使用して作ったソフトの枠が他のソフトより太いのです。
> DXライブラリを使用したソフトの枠の太さを、他のソフトの枠の太さに変更することはできますか?

ウインドウスタイルを調べてみたところ、枠付きのウインドウ(WS_BORDERあり)でもWS_POPUPスタイルが設定されているのが原因のような気がします。

Re:ウィンドウの枠の太さ

Posted: 2010年7月27日(火) 11:08
by シエル
DXライブラリは使わないのでできるか分かりませんが、
APIでSetWindowLongあたりを使えば、好きなスタイルに変更できるのでは?

Re:ウィンドウの枠の太さ

Posted: 2010年7月28日(水) 09:58
by yamataka
SetWindowLong(GetMainWindowHandle,GWL_STYLE,WS_VISIBLE | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX);

と、上記のようにだけ付け加えて実行してみましたが、変化はありませんでした。
(もしかしたら WS_~ の選択を間違っている?) 画像

Re:ウィンドウの枠の太さ

Posted: 2010年7月28日(水) 10:30
by Mist
GetMainWindowHandleの後ろに()が抜けてると思いますけど。
あと、SetWindowLongで変更しても、SetWindowPosを実行しないと反映されない場合があります。

http://msdn.microsoft.com/ja-jp/library/cc411203.aspx
の解説のところ。 画像

Re:ウィンドウの枠の太さ

Posted: 2010年7月28日(水) 10:32
by Mist
DXライブラリならSetWindowStyleModeを使うべきかと思いますが。

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 10:43
by yamataka
お久しぶりに失礼します。

色々と試してみて、
SetWindowStyleMode(2);
を設定してDxLib_Init()した後に、
SetWindowLong(GetMainWindowHandle(),GWL_STYLE,WS_VISIBLE | WS_OVERLAPPEDWINDOW^WS_THICKFRAME);
SetWindowPos(GetMainWindowHandle(),HWND_TOP,0,0,640,480,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
をしてみたら出来たのですが理由がわかりません。
SetWindowStyleMode();に0や1を指定した後では出来ないのです。

誰か理由がわかる方すみませんが教えて下さい。

一応本題は解決したので解決にしておきます 画像

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 12:06
by nayo
DXライブラリなら

SetWindowStyleMode(9);

でたぶんお望みのウィンドウになると思いますが…
違ってたらすみません

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 12:12
by シエル
SetWindowStyleModeを0や1にした場合のどういうスタイルになるのか、
DXライブラリはさっぱりわからないので、分かりませんが、
そのスタイルに対応するsetwindowlogとsetwindowposの引数を指定する必要があると思います。

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 12:31
by toyo
DxWin.cppより
------------------------
// ウインドウスタイルの定義

#define WSTYLE_NUM (7) // ウインドウスタイルの数

// 0 :デフォルト
// 1 :タスクバーなし
// 2 :タスクバーなし枠なし
// 3 :枠なし
// 4 :何もなし
// 5 :最小化無し
// 6 :ツールバーに適したウインドウ
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;

const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
0,
WS_EX_TOOLWINDOW,
WS_EX_TOOLWINDOW,
WS_EX_WINDOWEDGE,
} ;

0,1と2の違いは拡張スタイルの有無のようです

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 12:41
by toyo
ソースのバージョンが古かったので当たらし3.03のものでは

// 0 :デフォルト
// 1 :タスクバーなし
// 2 :タスクバーなし枠なし
// 3 :枠なし
// 4 :何もなし
// 5 :最小化無し
// 6 :ツールバーに適したウインドウ
// 7 :最大化ボタンつきウインドウ、初期状態が通常サイズ
// 8 :最大化ボタンつきウインドウ、初期状態が最大化状態
// 9 :デフォルトに縁の立体化無し
const DWORD WStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_POPUP | WS_SYSMENU,
WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZE,
WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_CAPTION,
} ;

const DWORD WExStyle_WindowModeTable[WSTYLE_NUM] =
{
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
0,
WS_EX_TOOLWINDOW,
WS_EX_TOOLWINDOW,
WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,
WS_EX_WINDOWEDGE,
} ;
でした

Re:ウィンドウの枠の太さ

Posted: 2010年8月03日(火) 22:46
by yamataka
あ、最新のバージョンにしたらSetWindowStyleMode(9)でできました。

こんな質問につき合わせてしまってみなさんすみませんでした。