C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: PictureBoxの透過処理


(過去ログ 54 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■30102 / inTopicNo.1)  PictureBoxの透過処理
  
□投稿者/ Kei (5回)-(2008/12/18(Thu) 11:43:35)

分類:[C/C++] 

宜しくお願いします。
開発環境はWinXPで言語はVC++2003です。
(ただし作成したアプリの動作環境はVistaも含みます)

フォーム上に画像ボタンを配置したいと考えています。
丸いボタンなので透過処理が必要になりました。
PictureBoxを使えばいいとは思うのですが、プロパティ等で簡単には指定できない事まではわかりました。
透過処理をネットで調べても調べ方が悪いのか全然情報が出てきません。
どなたか初心者でもわかりやすいサイトなどご存知でしたらご教授ください。
引用返信 編集キー/
■30103 / inTopicNo.2)  Re[1]: PictureBoxの透過処理
□投稿者/ .SHO (444回)-(2008/12/18(Thu) 11:50:11)
No30102 (Kei さん) に返信

> 透過処理をネットで調べても調べ方が悪いのか全然情報が出てきません。

SetWindowRgn です。

引用返信 編集キー/
■30119 / inTopicNo.3)  Re[2]: PictureBoxの透過処理
□投稿者/ Kei (6回)-(2008/12/18(Thu) 13:22:42)
No30103 (.SHO さん) に返信

お返事有難うございます。
ちょっとsetwindowrgnで調べてやってみたいと思います。

ちなみに画像化された文字の透過もこれでできるのでしょうか?
手書きの文字をラベルとして使うイメージなのですが。
フォームには背景画像がある為、そのまま画像を表示させると文字の後ろは白くなってしまいます。
引用返信 編集キー/
■30120 / inTopicNo.4)  Re[3]: PictureBoxの透過処理
□投稿者/ .SHO (450回)-(2008/12/18(Thu) 13:30:39)
No30119 (Kei さん) に返信

> ちなみに画像化された文字の透過もこれでできるのでしょうか?
> 手書きの文字をラベルとして使うイメージなのですが。
> フォームには背景画像がある為、そのまま画像を表示させると文字の後ろは白くなってしまいます。

できます。

SetWindowRgn は、引数でウィンドウハンドルを取るので
ウィンドウハンドルさえ渡せれば何でもできます。

画像もそのままではどうしようもないので、スタティックウィンドウなどに
描画すると思いますが、そのスタティックウィンドウのウィンドウハンドル
を渡してやれば、丸でも☆型でも、好きな形に透過できます。
引用返信 編集キー/
■30123 / inTopicNo.5)  Re[4]: PictureBoxの透過処理
□投稿者/ Kei (7回)-(2008/12/18(Thu) 13:46:41)
No30120 (.SHO さん) に返信

スタティックウィンドウとかちょっと私には敷居が高い言葉のようですが…
いま教えていただいたsetwindowrgnについて調べているのですが、
下記のコードで「'System::IntPtr'から'HWND'に変換できません」というエラーが出てしまいます。

HRGN rgn;

HWND wnd;

wnd = Button1->Handle;

rgn = CreateEllipticRgn(5,5,50,50);

SetWindowRng(wnd,rgn,true);

エラーの意味がわかりません。
もしよろしければ原因を教えていただけませんでしょうか?
引用返信 編集キー/
■30127 / inTopicNo.6)  Re[5]: PictureBoxの透過処理
□投稿者/ .SHO (454回)-(2008/12/18(Thu) 13:58:14)
No30123 (Kei さん) に返信

> いま教えていただいたsetwindowrgnについて調べているのですが、
> 下記のコードで「'System::IntPtr'から'HWND'に変換できません」というエラーが出てしまいます。

キャストすればいいんじゃないかな?
それで動きません?
引用返信 編集キー/
■30128 / inTopicNo.7)  Re[6]: PictureBoxの透過処理
□投稿者/ Kei (8回)-(2008/12/18(Thu) 14:00:41)
No30127 (.SHO さん) に返信

キャストというと
wnd = (HWND)button1->Handle;

という事ですよね?
やはり同じエラーがでてしまいます…

それともキャストの記述が間違っているのでしょうか?
引用返信 編集キー/
■30129 / inTopicNo.8)  Re[7]: PictureBoxの透過処理
□投稿者/ .SHO (455回)-(2008/12/18(Thu) 14:06:10)
No30128 (Kei さん) に返信

> キャストというと
> wnd = (HWND)button1->Handle;
>
> という事ですよね?
> やはり同じエラーがでてしまいます…
>
> それともキャストの記述が間違っているのでしょうか?

そうですか。。
C++、得意じゃないんですよねぇ^^;

