1,Title |
2,デバッグとリリース |
3,変数変換 |
4,ドキュメントとView |
5,著作権情報 |
現段階のアプリのタイトル名は、「Untitled-namae」になっています。
これは、タイトル名の指定がなかったためにデフォルトで付いた名前です。
これに名前を付けるには次のようにします。
BOOL CNamaeApp::InitInstance() { // 標準的な初期化処理 ・・・省略・・・ m_pMainWnd->SetWindowText("namae"); return TRUE; }
このようにすれば、かっこ内の「namae」がタイトルになります。
なお、InitInstance関数はWindowの初期化を行います。
他にもっと一般的な方法があります。任意の位置で
GetParent()->SetWindowText(buf);
とすると、char型で宣言されたbuf変数がアプリのタイトルになります。
例えば、右のダブルクリックのメッセージハンドラで
クラス | メッセージ | メンバ関数 |
CTestView | 右ダブルクリック | OnRButtonDblClk |
void CTestView::OnRButtonDblClk(UINT nFlags, CPoint point) { static int ichi=0; char buf[20]; _itoa(ichi,buf,10); GetParent()->SetWindowText(buf); ichi++; }
これを実行すると右のダブルクリックをするたびにアプリの名称が
1→2→・・・と増えていきます。
また、次のような方法でも可能です。
CString buf; buf="This is Title"; AfxGetMainWnd()->SetWindowText(buf);
これはm_pMainWndが、CWndクラス内でしか使用できないので
他のクラスからは、AfxGetMainWnd()->でポインターを得てから
SetWindowTextでタイトルを指定します。
Microsoft Developer Studioの上の方に「namae-Win32 Debug」か「namae-Win32
Release」
というものがあると思います。
両者ともアプリの内容には差がありません。
デバッグは、コードを描いてそれを試してみるときに使います。
コンパイル時は、コードの最適化やプログラムサイズの最適化をしません。
その分、コンパイルの速度が速くなります。
ただ、このファイルはA:\windows\systemにmfc40d.dllファイルがあるときにのみ
実行できるので、一般に配布できません。
リリースはその反対で、コードやプログラムサイズの最適化をします。
その分、コンパイルの速度は遅くなります。
これは単独で実行できるので、配布するときはこれにします。
なお、最適化や単独での実行はProfessional版以上で可能ですので、
Standard版ではできません。
以下にまとめます。
Debug | Release | |
実行速度の最適化 | なし | 行う(Pro版) |
ファイルサイズの最適化 | なし | 行う(Pro版) |
コンパイル時間 | 早い | 多少遅い |
単独での実行 | 不可(dllファイルが必要) | 可能(Pro版) |
使用目的 | コード編集時 | 配布時 |
intで宣言された変数とDoubleで宣言された変数は
同時に比較するのは原則としていけません。
そこで、次のようにすればDoubleをint型に変換できます。
int x=5,y; double y=20; y=(int)y;
このようにdouble型の前に(int)という括弧とその中に
変換したい変数の型を入れます。
もし、数値を文字に変えたいときは、sprintfを使います。
sprintfは1番目の引数に文字データーを格納する変数
2番目に文字変数に入れる文字のパターンを入れます。
3番目以降の引数は2番目の引数によって変わってきます。
char buf[30]; int a=3,b=5; sprintf (buf,"a=%d b=%d",a,b); pDC->TextOut(0,0,buf,strlen(buf));
結果はa=3 b=5になります。
char buf1[50]="Visual C++",buf2[50]=""; int a=4; sprintf (buf2,"My Soft is %s Ver %d",buf1,a); pDC->TextOut(0,0,buf2,strlen(buf2));
結果は、My Soft is Visual C++ Ver 4になります。
char buf[30]; double a=3.14159; sprintf (buf,"a=%1.5f",a); pDC->TextOut(0,0,buf,strlen(buf));
こうすることで、bufという文字配列にaの数値データが%1.5f形式で代入されます。
%??はいろいろなパターンがあって「%d」は整数、「%s」は文字、「%f」は小数です。
「%1.5f」は1のくらい以上が1桁、小数点以下が5桁ということです。
他にも、C++が用意しているデータ変換ルーチンがあります。
char b[50]="123"; int a=456; a=a+atoi(b); _itoa(a,b,10); pDC->TextOut(0,0,b,strlen(b));
atoiは文字列を数字(int)に変換します。
逆に、_itoaは数字(int)を文字列に変換します。
_itoaの1番目の引数は数値を格納した変数を、2番目には文字列を格納する変数を
3番目は数字が何進法で表されているかというものです。
char b[50]="0.14159"; double a=3; a=a+atof(b); _gcvt(a,6,b); pDC->TextOut(0,0,b,strlen(b));
atofは文字列を数字(double)に変換します。
逆に、_gcvtは数字(double)を文字列に変換します。
1番目の引数は変換元の数値が入った変数、2番目は数値の有効桁数
3番目は変換結果を格納する変数です。
Appwizardを実行してプログラムをつくると標準でクラスが4つつくられます。
基本クラス | CWinApp | CFrameWnd | CDocument | CView |
派生クラス | CNamaeApp | CMainFrame | CNamaeDoc | CNamaeView |
ファイル(*.h) | Namae.h | Mainfrm.h | Namaedoc.h | Namaeview.h |
ファイル(*.cpp) | Namae.cpp | Mainfrm.cpp | Namaedoc.cpp | Namaeview.cpp |
説明 | 全体のクラスを管理する | Windowの外側の枠を管理します。(最大化,閉じるなど) | アプリが使用するデータを管理 | Window内の表示に関する部分 |
基本的には、プログラマーはドキュメントとビュークラスにプログラムを書くか
新たなクラスをつくってそこに書きます。
一般的にはビュークラスはユーザーが入力したデータを処理したり表示したりして
ドキュメントクラスはデーターベースの計算をします。
ビュークラスからドキュメントクラスの関数にアクセスするには
pDoc->kansuu();
のようにアクセスします。ただ、pDocはポインターを取得する必要がありますので
CNamaeDoc* pDoc = GetDocument();
のようにする必要があります。
さらにドキュメントの変数や関数はpublicで宣言しないと
外部からのクラスからアクセスができません。
逆に、外部クラスからアクセスされたり変数を変えられないようにするには
privateで宣言すればいいわけです。
ソフトのページで「Othello」というのがありますが、これは
オセロのコマの配列、コマの反転を行う関数コンピュータはどこにコマを
おくべきかを決める関数などはドキュメントクラスにおいています。
なお、配列データはprivate、関数はPublicにしています。
また、ユーザーの操作によってドキュメントの関数を呼び出したり、
エラーを表示する関数はViewクラスにおいています。
エクスプローラでアプリFileを右クリックすると、そのソフトの情報Windowが現れます。
これには、著作権情報やコメント、ファイルの説明、バージョン情報などが含まれます。
VisualC++でこのような情報を表示させる場合、「プロジェクトワークスペース」の
「リソース」で下の方に「version」というのがあるのでそれをクリックすると
Windowが現れます。ここの情報を入力すればいいわけです。
この著作権ですが、自分で作ったソフトを配布するときは著作権を明示しないと
いけないのでご注意ください。
C++のPageに戻る