- - PR -
C# フォームを突き抜けてフォームの後ろ側をクリックできるようにしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-07-16 19:08
C#でウィンドウズアプリケーションを作っています。
@デスクトップに常駐し、指定時間になると最前面にウィンドウを表示させる。 Aこのウィンドウは半透明でスプラッシュウィンドウのよう感じである。 Bただし、このウィンドウはクリックできず、ユーザーはこのウィンドウを突き抜けて作業中のウィンドウをクリックできる。 Bはどのようにすれば実現できるのでしょうか? どこかのページへのリンクや、GOOGLEでの検索ワードでもかまいませんので、アドバイスをよろしくお願いします。 (私のプログラミングスキルはかなり低いので、簡単にはできないのようなら諦めますので、その旨指摘いただければ助かります) Bの補足 Bの文章で何が言いたいか判らないと困るので他の表現で書きます。 例えば TopMost = true; //最前面に Opacity = 0.3; //30%の透明 FormBorderStyle = FormBorderStyle.None; //ボーダースタイル WindowState = FormWindowState.Maximized; //最大化 timer1.Start; //タイマ(例えば3秒) としたら、ユーザーは3秒間作業を中断せざるをえないと思います。 ですが、ユーザーに作業を中断させないように、透けて見える自分の作業領域を普通にクリックできるようにさせたいのです。 つまり、ユーザーには手前に出てきたこのウィンドウは見えるけど、ないもの同然として処理させたいのです。 | ||||
|
投稿日時: 2006-07-17 01:08
難しいと思います。
スプラッシュウィンドウの目的としては、ユーザーがソフトウェアを実行した時に、とりあえず画面を表示させて、その間に、初期処理を済ませてしまおうということと、起動前にユーザーに何らかの情報(注意事項やソフトウェアの名前や著作者)を与えるということがあるのだと思います。 しかし半透明にするということを考えると、後者の目的では無いのでしょう。 であれば、スプラッシュウィンドウを常に最前面にせず、切り替えられるようにするとか、マウスが乗ったら表示を消すとか、クリックしたら最背面にするなどの方が簡単に実現できそうです。 | ||||
|
投稿日時: 2006-07-17 01:29
いっそのこと壁紙にしてしまうとか・・・
| ||||
|
投稿日時: 2006-07-17 08:24
GetDC(0)でデスクトップのデバイスコンテキストを取得して,デスクトップにフォームを直接描画したらどうでしょう。こうすれば「フォームらしきもの」が表示されるだけで実際にはフォームはないので,マウスクリック等はフォームの表示を突き抜けます。時間が経過したらデスクトップを再描画すれば「フォームらしきもの」は消えます。
| ||||
|
投稿日時: 2006-07-17 10:28
先ほどのデスクトップへの描画ですが,面白そうなので試しに作ってみました。
VB2005ですが,参考になれば幸いです。 問題点はウィンドウの再描画のタイミングで消えてしまうことがあることです。 ウィンドウ切り替え等のタイミングとぶつかってしまうと表示されないこともあります。 解決法としては,デスクトップをキャプチャしてフォームの画像とブレンドし,タイマーで0.1秒間隔くらいで再表示し続ける等が考えられます。
| ||||
|
投稿日時: 2006-07-17 12:00
Windows3.1の頃ですが、似たような事はやりましたよ。手前側のウィンドウでWM_LBUTTONDOWNを受けて、その後背面に隠れているウィンドウに対してWM_LBUTTON_DOWNをSendMessageすればよいのですよ。そうすれば操作的には透過するウィンドウになります。ウィンドウを列挙しつつ自分の背面にあるウィンドウを特定したりと、結構面倒な処理だったと記憶します。 | ||||
|
投稿日時: 2006-07-17 15:19
いくつか回答いただけましたので、まずはお礼を。
ありがとうございました!! 簡単にできるのかと思っていたのですが、APIなどを駆使しなければいけないようで、私には敷居が高いようです。 せっかく、YASさんにご教授いただいたので、その内容をそのままC#に書き直したところ、YASさんの思惑通りに動きそうです。 ただ、今後の課題としてYASさんが上げられている >デスクトップをキャプチャしてフォームの画像とブレンドし というのだけでも私には敷居が高く、難しそうです。 >面白そうなので試しに作ってみました。 と言えるYASさんすごすぎです。 せっかく書き換えたので一応C#のソースも貼っておきます。
|
1