ウィンドウの状態を常にアクティブに見せたい

[戻る]
てんてく 2005/05/23(月) 13:31:26
環境 Win2000, VC++6.0

子ウィンドウとしてModelessDlgを表示すると通常親ウィンドウは非アクティブ状態になります
が、子ウィンドウがアクティブのときでも親ウィンドウの見た目をアクティブ状態に見せる
(タイトルがグレーグラデーションにならない)にはどうすればいいでしょうか?
丁度、VCでプロパティを表示している時のような感じです。

説明がわかりにくいかも知れませんがよろしくお願いします。

PATIO 2005/05/23(月) 14:24:53
WS_EX_TOOLWINDOWが設定されているウインドウだからではないでしょうか?
調べてみてはどうでしょう。

てんてく 2005/05/23(月) 17:29:18
回答ありがとうございます。

ですが、出来ませんでした・・。
親、子どちらにそのスタイルを設定すればいいのか良くわからなかったので
CFrameWndとCDialog両方でやってみましたがダメです。

CDialog派生::PreSubClassWindow()
{
  DWORD dwExStyle = GetExStyle();
  dwExStyle |= WS_EX_TOOLWINDOW;
  LONG ret1 = ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, dwExStyle);
  BOOL ret2 = ::SetWindowPos(GetSafeHwnd(), NULL, 0, 0, 0, 0, SWP_NOMOVE | 
SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );

  CDialog::PreSubclassWindow();
}

呼んでる場所がマズイ??OnInitDialog()でもダメでしたが。
引き続きお願いします。

PATIO 2005/05/24(火) 12:00:44
> VCでプロパティを表示している時のような感じです。

と言うことだったので書いてみたんですが、
プロパティを表示しているダイアログを見てみると通常のダイアログは
明らかに違うものである事がわかると思います。
ツールバーがフローティングになっている時の状態と同じだと思うのです。
それで、WS_EX_TOOLWINDOWを設定してはどうかと思ったんですが、
設定するならダイアログの方だけに行うべきだと思いますし、
通常のダイアログとは表示が異なってしまうことは頭においておくべきかと思います。

てんてく 2005/05/24(火) 15:17:34
確かにダイアログの見た目(フォントや×ボタン)などは
プロパティを表示しているダイアログと一緒になりました。
でもこのダイアログにフォーカスがあるとき親はグレーなんです。
まだ何かスタイルの設定などあるかもしれませんね。
ぐぐってみます。

>通常のダイアログとは表示が異なってしまう
ちなみにダイアログ枠なしのスタイルで使用する予定なので
子ダイアログのタイトルバーの見た目はどうでも良いです(^^;

fackt 2005/05/24(火) 15:37:32
WM_NCACTIVATEを使用することで可能です。
詳しくはここに載っています。
http://www.alpha-net.ne.jp/users2/gmaru/programs/pg_docktool_01.html

てんてく 2005/05/24(火) 17:30:49
[[解決]]
>facktさん
出来ました!
グローバルフラグの差分、MFC版の差分など修正項目はまだありますが
そこら辺は自力で何とか出来そうな予感がしています。
ありがとうございました m(_ _)m

また何かありましたらよろしくお願いします

古いスレッドには追加発言できません。