FC2ブログ

 

Welcome to 考えるエンジニア!!

Visual C++ 2015でWindowsフォームアプリを作る(1)

 OpenCVで画像処理を行うのに、C#でOpenCvSharpをよく用いています。仕事でC#を使うことが多かったのと、画像処理の条件出し(フロー検討やその各画像処理の閾値設定)を行う上でGUIがあると非常に便利で分かりやすかったからです。ただ、OpenCVは今でもC++で書いて、CUI環境で実行することが多いように思います(主観?)。ネット上の参考記事もC/C++関連が圧倒的に多いですね。

画像処理フローがすでに分かっている場合ならCUIアプリで良いと思いますが、条件出しをコード上でパラメータを微調整しながら行うのは非常に大変ですね。OpenCvSharpを用いてC#でコードを書くのも手ですが、やはりネット上で情報の多いC++で攻めて行くのが良いのではないかと最近痛感しています。C++で書いておけば、仮にOSがLinuxになろうが、OSXになろうが、コードをそのまま転用ができますからね。
とはいえ、C++に手を出すのは、今でも抵抗があるので、これから難儀しそうです。

いつもの長~い前置きはこれぐらいにして、Visual C++ 2015で簡単なWindowsフォームアプリの味見に、いざ出発です。Visual Studioを起動させ、C++で「ファイル-新規作成-プロジェクト」を選択し、新しいプロジェクトの中から「Windowsフォームアプリケーション」を探したのですが、あれっ、見当たらない・・。念のため、C#のほうで確認すると、当然ですがありました。C#テンプレート160430
昔々、C++でフォームアプリを作りかけていたことがあったので、とうとうMicrosoftはC++ではフォームアプリをサポートしなくなったのかなと、勝手に思いつつ、ネットで情報を探していると、このサイトに、Visual C++ 2012を例にフォームアプリ作成手順が書かれてありました。早速参考にさせていただきました。以下、Visual C++ 2015版の備忘録です。

1. 「ファイル-新規作成-プロジェクト」を選択し、新しいプロジェクトのVisual C++のCLRから「空のCLRプロジェクト」を選択します(プロジェクト名はデフォルトのProject1を使います)。CLRは共通言語ランタイム(Common Language Runtime)で.NETアプリを実行するためのエンジンのことですね。c_form1_160430.pngOKを押した後のこの時点の状態をソリューションエクスプローラで確認すると、以下の通りです。ファイルが何も入っていない状態です。c_form2_160430.png

2.「プロジェクト-新しい項目の追加」を選択し、Visial C++のUIから「Windowsフォーム」を選択します(フォーム名はデフォルトのMyForm.hを使います)。c_form3_160430.pngここでやっとフォームが出てくるのですね。追加ボタンを押すと、参考サイトに記載の通り、以下のエラーがでましたが、無視して進みます。c_form4_160430.pngこの時点の状態をソリューションエクスプローラで確認すると、以下の通りです。c_form5_160430.pngソースファイル(MyForm.cpp)、ヘッダファイル(MyForm.h)の他に黄色枠に示した.NET Framework関連の情報が組み込まれました。実際にボタン等を貼り付けるのは、ヘッダファイル(MyForm.h)の方です。ヘッダファイルにGUIを実装するのは何となく違和感を感じますが、気にせずに進みます。この状態で実行させてみると、「エントリポイントを定義しなくてはなりません」と怒られてしまいました。main関数がないようです。

3.MyForm.cppにコードを追加
MyForm.cppの中身を確認すると、1行目の記述しかなかったので、以後のコードを追記しました。

#include "MyForm.h"

using namespace Project1;

[STAThreadAttribute]
int main() {
MyForm ^fm = gcnew MyForm();
fm->ShowDialog();
return 0;
}

実行すると、エラーはなくなり、フォームが表示されました。が、背景に不要な黒いWindow(コンソールウィンドウ)が表示されていました。c_form6_160430.png
4.コンソールウィンドウを消す
「プロジェクト-Project1のプロパティ」を選択し、「構成プロパティ - リンカー - システム」のサブシステムを「Windows(/SUBSYSTEM:WINDOWS)」に設定します。c_form7_160430.pngこの状態で実行するとエラーが出てしまうので、、「構成プロパティ - リンカー - 詳細設定」のエントリポイントに 3.で追加したmainを記入します。c_form8_160430.pngここで実行すると、下図の通り、コンソールウィンドウも消え、無事にフォームのみが表示できました。c_form9_160430.pngここまで来れば、あとは、ボタン等をフォームに貼り付けて、個々のコーディング作業ができますね。c_form10_160430.pngボタンを押して、簡単な文字表示もできました。C#と同じようにコーディングができそうです。以上の一連の手順ですが、面倒な作業ですね。この備忘録をまとめている最中に、「オンラインでC++用のフォームテンプレート」があることを知りました。次回はそのことについて書きたいと思います。
スポンサーサイト

コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: