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

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

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

Re[4]: ドラッグ中にウィンドウの内容を表示する


(過去ログ 18 を表示中)

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

■7235 / inTopicNo.1)  ドラッグ中にウィンドウの内容を表示する
  
□投稿者/ Apiece (1回)-(2007/09/02(Sun) 03:58:46)

分類:[C#] 

2007/09/02(Sun) 04:00:12 編集(投稿者)

初めて質問させて頂きます。
C#初心者です。
よろしくお願いします。

フォームを、

(XPで)画面のプロパティ→デザイン→効果→ドラッグ中にウィンドウの内容を表示する

の、チェックをオンにしたときと同じ表示動作を、上記設定の有無に関わらずさせたいのですが、
どうすれば良いでしょうか?

「っぽく見える」という方法でも構いません。
どなたかご教授いただけませんでしょうか。
引用返信 編集キー/
■7236 / inTopicNo.2)  Re[1]: ドラッグ中にウィンドウの内容を表示する
□投稿者/ れい (99回)-(2007/09/02(Sun) 05:10:57)
2007/09/02(Sun) 05:24:07 編集(投稿者)

ありゃ。
間違って投稿してしまいました。
失礼。
引用返信 編集キー/
■7237 / inTopicNo.3)  Re[1]: ドラッグ中にウィンドウの内容を表示する
□投稿者/ れい (100回)-(2007/09/02(Sun) 05:32:10)
2007/09/02(Sun) 05:45:50 編集(投稿者)

間違い投稿の責任とって回答。

やったことないのでわかりませんが、
WM_MOVINGやWM_SIZINGをうまく処理すればできるんではないでしょうか。

移動中にはWM_MOVING、サイズ変更中にはWM_SIZINGが送られてきます。
ユーザーが移動を完了した時にはWM_MOVE、
ユーザーがサイズ変更を完了した時にWM_SIZEが送られてきて、
そこで描画されますので、

WM_MOVINGを捕らえて、MoveWindowするとかForm.Location=xxとするとか。
WM_SIZINGも同様に処理すればたぶんいけるのではないかと。

追記:
確認しました。
枠が表示されてしまいますが、
できるようです。

ユーザーがあえて無効にしてるのに、
無理やり表示するのもどうかとは思いますが。
引用返信 編集キー/
■7246 / inTopicNo.4)  Re[2]: ドラッグ中にウィンドウの内容を表示する
□投稿者/ Apiece (2回)-(2007/09/02(Sun) 23:33:42)
れいさん

教えていただいたことをヒントに、下記のようなコードをフォーム内に書くことで、実現することが出来ました。
ありがとうございました。

作ろうとしているソフトウェアの特色上、常にウィンドウの内容が表示されることは、
多少のリスクを伴っていても必要であると、ユーザー様が自ずとご理解頂けることと確信しています。


//ドラッグ中にウィンドウの内容を表示する。
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case 0x214 :    //WM_SIZING
        case 0x216 :    //WM_MOVING
            Rectangle r = (Rectangle)Marshal.PtrToStructure(m.LParam, typeof(Rectangle));
            this.Location = r.Location;
            this.Size = new Size(r.Width - r.Left, r.Height - r.Top);
            break;
    }
    base.WndProc(ref m);
}

解決済み
引用返信 編集キー/
■7251 / inTopicNo.5)  Re[3]: ドラッグ中にウィンドウの内容を表示する
□投稿者/ れい (102回)-(2007/09/03(Mon) 00:50:17)
2007/09/03(Mon) 01:01:44 編集(投稿者)
No7246 (Apiece さん) に返信
> 教えていただいたことをヒントに、下記のようなコードをフォーム内に書くことで、実現することが出来ました。
> //ドラッグ中にウィンドウの内容を表示する。
> protected override void WndProc(ref Message m)
> {
>     switch (m.Msg)
>     {
>         case 0x214 :    //WM_SIZING
>         case 0x216 :    //WM_MOVING
>             Rectangle r = (Rectangle)Marshal.PtrToStructure(m.LParam, typeof(Rectangle));
>             this.Location = r.Location;
>             this.Size = new Size(r.Width - r.Left, r.Height - r.Top);
>             break;
>     }
>     base.WndProc(ref m);

Rectangle構造体はx,y,w,hでRECT構造体はl,t,r,bなので無理して使わないほうがいいですよ。
それにLocationとSizeと2回設定するとLayoutルーチンを2回通るのでよくないです。

	Int32[] rect = new Int32[4];
	System.Runtime.InteropServices.Marshal.Copy(m.LParam, rect, 0, 4);
	this.SetBounds(rect[0], rect[1], rect[2] - rect[0], rect[3] - rect[1]);

引用返信 編集キー/
■7254 / inTopicNo.6)  Re[4]: ドラッグ中にウィンドウの内容を表示する
□投稿者/ Apiece (3回)-(2007/09/03(Mon) 02:16:24)
2007/09/03(Mon) 03:43:28 編集(投稿者)

なるほど、そうだったのですね。

そのあたり、よく分からないことになっていたので、本当に助かります。
勉強になりました。

ありがとうございました!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -