前略
・C#の初心者です。
・先日このMSN相談箱でtsukasa-12rさんからタスクバーを非表示する下記のプログラムをおしえていだきました。 このプログラムでウィンドウフォームを固定しようとして this.FormBorderStyle = FormBorderStyle.FixedSingle; のコードを1行だけ追加しましたがウィンドウフォームを固定できませんでした。
タスクバーを隠して かつウィンドウフォームを固定したいのですが tsukasa-12rさん以外の方でもかまいませんのでどなたか教えてください。
以上、よろしくお願いします
//-----------------------------------
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, IntPtr lpWindowName);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_HIDE = 0;
private const int SW_NORMAL = 1;
[StructLayout(LayoutKind.Sequential)]
struct APPBARDATA
{
public int cbSize;
public IntPtr hwnd;
public uint uCallbackMessage;
public uint uEdge;
public Rectangle rc;
public int lParam;
};
private const int ABM_SETSTATE = 10;
private const int ABS_AUTOHIDE = 1;
private const int ABS_ALWAYSONTOP = 2;
[DllImport("shell32.dll")]
static extern int SHAppBarMessage(int msg, ref APPBARDATA pbd );
public Form1()
{
InitializeComponent();
// 「タスクバーを自動的に隠す」
APPBARDATA abd = new APPBARDATA();
abd.cbSize = Marshal.SizeOf(abd);
abd.lParam = ABS_AUTOHIDE;
SHAppBarMessage(ABM_SETSTATE, ref abd);
// タスクバーを非表示
ShowWindow(FindWindow("Shell_TrayWnd", IntPtr.Zero), SW_HIDE);
// コントロールボックスを非表示
this.ControlBox = false;
// 最大表示
this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = FormBorderStyle.FixedSingle;// ← ウィンドウサイズを固定しようとして追加 → 固定できず
}
private void button1_Click(object sender, EventArgs e)
{
// タスクバーを常に表示
APPBARDATA abd = new APPBARDATA();
abd.cbSize = Marshal.SizeOf(abd);
abd.lParam = ABS_ALWAYSONTOP;
SHAppBarMessage(ABM_SETSTATE, ref abd);
// タスクバーを表示
ShowWindow(FindWindow("Shell_TrayWnd", IntPtr.Zero), SW_NORMAL);
// フォームを閉じる
this.Close();
}
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
位置とサイズを固定できたとして、Alt + Tab でアプリケーションを切り替えたり、デスクトップに切り替えてそこからアプリケーションを起動できたりするのは構わないのですか?
「要求仕様」という言葉は仕事で使うのは別に問題ないと思いますが、こういった場では少し感じが悪いように思います。(受け取り方によっては、回答してくれる人に対して「こういう仕様で作りなさい」という要求を突きつけているように取れてしまう。)
No.1
- 回答日時:
とりあえず、
private const int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCLBUTTONDBLCLK:
break;
default:
base.WndProc(ref m);
break;
}
}
を追加すると、ウィンドウタイトルをダブルクリックしても元のサイズに戻らなくなります。
しかし、Windows7 のエアロスナップが有効の場合、ウィンドウタイトルをドラッグすると元のサイズに戻ってしまいます。
レジストリの
HKEY_CURRENT_USER\Control Panel\Desktop\DockMoving
では再起動、もしくはログオフしなければ設定の変更がシステムに反映されませんが、コントロールパネルでは再起動、ログオフせずに反映できているので、何か方法があるのかもしれません。
参考URL:http://weekly.ascii.jp/elem/000/000/022/22691/
前略
・返答ありがとうございます。返答大変うれしく思っております。
・コード追加して、ウィンドウタイトルをダブルクリックしても元のサイズに戻らなくなることを確認しました。ありがとうございます。でもウィンドウタイトルをドラッグして移動できてしまいます。移動できないようにしたいのです。
私の要求仕様が明確でなかったようです。もう一度整理して箇条書きにしたいとおもいます。
<要求仕様>
下記のウィンドウフォームをC#でつくりたい。
(1) タスクバーを表示しない。
(2) タイトルバーは表示する。
(3) ウィンドウフォームは最大化され、モニター画面内を移動できないこと。
<目的>
パソコンの拡張スロットの拡張ボード( A/D、D/Aボード)をつかったソフトを作成中です。
作成中のソフトが動作中(アクチュエータ動作中)は他のアプリケーションソフトを起動できないようにしたいので上記のウィンドウフォームつくろうとしています。
尚、this.FormBorderStyle = FormBorderStyle.None;を追加するとタイトルバーが消えて<目的>は達成できるのですが メニューバー等を追加した時見栄えがよくないのでタイトルバーを追加したいと思っている次第です。
<質問>
メニューバー付ウィンドウフォームが最大化され、モニター画面を移動できないようにする方法を教えてください。
以上、よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
大量のデータを読み込んで表示...
-
【C#】ソースコードをファイル...
-
ボタンの複数割り当てについて
-
.Net Compact でのダブルバッフ...
-
【Java】画像表示が出来ない!
-
C# WinForm のDataGridView Cel...
-
C#でのWNetAddConnection3の使...
-
C# 親フォームで指定した値を...
-
C++基底クラスに戻り値の異なる...
-
Processingでマウスクリックで...
-
BufferedImageへの変換エラーです
-
JAVAのキーアクションについて
-
C# visibleプロパティをfalseに...
-
GetDIBits関数の使い方について
-
ピクチャボックスのクリックイ...
-
エンターキーを押すとOKボタン...
-
二分探索木の要素の数を数える...
-
次のVB.netのコードをC#で書く...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
【Java】画像表示が出来ない!
-
GetDIBits関数の使い方について
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# DataGridView列カスタマイズ
-
C# MouseHoverを何度も呼ぶには
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C#でキーイベントが発生しない...
-
C#から、C++で作成したdll内の...
-
C# 矢印キーの取得
-
C# visibleプロパティをfalseに...
-
JavaFXでの表内のチェックボッ...
おすすめ情報