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