ページ 1 / 1
ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 11:20
by ぬるぽ
龍神録を改造して遊ばさせて貰ってます。
単発な質問なのですが、DXライブラリでウインドウモード時、
ウインドウのシステムバー右上の拡大ボタンはデフォルトで使えないのですが
これを有効にする関数、またはプログラムがあれば知りたいのですが
ご存知の方がいましたら教えてください。
よろしくお願いします。
Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 12:05
by へろりくしょん
DXライブラリはさっっぱりわかりませんが。
とりあえず、ウィンドウにWS_SYSMENU と WS_MAXIMIZEBOX の2つのスタイルを追加すればいいんじゃないですか?
調べてみたら、GetMainWindowHandle()関数でウィンドウのハンドルを取れるみたいです。
HWND hwnd = GetMainWindowHandle();
DWORD style = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, style | WS_SYSMENU | WS_MAXIMIZEBOX);
とでもすればいけそうです。
DXライブラリは持ってませんから試してはいませんが。
Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 12:11
by ookami
こんなんありました。Alt+Enterとセットですが、専用の関数が用意されているようです。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1096
参考になりますでしょうか。
Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 13:23
by ぬるぽ
返答ありがとうございます。
ookamiさんのURLより、参考にして調べてみると
SetUseASyncChangeWindowModeFunctionを使えば良いことが分かり、助かりました。
本当に出来るかどうか龍神録50章を利用して
簡単に追加して実装してみたのですが、
main.cpp内に以下を追加
//画面モード変更時に呼ばれるコールバック関数
void ChangeCallback( void *Data ){ //←追加
load(); //←追加
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
// 最大化ボタンを有効にする
SetUseASyncChangeWindowModeFunction( TRUE, ChangeCallback, NULL ); //←追加
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
ウインドウモード時にAlt+Enter又は、拡大ボタンを押す、
フルスクリーン時にAlt+Enterを押すと、描画はされることはされるのですが、
画面がちらつくようになる+処理がやや遅くなる
という現象が起こるのですが、これは何が原因で、どうすれば直るのでしょうか?
分かる方がいましたら教えてください。よろしくお願いします。
念のため50章+追加分のプログラムを含んだものをうpします。
http://www.dotup.org/uploda/www.dotup.o ... 2.rar.html
パス:sage
追記:誤字修正

Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 13:44
by toyo
私のVistaでは画面真っ黒になって動きませんでした
DXライブラリが古いバージョンなのが原因のようです
最新のライブラリに変更してビルドしなおしたら動作しましたが私の環境ではちらつきや遅くなる現象は確認できませんでした
Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 13:44
by ookami
初期化時だけでなく、
ChangeCallback関数の中にも、
SetDrawScreen( DX_SCREEN_BACK )
を追加するとどうでしょうか?
Re:ウインドウモード時、右上の拡大ボタンを有効にする方法
Posted: 2010年7月02日(金) 13:55
by ぬるぽ
返答ありがとうございます。
ookamiさんのおっしゃる通りに試してみたところ
正常な動作が確認できました。ありがとうございます。
原因は何だろうと調べてみたところ
以下、引用
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1577
>以下の設定系関数は画面の最大化<最小化を切り替えると再設定を行う必要があります
>SetDrawArea, SetDrawScreen, SetDrawMode, SetDrawBlendMode, SetDrawBright
>うさぎさんの事象の場合、画面モードの変更をしたためSetDrawScreenの設定が
>DX_SCREEN_BACKからDX_SCREEN_FRONTに戻り、ScreenFlip関数による描画が
>2フレームに1回になってしまったため、画面が点滅しているように見えたのだと思います。
ということらしいです。非常に助かりました。
アドバイスをくれた方々、ありがとうございました。