人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C#で作ったアプリケーションのウィンドウが必ずスクリーンの中に収まるようにしたいのですが、何かセオリーのようなものはありますでしょうか。(ウィンドウズのプログラムであればVC++やVBでも同じかもしれませんが)

ウィンドウの"Move"イベントのコールバック関数を作り、位置がスクリーン外にはみ出しているようならスクリーン内に収まるように移動させる処理を作ったのですが、あくまで移動した後にスクリーン内に飛ぶ動きになるため、チラチラして見苦しいのです。

よろしくお願いします。

●質問者: nori_0000
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MOVE アプリケーション イベント ウィンドウ スクリーン
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● llusall
●50ポイント

他言語ですが、このへんのWIN32APIを利用すれば、移動を抑止できるかもです。

試してないので、すみませんが・・・

はずしていたら、すみません。


Delphiのサンプル

ウインドウを移動できないようにする

* GetSystemMenu(システムメニューのハンドルを取得する)

* DeleteMenu(メニューの項目を削除する)


C++のサンプル

SDK サンプルプログラム ウィンドウを移動させない

DeleteMenu(GetSystemMenu(hWnd,false),SC_MOVE,MF_BYCOMMAND);


2 ● llusall
●50ポイント

再回答ですみません。


WIN32APIの呼出ですが、こんな感じでいかがでしょうか?

当方、「.NET」に詳しくないのですが、

参考・ヒントになるかと思いまして回答してみました。

見当はずれでしたら、ポイントは不要です。


// Win32 APIのインポート

[ DllImport("USER32.DLL") ]

private static extern IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);

[ DllImport("USER32.DLL") ]

private static extern UInt32 RemoveMenu(IntPtr hMenu, UInt32 nPosition, UInt32 wFlags);


// [移動]のメニューを削除するための値

private const UInt32 SC_MOVE = 0x0000F010;

private const UInt32 MF_BYCOMMAND = 0x00000000;


//システムメニューのハンドルを取得する

IntPtr hMenu = GetSystemMenu(this.Handle, 0);

//「移動」のメニューを削除

RemoveMenu(hMenu, SC_MOVE, MF_BYCOMMAND);


※APIのコールは、ここを参考にしました。

◎質問者からの返答

llusallさんいつもご回答ありがとうございます!

説明不足ですみません。

ウィンドウのドラッグはしたいのです。

ただし、必ず画面内に収まることが条件になります。

要件を箇条書きにしますと、

・ウィンドウをドラッグで移動させられること。

・ウィンドウサイズは固定とする。

・ウィンドウを画面の外に行かせず、

必ずウィンドウ全体がプライマリスクリーンに

表示されていること。

となります、この条件のなかで良い方法をご存知でしょうか。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