スポンサーサイト

  • 2022.01.16 Sunday

一定期間更新がないため広告を表示しています

  • 0
    • -
    • -
    • -

    C++/CLI初心者入門これまでのまとめ編

    • 2017.01.25 Wednesday
    • 10:04

     

    C++/CLI初心者入門をはじめてから、1年になります。

    まだ、説明していない項目が山ほどありますが、

    全部書いていたら私の寿命がきてしまいます。

     

    いちおう、これまでやってきたまとめとして書いて、

    この初心者入門シリーズは終わりにしたいと思います。

    なぜか、一般のプログラムの説明は、(わざと?)分かりにくく書かれています。

    読むたびに、本当は教えたくないんじゃないか?と思うことがあります。

    ここでは、極力イメージしやすいようにしたつもりです。

     

    もちろん、この説明も素人がしていますので、説明のしかたは正確ではありませんが、

    なんとなくわかって、もらえば幸いです。

     

    プログラム全般

     

    基本的にプログラムは、一度に書くと分かりにくいので、複数の

    Header(拡張子.h)プログラムとひとつのmainプログラム(拡張子.cpp)に分けて作ります。

    おもに、関数(クラス等)や定義などをheaderに書くのですが、例外的に

    form(ボタンなどを使うもの)を使ったものは、Headerにメインを書いていきます。

     

    プログラムの中で、クラス内、関数内だけで使うときは、private:

    全体で使うときは、public:

    省略すると、privateです。

     

    注釈文を付けるには、//を頭につける。

     

    基本形

     

    int A;  整数型(小数点なし)

    double A; 実数型(小数点あり)

    char A;文字型(一文字の時)

    string A:文字列型(多くの文字)ですが、string^ A;と^を付ける。

    ^とつけると文字列のポインタ(場所の情報)を使って値をもらうということ。

    (正確ではありませんが、10番地をAとするともらう値が100番地にあるとすれば、

    10番地Aは「100番地の値です」という値になる。

    ついでに、B=&A(変数)はBはAの変数のアドレス、B=*A(アドレス)はBはAのアドレスの値です。)

    Datetime A;日付時間型(例:2017/01/25 16:25:30など) 今日の日付は、 DateTime::Today

    bool A:論理型(結果によりfalse 0かtrue 1になる)

    const A;定数で値を変更できない(同じようなもので、#define 文字列1 文字列2があります。これは、翻訳時に文字列1を文字列2に変えて実行するというものです。) 

     

    あと、わかりにくいのが、参照型です。

    object名 A;object(クラス内のプログラム)をA(インスタンス名)と関連つける

    A = gcnew クラス名();とするとAという名前でクラス名()のプログラムが使えるようになる。

    (ボタンの例)

        private: System::Windows::Forms::Button^  button1;
        private: System::Windows::Forms::Button^  button2;

                this->button1 = (gcnew System::Windows::Forms::Button());
                this->button2 = (gcnew System::Windows::Forms::Button());

     

    配列を宣言する。array<doubleやint>^変数名

    文字の配列の宣言は、 array<String^>^変数名 = gcnew array<String^>(配列数)

    二次元配列の宣言(文字)は、 array<String^,2>^変数名=gcnew array<String^,2>(配列数,配列数)
    の,2のところが、次元数です。

     

    そのほかいろいろありますが、ネットで調べてください。

     

     

    関数形(ボタンなどイベントで自動的にできるものなど)
     

    一般的なかたち(プロトタイプ):

    RETURNで返す型 関数名(引数){実行文、return 値}

     

    例:

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

    RETURNで返す型 System::Void

    関数名 button1_Click

    (引数)(System::Object^  sender, System::EventArgs^  e)

     

    returnで返す必要がないときや引数がないときは、void

    returnする値がないときはreturnのみで文の最後であれば省略可(逆に途中であれば必ず付けてください)

     

    下の実行文は、ほとんどこの形で作られています。

     

    よく使う実行文の例(これまで使ってきたもの)

     

    フォームの部品関係

    ラベルに表示するには、label -> Text = L"文字列";

    テキストボックスを読み取りは、string^ a = textBox -> Text;

    テキストボックスにフォーカスを移す。textBox->Focus();

    リストボックスにアイテムを追加する。listBox->Items->Add(文字列);

    リストボックスのアイテム数を取得する。listBox->Items->Count;

    リストボックスの項目を削除する。listBox->Items->Remove(項目番号);

    リストボックス(現在選択している)の項目番号は、listBox->SelectedItem

    リストボックスの項目の移動は、listBox->SelectedIndex = 項目番号

    リストボックスの内容の呼び出しは、string^ a = listBox->Text;

    リストボックスの初期化は、listBox->Items->Clear();

    コンボボックスは、リストボックスと同じように使う、
    コンボボックスのテキストは、comboBox->Text

    ファイル保存のダイアログは、saveFileDialog

    保存ダイアログの表示は、saveFileDialog->ShowDialog();

    保存ダイアログから渡されたファイル名は、saveFileDialog->FileName;

    保存ダイアログの保存ボタンが押されたか: System::Windows::Forms::DialogResult::OK

    ファイル読込のダイアログは、openFileDialog

    Windows media Playerの再生ファイルのセットは、axWindowsMediaPlayer1->URL::set(ファイル名);
    Windows media Playerの再生は、axWindowsMediaPlayer1->Ctlcontrols->play();
    Windows media Playerの現在の時間は、文字列はaxWindowsMediaPlayer1->Ctlcontrols->currentPositionString;
    数値では、axWindowsMediaPlayer1->Ctlcontrols->currentPosition;

     

    入力関係

    押されたキーを得るのは、keys::キーボードのキー名

    押されているキーのキー番号は、(char)keys::キーボードのキー名

    ボタンが押されたことの初期化、e->handled = true;

     

    分岐関係

    数字や文字を比較する iF( 条件式 ) 命令文;または{実行文;実行文}

    (条件式は、== 等しい、!= 等しくない、>大きい、<小さい、>=大きいか等しい、<=小さいか等しい、&&かつ、||または、!でない)

    if文の条件を満たさないとき else 実行文;または{実行文;実行文}

     

    swith文(式){case 定数1;実行文; case 定数2;実行文;case…}は式と定数が等しければ実行

     

    for文とは、for(int i=0;i<c;i++){実行文}カッコの中の真ん中が成り立っている間は{}の命令を実行

    while文とは、while(条件式){実行文}条件式が成り立っているときは、{実行文}内を実行する 。

    (カウントなどをあらかじめ設定し、永久ループにならないように注意してください。)

     

    for each (変数 in 配列変数){実行文}配列変数から1行づつ変数に入れて{}内の処理をする。

    配列が終わったら処理を抜けます。

     

    比較関係

    double::TryParse(a,b)とは、 aが数字のdouble型なら真(ture)で、bに代入,違えば偽(false)を返す。

    (bool a = double::TryParse(a,b); aはtrueかfalseになる)

     

    表示関係

    メッセージボックスを表示は、messageBox::Show("文字","タイトル名",ボタンの形,その他)

    16進数の表示は、Convert::ToString(変数,16);例 MessageBox::Show(Convert::ToString(bspeed,16));

     

    ファイル関係

    文字配列をまるごと保存する。File::WriteAllLines(ファイル名,配列名)

    ファイルを開くダイアログは、openFileDialog->ShowDialog()

    開くで指定したファイル名は、openFileDialog->FileName

    文字配列に読み出しは、File::ReadAllLine(ファイル名)

    ファイルを書き込むときのエンコード: File::WriteAllText(ファイル名,変数,Encoding::GetEncoding("Shift_JIS等"));

    (ただし、ネームスペースに using namespace System::Textが必要 )

     

    テキストを保存する。File::WriteAllText(ファイル名,テキスト名);

    バイナリデータの保存は、File::ReadAllBytes(ファイル名);

    例array<Byte>^ content = File::ReadAllBytes(saveFileDialog1->FileName)

     

    バイナリデータの呼び出しは、File::WriteAllBytes(ファイル名,保存先);

     

    文字関係

    文字列を数値に変換は、double a = double::Parse(textBox->Text);

    数値を文字列に変換は、textBox = a.ToString();(数字の出力形式を整える、.ToString("#,#")など)

    文字列をつなぐには、string^ a="文字列"+"文字列";

    フルパスからファイル名を取り出す: Path::GetFileNameWithoutExtension(フルパス名)

    ファイル名からの拡張子の取り出しは、Path::GetExtension(ファイル名)

    文字を分けるときには、split('区切り文字');例mytext = aa->Split('¥t');は

    文字列(aa)をタブ(¥t)で区切って配列変数(mytext)に入れます。

     

    計算式

    カウントをとるには、i++とはi=i+1と同じでiを1づつ増やす。(逆に減らすならi--)

    累計をするには、a=a+変数、または、a+=変数(逆に減らすならa-=変数)

     

    実行関係

    キーボードを押すことでボタンをクリックしたことにする、button->Performclick();

    コマンドラインの実行: Process::Start(実行ファイル名)

    参考:テキストボックス2の中を実行するときの例

            ProcessStartInfo^ startInfo = gcnew ProcessStartInfo(textBox2->Text);
            Process::Start(startInfo);

     

    これまで、使ってきたものだけですので、ほかにも山ほどあります。

    説明が分かりにくいものは、随時直していきますので、ご容赦願います。

     

     

    ただいま編集中です。

     

     

     

    JUGEMテーマ:PC関連

    C++/CLI(Myform.cpp)説明編

    • 2017.01.19 Thursday
    • 10:19

    いまさらですが、メインプログラムのMyform.cppの簡単な説明を書いておきます。

    なにしろ、素人が説明していますので、正確ではありませんが、イメージとして知っておいてください。

     

     

    上のようにC++Windows Formを選んでOKボタンを押して実行すると

     

     

    自動的にMyForm.cppが出来ています。

    ダブルクリックをすれば、

     

     

    が表示されます。

     

    これが、メインプログラムとなります。

    以下が、簡単な説明です。

     

    #include "MyForm.h"

    は、Myform.hのプログラムが含まれるという意味です。

    (ここに、Myforn.hのプログラムが書いてあると思ってください。)

     

    using namespace System;
    using namespace System::Windows::Forms;


    はnamespace:Systemと名前の付けられた中の、Windowsと名前の付けられた中の

    formsと名前の付けられた中にある命令文を使います。という宣言です。

    (#includeはnamespaceの前に書いてください。名前がこんがらがってしまいます。)

     

    [STAThread]

    は、ここからプログラムを始めますという意味です。

     

    void Main(array<String^>^ args)

    は、Mainと名前がついているように、メインプログラムでここからプログラムが始まります。

    カッコ内の配列は、引数(args アーギュメント)で与える値です。

     

    Application::EnableVisualStyles();

    は、ほんとは、System::Windows::Forms::Application::EnableVisualStyles()ですが、

    using namespaceで宣言してますので短く書くことができます。

    フォームの外観を既定のものにするという意味です。

     

    Application::SetCompatibleTextRenderingDefault(false);

    は、フォームの中の文字列の描き方です。

     

    CppWinForm11::MyForm form;

    は、namespaceのCppWinForm11の中のMyFormはformですと宣言します。

    CppWinForm11は最初にプロジェクト名で付けた名前です。

     

    参考:myform.h

     

    Application::Run(%form);

    は、先ほど名付けたformを終了するまでループで実行します。

    頭の%は、どこのメモリにformがあるのかを探してくれて、それを実行します。

    ここは、ポインターを説明しなくてはならなのですが筆者ではうまく説明できません。

     

    また、CppWinForm11::MyForm form;をやめて、直接

    Application::Run(gcnew CppWinForm11::MyForm);

    としてもらっても動きます。

     

     

     

    JUGEMテーマ:PC関連

    C++(Visual Studio 2015)初心者入門~9~

    • 2016.04.01 Friday
    • 16:32
    JUGEMテーマ:PC関連


    これまでの説明で、プログラミングの基本的なことは行ってきました。

    よく使われる、IF文、FOR文、配列を使えばだいたいのプログラムを作ることができます。

    そこで、サンプルとして、ちょうど4月に入ったので、名簿ソフトを作ってみたいと思います。
    学生名簿や社員名簿になるように、いままでのものをベースにして作成します。

    基本的な機能しかありませんが、それだけにいろんなものに応用できると思いますし、

    また、自分で機能を追加するのも、面白いと思います。

    名簿ソフトの仕様書としては、
    入力:氏名、性別、生年月日、備考
    機能:追加、表示、修正、削除、ファイル保存、ファイル呼び込み
    出力:テキストファイル

    ですが、入力項目名は、生年月日や備考を電話番号やメールアドレス等にしてもらっても何の問題ありません。

    新規プロジェクトを選択して、名前を付けて立ち上げたのち、



    Header FilesのMyForm.hをクリックしてください。

    MyForm.h[デザイン]で下のように作成してください。



    氏名、性別、生年月日、備考の見出しは、labelのプロパティのTextで入力してください。

    氏名の表示部分(左側)はListBoxです。
    また、入力の欄には、textBoxを使っています。
    なお、性別の入力では、あわせてcomboboxを使います。
    comboboxのアイテム(Item)の男性、女性をプロパティのItemsで作っておいてください。(下記参考)





    コンボボックスも機能的にはリストボックスと同じように使います。

     

     

    前に説明したように、最初のmanespaceにusing namespace System::IO;を追加しておいてください。




    データを扱い易くするために、2次元配列を使います。
    array<String^,2>^meibo=gcnew array<String^,2>(100,5);
    は変数のmeboは100行5列のデータを作ります。ので100人分のデータを扱えます。

    array<String^>^meibof=gcnew array<String^>(500);
    のmeibofはファイル保存、呼び出し用の変数です。
    変数のcはリストボックスの位置などに使います。

    関数のskk()はテキストボックスの初期化用です。

    関数のmda()はテキストボックスの内容を配列に入れます。



    初期設定として、ファームを表示したときに、
    今日の日付、DateTime now = DateTime::Today;を入れてます。
    Datetimeとは、日付形式という意味です。変数のnowにDateTime::Todayをいれると
    今日の日付が、日付形式で入ります。

    追加ボタンを押したとき



    修正ボタンを押したとき



    削除ボタンを押したとき



    データ保存ボタンを押したとき



    データ呼出ボタンを押したとき



    リストボックスをクリックしたとき



    コンボボックスを選択したとき



    このように、それぞれのイベントに対してコードを書いていきます。


    いままでの、初心者入門の1から8まで読んでいただければ、理解できると思います。
    ただ、二次元配列になってますので、ちょっと複雑かもしれません。
    少しでも解かりやすいように、配列は1から使用しています。(meibo[1~99,0]は使っていないので、好きに使ってください)


    例)AKB48のメンバーを入力してみたところ




    今回のまとめです。

    二次元配列の宣言(文字)は、 array<String^,2>^変数名=gcnew array<String^,2>(配列数,配列数)
    の,2のところが、次元数です。

    日付時間の変数の形式は、DateTime
    今日の日付は、 DateTime::Today

    コンボボックスは、リストボックスと同じように使う、
    コンボボックスのテキストは、comboBox->Text



    ここまでできるようになれば、立派なプログラマーです。
    なので、いちおうこのシリーズは終了させていただきます。

    あとは、番外編をつくる予定です。

    追記:

    記事の最初の部分で説明不足がありましたので、追記しておきます。

     

    リストボックス1の氏名については、MyForm[デザイン]のlistBox1のプロパティでItemsにおいて氏名を設定しておいてください 。

     

     

     

     

    次の記事は(応用編その〜1〜)となります。

     

    一般的なWin32を使ったものは、(ゲーム編その〜1〜)となります。

     

     

    追記:

    C++/CLI初心者入門これまでのまとめ編

    を作りましたので、いままでの流れについて復習してみてください。

     

    C++(Visual Studio 2015)初心者入門~8~

    • 2016.03.24 Thursday
    • 08:05
    JUGEMテーマ:PC関連

    前回の続きです。

    また、言い訳ですが、ここで書いているファイルの入出力のコードは一般的な(学校で教えるような)方法ではありません
    一般的に、C++ではストリーミング(少しづつデータを出し入れする)方式です。
    他の方法は、別途調べてください。

    今度は、前回と同じように、openFileDialog1のプロパティを指定してください。


    一番下のプロパティ(R)から


    FileNameを、保存したファイル名(この場合test.txt)にあわせてください。


    前回と同じように、defautExtをtxtにFilterをテキストファイル(*.txt)|*.txtに変えてください。

    データ呼出ボタンをダブルクリックして、処理を書いてください。


    openFileDialog1->ShowDialog();は、読み込むファイルのダイアログを表示します。

    ここには、上のfileNameで指定したファイル名があらかじめ入ってます。

    次のif文は、前のsaveと同じように、openFileDialog1->FileNameに読み込むファイル名が入ってます。

    dd=File::ReadAllLine(openFileDialog1->FileName);は読み込むファイルを一度にddの配列に入れます。

    llistBox1->Items->Clear();はリストボックスを初期化します。

    while(dd[i] != "")はdd[i]が空白でない間リストボックスに項目を追加します。

    while文はwhileの()の中が成立しているとき{}の中を実行します。if文と似ていますが、繰り返す回数が決まっていないときに使います。ただし、間違えて使うと永久に抜け出せなくなります。

    実行して、データ呼出ボタンを押したところ



    ファイル名(N)に、すでに、名前が入ってます。

    開くボタンを押せば、リストボックスに表示されます。(ただし、データ保存していれば)

    ここまで来れば、このプログラムをひな型として、いろいろなプログラムを作ることができます。

    たとえば、
    参加者などの名簿、ソフトウェアを登録してクリックで実行(ランチャーソフト)、買い物リストなど備忘録
    好きな曲を登録して音楽再生や動画を登録して動画鑑賞など、あなたの創造力しだいです。


    今回のまとめです。

    ファイルを開くダイアログは、openFileDialog->ShowDialog()

    開くで指定したファイル名は、openFileDialog->FileName

    文字配列に読み出しは、File::ReadAllLine(ファイル名)

    リストボックスの初期化は、listBox->Items->Clear()

    while文とは(比較式)内が成り立っているときは、{実行文}内を実行する 。カウントはあらかじめ設定。




    次回は、実践的なさまざまな例を作ってみようと思います。

    次の記事(その9)につづく
     

    C++(Visual Studio 2015)初心者入門~7~

    • 2016.03.18 Friday
    • 08:40
    JUGEMテーマ:PC関連
     
    前回の続きです。

    すでに、その7になりました。

    ところが、残念ながら、まだほんの少ししか説明していません。それぼど、C++にはいろんなことができます。
    なんとか、実用的につかえる、基本的なことだけは、書いておきたいと思います。
    クラス(一定の目的をもったプログラムの集団)、メソッド(その機能または関数)にはそれぞれいろんな使い方があります。
    その都度こまかく説明を書くと、まったく前に進まなくなります。よって、
    申し訳ありませんが、疑問があったら、その都度インターネットで調べてください。
    ただし、やたら専門用語が多く、初心者には、説明の内容を理解するのが難しいかもしれません。

    今度は、入力したデータをファイルに保存してみます。

    まず、

    データ保存ボタンとデータ呼出ボタンを作ってください。

    それと、ツールボックスから

    OpenFileDialogとSaveFileDialogをダブルクリックしてください。
    すると、



    上のようになります。

    次にsaveFileDialog1のプロパティを次のように変えてください。
    (表示されない場合はsaveFileDialog1のところを右クリックして一番下にあります)



    fileNameを付ける。この場合test.txtですが、好きな名前で構いません。



    DefaultExtをtxtに、またfilterをテキストファイル(*.txt)|*.txtに

    これは、saveFileDialogを表示したときに初期値(デフォルト)として表示されます。

    次に、データ保存(button3)のボタンをダブルクリックしてください。



    saveFileDialog1->ShowDialog();はお馴染みのファイル入力のダイアログを表示します。

    if文のsaveFileDialog->FileNameにはダイアログで入力されたファイル名が入ってます。

    なので、ファイル名が空("")でなかった(!=)ら、{}の中を実行します。(逆に空なら何もしません)
    {}の中は前回説明した、合計を計算するパターンです。

    ただし、文字の形で保存する予定なのでdd[]でリストボックスの内容を文字のまま配列に入れています。
    なので、



    前回(その5)説明したように、
    最初にarray<String^>^dd = gcnew array<String^>(20)とddは配列ですと宣言しておいてください。
    (String^とは文字ですという意味です)

    この処理が終わったら、
    File::WriteAllLines(saveFileDialog->FileName,dd);を書いていきます。

    ところが、Fileと打ち込んだらエラーが表示されるはずです。

    これは、fileの WriteAllLines と言う命令はありませんということです。

    なので、プログラムの最初に


    namespaceという場所があります。
    そこに、using namespace System::IO;と追加してください。

    この System::IO (というクラス)に File::WriteAllLines の命令(というメソッド)入ってます。

    これで、エラーが消えるはずです。

    WriteAllLines(ファイル名,文字配列) とは文字配列をそのままファイルに書き込んでくれます。

    下は実行して、データ入力し、データ保存ボタンを押したところ


    すでに、ファイル名とファイルの種類に前にプロパティで指定したものが入ってます。

    名前を付けて保存のダイアログのOKボタンを押せば、ファイル名(この場合text.txtの)のテキストファイルができます。すでに、ファイルがある場合は、上書き保存します。

    よって、大切なファイルには上書きしないように注意してください。

    まだ、データ呼出ボタンは作成されていませんので、クリックしないでください。エラーが出ます。

    次回は、データを読込ます。


    今回のまとめです。

    ファイル保存のダイアログは、saveFileDialog

    ファイル読込のダイアログは、openFileDialog

    保存ダイアログの表示は、saveFileDialog->ShowDialog()

    保存ダイアログから渡されたファイル名は、saveFileDialog->FileName

    文字の配列の宣言は、 array<String^>^変数名 = gcnew array<String^>(配列数)

    文字配列をまるごと保存する。File::WriteAllLines(ファイル名,配列名)



    次の記事(その8)につづく
     

    PR

    calendar

    S M T W T F S
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    << March 2024 >>

    yahoo・その他

    買い物

    ビックカメラ.com

    selected entries

    categories

    archives

    recent comment

    links

    profile

    search this site.

    others

    mobile

    qrcode

    powered

    無料ブログ作成サービス JUGEM