- ベストアンサー
VC++.netのボタンを透明にしたいのですが
VC++.netのボタンを透明にしたいのですが MFCだと出来るみたいなのですが VC++.net2008のExpressEditionで製作している為MFCが使えません フォームに任意のイラストを貼り付け イラストのある部分をクリックするとイベントが始まる というプログラムを作りたいのですが イベントを発生させるのに、ボタンを使用している為 ボタン形状が四角というのがよろしくありません 透明で使用できれは、任意の場所に配置でき イラストの景観がよくなります 何かヒントでも良いので よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足の内容だと、PictureBoxではなくFormにBackgroundImageを設定しているのかな? MouseClickイベントの設定はできているとのことなので、簡単な例をピックアップして挙げます。 using namespace System; using namespace System::Collections::Generic; using namespace System::Windows::Forms; using namespace System::Drawing; public ref class Form1 : public System::Windows::Forms::Form { private: List<Rectangle>^ m_lstRect; public: Form1(void) { InitializeComponent(); m_lstRect = gcnew List<Rectangle>(); m_lstRect->Add(Rectangle(10, 10, 10, 10)); // 1つ目の領域 m_lstRect->Add(Rectangle(30, 30, 10, 10)); // 2つ目の領域 m_lstRect->Add(Rectangle(60, 10, 100, 20)); // 3つ目の領域 } private: System::Void Form1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { int nIdx = 0; while(nIdx < m_lstRect->Count) { Rectangle rectClick = m_lstRect[nIdx]; if(rectClick.Contains(e->Location)) { break; } nIdx++; } if(nIdx == 0) { // 1つ目の領域クリック時処理 } else if(nIdx == 1) { // 2つ目の領域クリック時処理 } else if(nIdx == 2) { // 3つ目の領域クリック時処理 } } }; これでやりたいことができるでしょうか? 一応動くはずですが、処理の呼び出し部分があまり効率的には無いので、その辺は改良してみてください。
その他の回答 (1)
- reset_cat
- ベストアンサー率68% (94/138)
ヒントになるかどうかはわかりませんが・・・ VC++.netということは、net Frameworkを利用するマネージドコードで記述しているのでしょうか?以下その想定で回答してみます。 イラストを貼り付けるということはPictureBoxコントロールを使っているのかな? それなら、PictureBoxコントロールのMouseClickイベントを登録し、そのイベントの引数MouseEventArgsのメンバを調べればどの位置でクリックしたかがわかります。その位置が指定の範囲に入っていたら処理を行う。 ・・・という方法でどうでしょう?
補足
回答ありがとうございます。 さそっく試してみようと思ったのですが、 MouseClickイベントを登録 は、出来ました 位置が指定の範囲に入っていたら処理を行う。 が、具体的にどう記述したら良いのかわかりませんでした if文でForm1-> 初心者で大変申し訳ないのですが、 御指導おねがいできないでしょうか? よろしくお願いします。
お礼
回答ありがとうございます。 大変丁寧に答えていただいて、たすかりました。 クリックする領域のパラメータが4つなのは、右上の座標と領域の大きさ?ですよね まだ試していませんが、がんばってみます。 こんなに長い文を書いていただいて 本当にありがとうございました。