グループボックスで枠線を作り、
その線の上にタブコントロール(スタイルをボタンにした)を表示したいのですが
線の下にタブコントロールが表示されてしまいます。
こんな感じで表示したい(□がタブ)
↓
┌Test─□□□□─┐
│ │
└────────┘
タブオーダを変更したり、
SetWindowPosで指定しましたが、変わりませんでした。
VC++6 MFC
Windows XP以降
中途半端に書いて登録しちゃいました。
タブコントロールを最全面にする方法がありましたら教えて下さい。
以上
よろしくお願いします。
ちなみに、プログラムはこんな感じです。
CStatic *tab;
CStatic *grp;
grp = (CStatic *)GetDlgItem(IDC_グループコントロールID);
tab = (CStatic *)GetDlgItem(IDC_タブロールID);
UINT uflags = SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE;
tab->SetWindowPos(&wndTopMost, 0, 0, 0, 0, uflags);
grp->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, uflags);
wndTopMost や wndNoTopMost は子ウィンドウには効果がありません。
grp->SetWindowPos(tab, 0, 0, 0, 0, uflags);
でよくないですか?
Z-Orderをいじってもうまくいきませんです。
"Child Window Update Region"の最後の方の段落を見てください。
(http://msdn.microsoft.com/en-us/library/windows/desktop/dd183426(v=vs.85).aspx)
リソーススクリプトでタブコントロールをグループボックスより上に書くと
タブコントロールのZ-ORDERは手前に配置されます。
そして、OnInitDialogでタブコントロールにWS_CLIPSIBLINGSを追加すると
うまくいくと思います。
おはようございます。
forty-five さん、ロマ さん
回答ありがとうございます。
forty-five さん
grp->SetWindowPos(tab, 0, 0, 0, 0, uflags);
を指定してみましたが、結果は変わりませんでした。
ロマ さん
WS_CLIPSIBLINGS
を指定してみましたが、結果は変わりませんでした。
確かに、"Child Window Update Region" には、それっぽい事が書いてありますが
なぜか変わりませんでした。
※ グループコントロールに指定すると、タブコントロールが全面に表示されました。
(え?って感じです。)( grp->ModifyStyle(0, WS_CLIPSIBLINGS); )
ただ、WS_CLIPSIBLINGS をキーワードに調べてみると
http://social.msdn.microsoft.com/Forums/ja/vcgeneralja/thread/d916655a-c90e-4ecb-bbc5-20d1144f02be
の質問が引っかかり見てみると。。。
WS_EX_TRANSPARENT
タブコントロールの "透過" 設定をチェックすると、全面に表示されました。
ヘルプには
> 透過
> このスタイルを使用するウィンドウは、透明に表示されます。
> 下にあるウィンドウは、このウィンドウによって隠されません。
> このスタイルのウィンドウは、下に位置するウィンドウがすべて更新された後にのみ、
> WM_PAINT メッセージを受け取ります。タイプはブール、デフォルトの設定は False です。
と書いてありますが
> 下にあるウィンドウは、このウィンドウによって隠されません。
と
> このスタイルのウィンドウは、下に位置するウィンドウがすべて更新された後にのみ、
> WM_PAINT メッセージを受け取ります。タイプはブール、デフォルトの設定は False です。
下にあるウィンドウは隠されません?
下のコントロール更新したら、WM_PAINT 受け取って再描画?全面に表示される?
透過なのか表示するのか?
どっちだ!?
って感じです。。。
WS_EX_TRANSPARENT
タブコントロールの "透過" 設定をチェックすると、全面に表示されました。
の全面 は 前面 です。
> そして、OnInitDialogでタブコントロールにWS_CLIPSIBLINGSを追加すると
> うまくいくと思います。
すみません、まちがいです。
GroupBoxにWS_CLIPSIBLINGSを付けてください。
TabControlは手前にあるのですべて描かれ、
GroupBoxはWS_CLIPSIBINGSがあると、TabControlと重ならない部分のみ
描画されるようになります。
ツイート | ![]() |