ページ 1 / 1
ウィンドウサイズの自動変更
Posted: 2010年11月12日(金) 17:23
by Jenel
プログラム実行後、
実行ファイル自体のウィンドウサイズを
指定のサイズに自動で変わるようにしたいのですが
どのようにすればよいのでしょうか。
そのような関数がありそうなのですが、使用法がわからずお伺いします。
また、実行中、そのウィンドウのサイズを固定にしておきたいのですが
そのような指定もできるのでしょうか。
C言語の標準関数のみで作成した簡単なプログラムで
Borland C++ Comlilerを使用しています。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月13日(土) 10:39
by ゆーずぃ
>C言語の標準関数のみで作成した簡単なプログラムで
DXライブラリやWinAPI関数を使わずに、標準ライブラリに入っている関数だけでそれを行いたいということでしょうか?それだったら無理だと思います。
ちなみにDXライブラリならば
int SetWindowSizeExtendRate( double ExRate )//現在のウィンドウサイズをExRate倍に変更
int SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int RefreshRate = 60 )//解像度の変更
があり、
WinAPIならば
BOOL SetConsoleWindowInfo(
HANDLE hConsoleOutput, // コンソールスクリーンバッファのハンドル
BOOL bAbsolute, // 構造体の値を座標として使うか、オフセットとして使うか
CONST SMALL_RECT *lpConsoleWindow
// 新しいウィンドウ長方形のアドレス(ここにウィンドウサイズを入れた構造体を持たせる)
);
というものがあるようです。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月13日(土) 11:27
by へろりくしょん
WinAPI なら、SetWindowPos()あたりが手っ取り早くていいかと。
SendMessage()で、WM_SIZE を投げるのも一つの手ですね。
追記です。
WM_SIZE ではなく、WM_SIZING ですね。 失礼いたしました。

Re:ウィンドウサイズの自動変更
Posted: 2010年11月13日(土) 23:03
by Jenel
ゆーずぃさん、へろりさん、ご回答ありがとうございます。
WinAPI関数を使用して実現させようとおもいます。
お教えいただいた関数をウェブ検索してみても
WinAPI関数仕様経験なく、理解できず
本日いろいろ試行錯誤したのですがうまくいきませんでした。
プログラミング実例でも挙げていただければと
またお知恵をお借りしたく存じます・・・。
WinAPI関数のなかで、SetWindowPos()がいちばんぴんときたのですが
以下のような処理にはどれが適しているのでしょう?
#include <windows.h> // WinAPI関数つかうためincludeして
#include <stdio.h>
int main(void){
/* テキスト表示まえに、例えば 幅:20 高さ:5 に変更*/
puts("test"); // テキスト"test"表示して
getchar(); // キー押して終了としたい
return (0);
}
よろしくお願いいたします!
Re:ウィンドウサイズの自動変更
Posted: 2010年11月13日(土) 23:46
by ぬっち
すいません、横から失礼します。
間違っていたら、ごめんなさい。
Win32APIを使用してとのことですが、Janelさんのプログラムの例ではMain関数が
int main( void )
{
//(処理)
}
となっていますが、Win32APIの場合は少なくとも、
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int showCmd )
{
//(処理)
}
となる必要があるのではないでしょうか?
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 00:13
by Jenel
ぬっちさん
ご指摘ありがとうございます。
main関数で書かせてもらったのは
WinAPIを調べるにあたって
いろいろつかえそうだなという関数をみつけて
試しにキー入力に、GetAsyncKeyState関数を使用してみたところ
main関数から呼び出しで問題なく動作してそうだったのです。
本題からそれてしまいましたが
この使用方法に問題があれば、
ウインドウサイズ変更ともども
ご教授ねがいたくおもいます。
よろしくお願いいたします。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 00:33
by ぬっち
なるほど例でしたか、標準関数のみでというようにこのトピックの最初では書いてあったので気になってました。
ウィンドウサイズの変更ですが、私はちょっと前に作った時にはMoveWindowを使用しました。
この関数は、
HWND hWnd; // ウィンドウハンドル
int posX; // ウィンドウの位置(X座標)
int posY; // ウィンドウの位置(Y座標)
int width; // ウィンドウの幅
int height; // ウィンドウの高さ
hWnd = CreateWindow( ... ); // ウィンドウの作成(ここはもう出来てると思うので割愛します)
// 以下posXなどに値を代入。
MoveWindow( hWnd, posX, posY, width, height, TRUE );
のように使います。
width,heightに指定したいサイズを代入すればOKです。
posXやposYにも値を指定すると、ウィンドウの位置も変更することが出来ます。
あまり参考にならないかもしれませんが、どうでしょうか。
もちろんゆーずぃさん、へろりさんの方法でも実現可能です。
お好きなほうを選んでいただければよいかと思います。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 01:04
by Jenel
ご丁寧にありがとうございます。
生半可な理解でWinAPI関数を使っていたようです。
CreateWindow関数で、ウィンドウを作成(初期化)して
MoveWindow関数で、作成したウィンドウを引数にして?
ウィンドウの表示位置やサイズを変更するということでしょうか。
冒頭でわたしがくわしくやりたいことを
申し上げなかったのがいけなかったのですが
ウィンドウサイズを変更したいのは、
プログラム起動すぐのウィンドウなので
CreateWindow関数でサイズ指定すればよいということになりますか?
そこでですが、CreateWindow関数の使用例を教えていただけないでしょうか。
なんどもたよってばかりでもうしわけありませんが、よろしくお願いいたします。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 01:21
by シエル
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 04:40
by ぬっち
> CreateWindow関数で、ウィンドウを作成(初期化)して
> MoveWindow関数で、作成したウィンドウを引数にして?
> ウィンドウの表示位置やサイズを変更するということでしょうか。
はい、だいたいそんな感じの手順で合っています。
> ウィンドウサイズを変更したいのは、
> プログラム起動すぐのウィンドウなので
> CreateWindow関数でサイズ指定すればよいということになりますか?
記事をもう一度読み直して思ったのですが、もしかしたらコンソール画面のことですか?
それだったら、今回紹介した方法だと駄目かもしれません・・・。
むしろ、ゆーずぃさんの方法のほうがよいかと思います。
Janelさんと同じような質問が、
http://detail.chiebukuro.yahoo.co.jp/qa ... 1324530968
にありました。
プログラムからコンソール画面のサイズって変えられるんですね・・・、私も知らなかった^^;
> そこでですが、CreateWindow関数の使用例を教えていただけないでしょうか。
> なんどもたよってばかりでもうしわけありませんが、よろしくお願いいたします。
もし、コンソール画面ではないとのことでしたら、シエルさんの返答にあるURLがかなりわかりやすいかと思います。
Re:ウィンドウサイズの自動変更
Posted: 2010年11月14日(日) 20:29
by Jenel
シエルさん、ぬっちさん、ありがとうございます。
やりたいことができました。
ぬっちさんがおっしゃっているとおり、
わたしがサイズ変更したかったのはコンソール画面でした。
はじめからそういえばよかったのですが
まったくおもいあたりませんでした。
みなさまに誤解させてしまってもうしわけありません。
いずれにしても、みなさまに感謝しております。
相談してよかったです!