IEやOperaのような、背景が透明で、絵が上におけて、盛り上がったりもするボタンが作りたいんですけど、
リージョンを透過したり、いろいろやってみたんですけど、
どうもうまくいきません。
クリックとマウスが乗ったのとはずれたのが分かればいいので、透過したリージョンの上に何か描ければ、
どうにかできそうなんですけど…。
今のわたしの知ってることでは、このあたりで詰まってしまいます。
どなたかいい方法を教えてください。おねがいします。
ども、ちえさん。名前間違えてしまってすいません。
あなたが求めてるものと違うかもしれませんが
ちょっとしたイカサマを思いついたので書いて置きます。
まず背景をフォームと同じ色で塗り潰した絵を3種類用意します。
(通常時、マウス通過時、マウス通過&マウスダウン時)
ここまで読んでもう分かったかもしれませんが
フォームロード時に通常の絵を表示させ、
マウス通過時に別の絵に切り替え、
マウスダウンでまた別の絵に切り替え、
実際の処理はクリックに記述します。
扱うコントロールですがピクチャーボックスか
イメージコントロールが適切かと思います。
(ピクチャーの時はBorderStyleを0で)
ただ、ジャバスクリプトみたいにマウスオーバーが
ないのでマウスムーブでif文を使ってXとYを判定することに
なりそうです。
・・・と勝手に書かせてもらいましたが
これじゃ駄目ですか。
いいほうほうですねぇ、思いつきませんでした^^;
…でも、けっこう大変そうですね^^;
背景が何色になるかどんな画像になるかわからないところにおくつもりなので、
大変そうです^^;
なれた人には難しくなさそうですけど、
今までわたし、GDI関係にはまったく触ったことなかったし…。
でも、それが一番みたいですね、がんばってみます。
> ただ、ジャバスクリプトみたいにマウスオーバーが
> ないのでマウスムーブでif文を使ってXとYを判定することに
なりそうです。
ちなみにこれ、ユーザーコントロールとタイマーコントロールを併用して、
WindowFromPointとかのAPIをつかえば、
onMouseOver,Out,Onなどなど簡単に起こすことができます。
とりあえず解決にはしません。GDIについて、なんとかいったらします^^;
(bitbltでなんとかなりそうな気もしますけど、それすらも触ったことがないんです^^;)
画像マスク合成には
ふつうはアルファチャネルつかいます。
そうですかぁ、そうみたいですねぇ…。
別にそれほど大きな画像じゃあないので、別にばれなければなんて…。
いろいろ調べまわった結果、透過の原理などまでは分かったんですけど、
stdPicture型のオブジェクトから描画する方法が分からないんです。
(なぜか、解説がほとんど見つからなくて…)
stdPicture型からの読みこみに関する解説ページなどはないでしょうか?
それさえわかれば、何とかできそうな気がするんですけど…。
以下のAPIを調べれば参考になるかもしれません。
CreateDIBSection DIBSectionを作成
(hBmpとそのバイナリデータへのポインタが参照できる奴)
OleCreatePictureIndirect Pictureオブジェクトの作成
(ハンドルからPictureオブジェクトが作成できる)
いろいろ大変そうですけど、できないわけではないようですね、
ありがとうございました。
がんばります。
ツイート | ![]() |