| じゃー初めにVC編からいってみようか | |
| VB編の方先やったじゃない | |
| お…お前が『ここしか見ない人居るかもしれないのに『まず』も何も』とか言うからだろうが! …まぁいい。説明いくぞ。 先ほどダウンロードしたファイルを解凍すると、以下のファイルが出てくる。 |
|
| ●Display.h…ヘッダファイル。クラスの宣言 ●Display.cpp…ソースファイル。クラス内のコード |
|
| そんだけ? | |
| そ。この2つだけ | |
| で、これでどうするの? | |
| ふむ。じゃ、VCを起動して、新規作成-プロジェクト-Win32 Console Applicationを選ぼう。 これは、コマンドプロンプト(MS-DOSプロンプト)で実行されるプロジェクトだ。 |
|
| プロジェクト名は…そうだな。"DisplayTest"とでもしとけ。 んで、新規作成-ファイル-C++ソースファイルで一つソースファイルを作れ。 名前は"main.cpp"とでも。 |
|
| OK。 | |
| んで、解凍できた2つのファイルを追加する。 | |
できたよ。![]() これでいい? |
|
| OKだ。 | |
| それじゃ、クラスを使えるようにするぞ。以下のコードを"main.cpp"に記述してくれ | |
|
#include <iostream> #include <windows.h> #include "Display.h" using namespace std; int main() { DisplayMode m_Display; return 0; } |
|
| C++の細かい説明は省くぞ。m_Displayというのがディスプレイ解像度を操作するクラスだ。 | |
| これで画面の解像度変更できるの? | |
| ああ。準備は出来たことになる。 | |
| 使えるようになったところで、ディスプレイ解像度変更クラスの各関数を説明しておこう |
| 関数名 | 引数 | 戻り値 | 説明 |
| GetWidth | なし | int | 現在の画面の幅(ピクセル)が返る。 |
| GetWidth | int n | int | 設定リストのn番目の設定での幅(ピクセル)が返る。 |
| GetHeight | なし | int | 現在の画面の高さ(ピクセル)が返る。 |
| GetHeight | int n | int | 設定リストのn番目の設定での高さ(ピクセル)が返る。 |
| GetBit | なし | int | 現在の色深度(bit)が返る。 |
| GetBit | int n | int | 設定リストのn番目の設定での色深度(bit)が返る。 |
| GetDisplayMode | なし | int | 設定リストを取得する。また、現在の画面情報をデフォルトにする。 この関数は、クラスが変数に宣言されたときに呼び出される為、通常必要ない。 設定リストの数が返る。 |
| GetDisplayModeNumber | なし | int | 設定リストの数が返る。 |
| ChangeDisplayMode | なし | int | デフォルトの解像度に変更する。 関数が成功するとDISP_CHANGE_SUCCESSFULが返る。 |
| ChangeDisplayMode | int n | int | 設定リストのn番目の設定を使用し、解像度を変更する。 関数が成功するとDISP_CHANGE_SUCCESSFULが返る。 |
| ChangeDisplayMode | int w int h int b |
Long | wを幅、hを高さ、bをビット深度として自動的に設定を探して解像度を変更する。 関数が成功するとDISP_CHANGE_SUCCESSFULが返る。 |
| 同じ名前の関数があるね。 | |
| ああ。C++は同じ名前の関数も使えるんだよ。 取り合えずmain関数を以下のように追記してみようか |
|
|
int main() { DisplayMode m_Display; for( int i=0; i < m_Display.GetDisplayModeNumber(); i++ ) cout << m_Display.GetWidth( i ) << " x " << m_Display.GetHeight( i ) << " " << m_Display.GetBit( i ) << " bit\n"; return 0; } |
|
| ん、書けたよ | |
| このコードは、利用できる解像度を列挙して出力している。 実行してみ |
|
はーい![]() あ、出たねぇ |
|
| よしよし。 これで、利用できる解像度は取得できたからな。次はいよいよ変更だ。 さらに追記する。 |
|
|
int main() for( int i=0; i < m_Display.GetDisplayModeNumber(); i++ ) cout << i << ":" << m_Display.GetWidth( i ) << " x " << m_Display.GetHeight( i ) << " " << m_Display.GetBit( i ) << " bit\n"; int n = 0; while(n!=-1){ cin >> n; m_Display.ChangeDisplayMode( n ); } return 0; } |
|
| これで数字を入力すれば、入力された数字に対応する設定に変更されるんだ。 | |
| へぇ。それだけなんだ | |
| ああ。これだけだ。 | |
| 思ったよりも少なかったなぁ | |
| ちなみに、ChangeDisplaySettingを以下のように変更しても同じ結果が得られるはずだ。 | |
|
m_Display.ChangeDisplayMode( m_Display.GetWidth( n ) , m_Display.GetHeight( n ) , m_Display.GetBit( n )); |
|
| こっちは画面サイズと色深度で指定してるのね | |
| そうそう。良く分かったな。 ただ、設定の種類によっては再起動の必要があるものがある…4bitの物とかそうらしいけど。 このクラスではその場合、変更できなくなっている。 |
|
| 4bitっていうと…2…4…8……16色?最近のゲームで16色はあまり使わないから大丈夫だね | |
| おぉ、よく知ってたな。色数計算 今現在のゲームだったら大体8bit(256色)とかだし、問題はなかろうな。 |
|
| それで、解像度を元に戻すのはどうやるの? | |
| うむ。引数無しのChangeDisplayModeを呼び出すんだけどな… …まぁ、そんな事しなくてもいい。一度解像度を変更して、-1を入力してプログラムを終了させてみ? |
|
| え? うん… | |
| あ、元の解像度に戻った。 | |
| そう。このクラスは、自身が破棄されるときに解像度を元に戻すようになってるから、特に解像度を戻すことは考えなくてよくなっている。 まぁ、念のため終了時、引数なしのChangeDisplayModeを呼び出すのも良いが |
|
| へぇ。便利だねぇ | |
| まぁな。しかし、問題はある | |
| ? | |
| main.cppを次のように書き換えてみ? | |
|
#include <iostream> #include <windows.h> #include "Display.h" using namespace std; void func() { DisplayMode m_Display2; m_Display2.ChangeDisplayMode( 800 , 600 , 16 ); } int main() { func(); getchar(); return 0; } |
|
| これは…実行したときに解像度を800×600の16ビットカラーにする命令だよね? | |
| そう。ただし、変更は別の関数上で行っている。 さ、実行してみろ。 |
|
| わかった…… …あれ? 確かに解像度は変わるけど、一瞬で元に戻っちゃうよ? |
|
| その通り。func関数内で宣言された変数はfunc関数が終了されると破棄される。 よって、一瞬で解像度が元に戻ってしまう。 |
|
| なるほどねぇ | |
| だから、ディスプレイ解像度変更クラスは、パブリック変数で宣言するとか、main関数内で宣言するとか、プログラム終了まで保持されるものにすると良いだろう。 | |
| は〜い。了解しましたぁ | |
| さて。これで一通りの説明は終わったが。何か質問は? | |
| ん〜っとね… そういえば、さっきから思ってたんだけど…何でワタシがプログラミングしてるの? |
|
| ……今更かよ |
戻る
メインページ>
倉庫>
サンプル置き場>
ディスプレイ解像度変更