wnd = (HWND)(button1->Handle);

ってことはないですかね?
引用返信 編集キー/
■30130 / inTopicNo.9)  Re[7]: PictureBoxの透過処理
□投稿者/ aetos (49回)-(2008/12/18(Thu) 14:08:28)
No30128 (Kei さん) に返信
> ■No30127 (.SHO さん) に返信
>
> キャストというと
> wnd = (HWND)button1->Handle;
>
> という事ですよね?
> やはり同じエラーがでてしまいます…
>
> それともキャストの記述が間違っているのでしょうか?

検証せずにカンで書いてます。
wnd = reinterpret_cast< HWND >( button1->Handle.ToPointer() );
引用返信 編集キー/
■30134 / inTopicNo.10)  Re[8]: PictureBoxの透過処理
□投稿者/ .SHO (457回)-(2008/12/18(Thu) 14:32:44)
No30130 (aetos さん) に返信

> 検証せずにカンで書いてます。
> wnd = reinterpret_cast< HWND >( button1->Handle.ToPointer() );

軽く勉強してみて、自分もこれでいけると思います。

引用返信 編集キー/
■30135 / inTopicNo.11)  Re[8]: PictureBoxの透過処理
□投稿者/ Kei (9回)-(2008/12/18(Thu) 14:36:56)
No30130 (aetos さん) に返信

お返事有難うございます。
おかげさまで上手く動きました。有難うございました。(カンで思いつくとかスゴイですね(笑))
SHO.さんも有難うございました。

ボタンが上手くいったのでさっそく画像でも試そうと思ったのですが、
なぜかpictureboxを置いただけで下記のようなエラーが…
新規でフォームを用意し、pictureboxを置き、pictureboxに背景画像を指定してビルドしただけで…
一歩進むたびにつまずいてます…
もしわかるようでしたら教えてもらえますでしょうか?

「エラーC2039 'GetObjectA':'System::Resources::ResourceManager'のメンバではありません。」

引用返信 編集キー/
■30136 / inTopicNo.12)  Re[9]: PictureBoxの透過処理
□投稿者/ Kei (10回)-(2008/12/18(Thu) 14:40:52)
調べてみたらこんなのが。

http://support.microsoft.com/kb/888267/ja

これってバグって事なんですかね?
引用返信 編集キー/
■30137 / inTopicNo.13)  Re[9]: PictureBoxの透過処理
□投稿者/ .SHO (458回)-(2008/12/18(Thu) 14:41:45)
No30135 (Kei さん) に返信

> もしわかるようでしたら教えてもらえますでしょうか?
> 「エラーC2039 'GetObjectA':'System::Resources::ResourceManager'のメンバではありません。」

とりあえず、これは解決済みにして別スレッド立てた方がいいと思います。
引用返信 編集キー/
■30139 / inTopicNo.14)  Re[10]: PictureBoxの透過処理
□投稿者/ .SHO (459回)-(2008/12/18(Thu) 14:43:14)
No30136 (Kei さん) に返信

> 調べてみたらこんなのが。
>
> http://support.microsoft.com/kb/888267/ja
>
> これってバグって事なんですかね?

別スレッド立てる前に、これをもう少ししっかり勉強しましょう。
引用返信 編集キー/
■30140 / inTopicNo.15)  Re[10]: PictureBoxの透過処理
□投稿者/ Kei (11回)-(2008/12/18(Thu) 14:44:12)
No30137 (.SHO さん) に返信

わかりました。
では別で立てさせていただきます。
(そもそもこのスレッドも件名と微妙に違ってしまいましたが(笑))

有難うございました。
解決済み
引用返信 編集キー/
■30156 / inTopicNo.16)  Re[5]: PictureBoxの透過処理
□投稿者/ 渋木宏明(ひどり) (989回)-(2008/12/18(Thu) 16:19:38)
渋木宏明(ひどり) さんの Web サイト
> wnd = Button1->Handle;

これ、C++/CLI で書いてますよね?

どうして Control.Region プロパティを使わないで、わざわざ Windows API を呼ぶんだろう?

引用返信 編集キー/
■30157 / inTopicNo.17)  Re[6]: PictureBoxの透過処理
□投稿者/ .SHO (466回)-(2008/12/18(Thu) 16:24:07)
No30156 (渋木宏明(ひどり) さん) に返信

> どうして Control.Region プロパティを使わないで、わざわざ Windows API を呼ぶんだろう?

それは、自分が Control.Region プロパティを知らなくてAPIを紹介したからです。

すいません。
プロパティで出来るなら、そっちの方がいいです。

# たぶん、カクカク問題は変わらないと思うけど。。。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -