じゃー初めに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関数内で宣言するとか、プログラム終了まで保持されるものにすると良いだろう。 | |
は〜い。了解しましたぁ | |
さて。これで一通りの説明は終わったが。何か質問は? | |
ん〜っとね… そういえば、さっきから思ってたんだけど…何でワタシがプログラミングしてるの? |
|
……今更かよ |
戻る
メインページ>
倉庫>
サンプル置き場>
ディスプレイ解像度変更