VC++で作る周波数→周期に変換するツール

電気工作をするときに、クロックを周波数で表現されているときがあります。それを わざわざ周期に直すのに手計算するのがめんどくさいので、VC++で「周波数→周期」に 変換するものを作りました。



作成

動作は値を入力してボタンを押すと変換するようにしました。
textBoxで入力した値はstring型のデータなので計算するにはdouble型に変換する必要があります。 そこで変換にはConvert::ToDouble()を使います。これで周波数を周期にする計算ができます。 そして次に計算した値をlabelにいれます。今度はlabelに値を入れるために、string型に変換 し直す必要があります。そこでConvert::ToStringで変換してあげて完成です。



private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

double f,t;
f = Convert::ToDouble(textBox1->Text);
t=1/f;
label6->Text = Convert::ToString(t);
label7->Text = Convert::ToString(t*1000);
label8->Text = Convert::ToString(t*1000000);
}




動かしてみよう

textBoxの中に周期に変換したい周波数を入れて変換を押すと変換するのが確認できました。しかし、高周波数 になると、sec、msecの値がエクセルでよくみる変な数字に変わってしまいました。さらに、数値を代入しなかったり 文字をいれたりすると動かなくなります。どうすればよいのか…


作り直すことにしました…

こうなったらコンソールアプリケーションのWindowsアプリケーションからダイアログボックスで がんばって作ってやる~~~~~~~~~~~!!!!!
ってなわけで、「Visual C++プログラミングへのアプローチ Win32API完璧マスタ」の本を参考に 作ってみた。

GetDlgItemText()で取り込んだ数値は計算をするためにstring型(文字列)をdouble型に変換しなければならないので、 VC++に標準でついているstdlib.hの中の「atof」関数を用いました。これでchar型配列からdouble型への変換ができました。

そしてその後に計算プログラムを入れて…っと

計算後SetDlgItemText()に計算後の数値をいれようと思ったら「'double' から 'LPCSTR' に変換できません」って でてきた。なんだこれはと思って'LPCSTR'を調べてみると'LPCSTR'はconst char*のことらしい。 ってなわけで、double型に変換後、数値を計算してchar型に戻す必要があります。
数値を文字列へ変換する関数にitoa()というものがありますが、これはint型からchar型にしか変更できません。なので これを使っても小数点を表示することができなくなってしまいます。
そこで3時間ほどインターネットで探していると、double型からchar型に変換するのに、stdio.hのsprintf関数を用いた 方法があるの発見し、それを使うと見事「周波数→周期変換ソフト」が完成しました。

一応、文字を入れてもフリーズしたりすることがないので、安心して使えるようになりました。本当は数字以外ははじくやり方とか あるのですが、もうしんどいのでここらでやめときます…



作成した際に使用したソースファイルと変換ソフトをうpしときます↓
周波数→周期変換ソフト (c2.zip)