画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

05 | 2017/06 | 07
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】ToolStripにチェックボックスなどのコントロールを追加する

メインページC++/CLI プログラミング

ToolStripには標準的にはボタンやラベル、テキストボックスなどが追加できますが、その他のコントロール(例えばCheckBoxなど)を追加すれば良いのか?調べてみたところ、情報源としては

http://dobon.net/vb/dotnet/control/tstoolstripcontrolhost.html
http://msdn.microsoft.com/ja-jp/library/9k5etstz.aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.toolstripcontrolhost.aspx

などがあるのですが、C++/CLIではデザイナ(Formのエディタ)でエラーになったり、デザイナ上で追加したはずのコントロールが表示されなかったりするので、いろいろ試してみたところ、何とかこんな感じ↓でできました。

ToolStripに任意コントロールを追加する

情報源のページではToolStripControlHostを使うとあるのですが、これをFormのファイルに記述するとデザイナがエラーとなってしまいます。
そのため、この部分は別ファイルに記述します。

以下、ToolStripにCheckBoxを追加する例として説明します。

ヘッダファイル(ToolStripCheckBox.h)の作成 (ヘッダファイル名は何でも大丈夫です。)
#pragma once

using namespace System::Windows::Forms;

public ref class ToolStripCheckBox :
public ToolStripControlHost
{
public:
    ToolStripCheckBox(void) : ToolStripControlHost(gcnew CheckBox){}

    //チェックボックスコントロールの公開
    property CheckBox^ CheckBoxControl
    {
        CheckBox^ get(){
            return static_cast<CheckBox^>(Control);
        }
    }
};

上記で作成したヘッダファイルをプロジェクトに追加して、フォームのヘッダファイル(Form1.hなど)へは以下のように記述します。(背景色が水色の部分の4箇所を追記しています。)

#pragma once

#include "ToolStripCheckBox.h"

namespace ToolStripAdd {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Form1 の概要
    ///
    /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
    ///          マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
    ///          変更する必要があります。この変更を行わないと、
    ///          デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
    ///          正しく相互に利用できなくなります。
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: ここにコンストラクタ コードを追加します
            //
        }

    protected:
        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::ToolStrip^  toolStrip1;
    protected:
    private: System::Windows::Forms::ToolStripButton^  toolStripButton1;
    private: ToolStripCheckBox^  toolStripCheckBox1;

    private:
        /// <summary>
        /// 必要なデザイナ変数です。
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        void InitializeComponent(void)
        {
            System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
            this->toolStrip1 = (gcnew System::Windows::Forms::ToolStrip());
            this->toolStripButton1 = (gcnew System::Windows::Forms::ToolStripButton());
            this->toolStripCheckBox1 = (gcnew ToolStripCheckBox());
            this->toolStrip1->SuspendLayout();
            this->SuspendLayout();
            //
            // toolStrip1
            //
            this->toolStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->toolStripButton1,
                this->toolStripCheckBox1});
            this->toolStrip1->Location = System::Drawing::Point(0, 0);
            this->toolStrip1->Name = L"toolStrip1";
            this->toolStrip1->Size = System::Drawing::Size(168, 25);
            this->toolStrip1->TabIndex = 0;
            this->toolStrip1->Text = L"toolStrip1";
            //
            // toolStripButton1
            //
            this->toolStripButton1->DisplayStyle = System::Windows::Forms::ToolStripItemDisplayStyle::Image;
            this->toolStripButton1->Image = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"toolStripButton1.Image")));
            this->toolStripButton1->ImageTransparentColor = System::Drawing::Color::Magenta;
            this->toolStripButton1->Name = L"toolStripButton1";
            this->toolStripButton1->Size = System::Drawing::Size(23, 22);
            this->toolStripButton1->Text = L"toolStripButton1";
            //
            // toolStripCheckBox1
            //
            this->toolStripCheckBox1->Name = L"toolStripCheckBox1";
            this->toolStripCheckBox1->Size = System::Drawing::Size(15, 22);
            //
            // Form1
            //
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(168, 130);
            this->Controls->Add(this->toolStrip1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->toolStrip1->ResumeLayout(false);
            this->toolStrip1->PerformLayout();
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion
    };
}

これで、追加ができました...

InitializeComponentメソッドの中をいじくるのはあまりしたくは無いのですが、色々試した感じでは、この位置で記述しないとエラーになるようです。


Loading...
スポンサーリンク

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/240-97ea29a2
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計