MFCアプリケーションでウインドウを非表示にするには?

解決


斎藤。  2002-10-16 01:52:11  No: 50457

以下のステップで作成したプログラムのダイアログウインドウが
非表示になりません。

新規作成にてMFC AppWizard(exe)を選択。
プロジェクト名はHideWindow1とします。
作成するアプリケーションの種類はダイアログベースです。
その他は全てデフォルトです。
リソースヴューでダイアログを右クリックしプロパティを表示します。
その他のスタイルで 可視 のチェックを外します。
その状態でビルドし,Debug\HideWindow1.exeを実行しても
ウインドウが表示されてしまいます。
さらに CHideWindow1Dlg::OnInitDialog() で return TRUE; の
直前に ShowWindow(SW_HIDE); を入れたのですが表示されてしまいます。

正しい非表示の方法を教えてください。


斎藤。  2002-10-17 19:08:26  No: 50458

済みません。環境を書くのを忘れていました。
Windows2000Pro, VC++6.0+SP5 です。

ダイアログのプロパティで「可視」のチェックを外しているのに
ビルドして実行すると,ダイアログが表示されてしまう理由だけでも
よいので,ご存知の方ご教授ください。


Mnow  2002-10-18 02:31:09  No: 50459

ちょっと姑息ですが

MoveWindow(0,0,0,0);


斎藤。  2002-10-18 03:04:48  No: 50460

同じような考え方で,
OnInitDialog()で,

SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_HIDEWINDOW);

とかやって,しのいでいますがタスクバーには残ってしまいます。
(SWP_HIDEWINDOWが動作していない。)
ダイアログにボタンをつけ,押すと

SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_HIDEWINDOW);

を実行するように書いてみると,今度はタスクバーからも,画面上からも
消えてくれます。
これを起動時にやりたいのですが。。
なんで表示されてしまうのか分かりません。


Mnow  2002-10-18 03:21:44  No: 50461

Win32 Application => 標準的な"Hello World!"アプリケーション
InitInstance で ShowWindow( hWnd, SW_HIDE ); だと
期待に沿えるようですね


斎藤。  2002-10-18 03:37:09  No: 50462

そうですね。
MFCのダイアログベース以外のプロジェクトだと,起動時に
非表示が出来るみたいです。。


斎藤。  2002-10-18 04:40:29  No: 50463

以下のURLを参考にしたら,起動時からダイアログが表示されなくなりました。
http://isweb34.infoseek.co.jp/computer/ptvi/vc/p_0000023.html

やったこと。
[HideWindow1Dlg.h]
// インプリメンテーション
protected:
  HICON m_hIcon;

  // 生成されたメッセージ マップ関数
  //{{AFX_MSG(CHideWindow1Dlg)
  virtual BOOL OnInitDialog();
  afx_msg void OnPaint();
  afx_msg HCURSOR OnQueryDragIcon();
  afx_msg void OnWindowPosChanging(WINDOWPOS * lpwndpos);//追加
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()

(2)[HideWindow1Dlg.cpp]
BEGIN_MESSAGE_MAP(CHideWindow1Dlg, CDialog)
  //{{AFX_MSG_MAP(CHideWindow1Dlg)
  ON_WM_PAINT()
  ON_WM_QUERYDRAGICON()
  ON_WM_WINDOWPOSCHANGING()//追加
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

(3)[HideWindow1Dlg.cpp]
//以下の関数を追加
void CHideWindow1Dlg::OnWindowPosChanging(WINDOWPOS * lpwndpos)
{
    lpwndpos->flags &= ~SWP_SHOWWINDOW;
    CDialog::OnWindowPosChanging(lpwndpos);
}


斎藤。  2002-10-18 19:17:15  No: 50464

lpwndpos->flags &= ~SWP_SHOWWINDOW;

の部分はフラグで通したり,通さなかったりすれば,
以後のShowWindow(SW_SHOW)も有効になります。
一応解決ということにします。
Mnowさん,おつきあいありがとうございました。


コンドル  2021-10-21 16:06:22  No: 149889

VC6.0 SP6 Windows10 21H1 タイマーでHIDEしなくてもできました。ありがとうございます。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加