LoginSignup
0
1

More than 5 years have passed since last update.

c++ builder > 他のアプリケーションをHideからShowに変更する > this->Hide()とShowWindow(this->Handle, SW_HIDE);は挙動が違う > ShowWindow()はVisibleプロパティをtrueにはしない

Last updated at Posted at 2016-04-13

Stackoverflow
で質問していた、うまく動作しない件が解決した。

やろうとしていたこと

Hide状態のソフトを他ソフトからShowにするということをしたかった。

  • UnitShowソフト: UnitHideソフトをHideからShow状態にする
  • UnitHideソフト: 自身のボタンでHide状態にする

code v0.1

2つのソフトでそれぞれの以下のユニットのコードを実装した。

UnitShow.cpp
void __fastcall TFormShow::B_showClick(TObject *Sender)
{
    HWND hwnd = GetDesktopWindow();
    hwnd = FindWindowEx(hwnd, NULL, L"TFormHide", NULL);

    ShowWindow(hwnd, SW_SHOWNORMAL);
}
UnitHide.cpp
void __fastcall TFormHide::B_hideClick(TObject *Sender)
{
    this->Hide();
}

上記の状態で以下の操作をしてもHideになるのは1回だけで、2回目以降はHideにならなかった。

  • On UnitHide, click B_hide >> UnitHide is hidden
  • On UnitShow, click B_show >> UnitHide is shown
  • On UnitHide, click B_hide >> UnitHide is not hidden

code v0.2

どうも this->Hide()がうまく機能しなくなるようだった。

以下のコードでは動いた。

UnitShow.cpp
void __fastcall TFormShow::B_showClick(TObject *Sender)
{
    HWND hwnd = GetDesktopWindow();
    hwnd = FindWindowEx(hwnd, NULL, L"TFormHide", NULL);

    ShowWindow(hwnd, SW_SHOWNORMAL);
}
UnitHide.cpp
void __fastcall TFormHide::B_hideClick(TObject *Sender)
{
    // this->Hide();
    ShowWindow(this->Handle, SW_HIDE);
}

this->Hide()とShowWindow(this->Handle, SW_HIDE);は挙動が違うようだ。

this->Hide()はフォームをHideする。
ShowWindow()はソフトをHideしているのだろうか?
http://www.festra.com/eng/snip10.htm

this->Showingの値を見ているとどうもそのようだ。
this->Hide()に対応するにはthis->Show()を使用して、ShowWindows(,SW_HIDE);に対応するにはShowWindow(,SW_SHOWNORMAL);を使用いたほうがよいように思う。

http://qc.embarcadero.com/wc/qcmain.aspx?d=1322
を見ているとShowWindow()はFormのVisibleプロパティをTrueにはしないようだ。そのため、2回目以降のthis->Hide()は無効になる。

関連 http://hakomof.hatenablog.com/entry/2014/09/24/210612

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1