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

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

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

Re[2]: ウインドウの外に表示するには?


(過去ログ 123 を表示中)

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

■73594 / inTopicNo.1)  ウインドウの外に表示するには?
  
□投稿者/ 楓 (1回)-(2014/10/15(Wed) 05:09:03)

分類:[C#] 

ウインドウの外に任意の文字を表示する事は可能でしょうか?

文字を表示しつつも他の作業の邪魔はしたくないので、透明のウインドウを画面手前に表示するといった手法ではない方法、もしくは透明のウインドウで表示しつつも他の作業に影響を与えない表示方法を知りたいです。

どうぞよろしくお願いします。

引用返信 編集キー/
■73595 / inTopicNo.2)  Re[1]: ウインドウの外に表示するには?
□投稿者/ 甕星 (33回)-(2014/10/15(Wed) 05:36:17)
GetDesktopWindow APIでデスクトップのウィンドウハンドルを取得し、GetDCでデスクトップのデバイスコンテキストを取得すれば、ウィンドウの範囲外の場所にも描画することは出来ます。ですがウィンドウの範囲外の場所はそれぞれのアプリケーションが描画処理を行っているので、描画処理がコンフリクトしてしまい思ったように描画するのは難しいです。
引用返信 編集キー/
■73596 / inTopicNo.3)  Re[1]: ウインドウの外に表示するには?
□投稿者/ 魔界の仮面弁士 (147回)-(2014/10/15(Wed) 09:39:12)
No73594 (楓 さん) に返信
> ウインドウの外に任意の文字を表示する事は可能でしょうか?
甕星さんが書かれているように、GDI (≠GDI+) の API で描画することは可能です。DrawText とか。


> 透明のウインドウで表示しつつも他の作業に影響を与えない表示方法を知りたいです。
透過ウィンドウとしては、「文字の形に Region をくりぬく」方法と、
「Layered Window を用いる」方法がありますね。両者の併用でも良いですけど。


Layered Window は TransparencyKey プロパティだと不具合があるので(KB822495)、
UpdateLayeredWindow API でレンダリングした方が良いでしょう。


他の作業に影響、という点ですが、たとえばクリック操作が、上に重ねた透明ウィンドウに
奪われることを懸念されているのだとしたら、Layered Window に対して
WS_EX_TRANSPARENT 拡張ウィンドウ スタイルを適用してやれば、マウス イベントが
透明ウィンドウで処理されること無く、下にあるウィンドウにそのまま伝わるようになります。


http://www.moonmile.net/blog/archives/5092
http://amonution.sblo.jp/article/44207805.html
引用返信 編集キー/
■73607 / inTopicNo.4)  Re[2]: ウインドウの外に表示するには?
□投稿者/ 楓 (2回)-(2014/10/16(Thu) 05:53:11)
2014/10/16(Thu) 05:53:31 編集(投稿者)

甕星さん
魔界の仮面弁士さん

なるほどー
大変参考になりました。
まだ今の自分にはちょっと難しそうなので、もう少しレベルアップしてから挑戦しようと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -