以下のステップで作成したプログラムのダイアログウインドウが
非表示になりません。
新規作成にてMFC AppWizard(exe)を選択。
プロジェクト名はHideWindow1とします。
作成するアプリケーションの種類はダイアログベースです。
その他は全てデフォルトです。
リソースヴューでダイアログを右クリックしプロパティを表示します。
その他のスタイルで 可視 のチェックを外します。
その状態でビルドし,Debug\HideWindow1.exeを実行しても
ウインドウが表示されてしまいます。
さらに CHideWindow1Dlg::OnInitDialog() で return TRUE; の
直前に ShowWindow(SW_HIDE); を入れたのですが表示されてしまいます。
正しい非表示の方法を教えてください。
済みません。環境を書くのを忘れていました。
Windows2000Pro, VC++6.0+SP5 です。
ダイアログのプロパティで「可視」のチェックを外しているのに
ビルドして実行すると,ダイアログが表示されてしまう理由だけでも
よいので,ご存知の方ご教授ください。
ちょっと姑息ですが
MoveWindow(0,0,0,0);
同じような考え方で,
OnInitDialog()で,
SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_HIDEWINDOW);
とかやって,しのいでいますがタスクバーには残ってしまいます。
(SWP_HIDEWINDOWが動作していない。)
ダイアログにボタンをつけ,押すと
SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_HIDEWINDOW);
を実行するように書いてみると,今度はタスクバーからも,画面上からも
消えてくれます。
これを起動時にやりたいのですが。。
なんで表示されてしまうのか分かりません。
Win32 Application => 標準的な"Hello World!"アプリケーション
InitInstance で ShowWindow( hWnd, SW_HIDE ); だと
期待に沿えるようですね
そうですね。
MFCのダイアログベース以外のプロジェクトだと,起動時に
非表示が出来るみたいです。。
以下の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);
}
lpwndpos->flags &= ~SWP_SHOWWINDOW;
の部分はフラグで通したり,通さなかったりすれば,
以後のShowWindow(SW_SHOW)も有効になります。
一応解決ということにします。
Mnowさん,おつきあいありがとうございました。
VC6.0 SP6 Windows10 21H1 タイマーでHIDEしなくてもできました。ありがとうございます。
ツイート | ![]() |