ドッキングツールバーのつまみ部分の背景がおかしくなる – プログラミング – Home

ドッキングツールバーのつまみ部分の背景...
 
通知
すべてクリア

[解決済] ドッキングツールバーのつまみ部分の背景がおかしくなる


憂
 憂
(@憂)
ゲスト
結合: 20年前
投稿: 72
Topic starter  

こんにちは
いつもお世話になっております

まず環境です
WinXP、VC++6.0、MFC、SDI

現在AppWizardで作成したSDIプログラムを改造しているところなのですが、
そのドッキングツールバーにおかしなところを見つけました

まずこの画像を見てください

このようにツールバーを移動させるためのつまみ部分の背景が描画されず、
その部分にウインドウを重ねたりしたときに重なっていたウインドウの
描画内容がそのまま残ってしまうのです

最初は仕様(バグ?)なのかと思って試しに別のプロジェクトで
SDIプログラムを作成してみたのですが、再現されませんでした

そのときに気がついたのですが、クライアント領域の境界線が
画像ではわかりにくいのですが青い1本線になってしまっていました
しかし試しに作成した方のプログラムでは内側にへこんだような
立体的な境界線でした

ウインドウのスタイルなどは一切いじっていないはずなのに
いつの間に変わってしまったのかまったく見当がつきません

また、現在作成しているプログラムでは、CSplitterWndを使ってフレームを分割してい
て、
それが原因かと思ってフレーム分割の処理があるCMainFrame::OnCreateClient()を丸ご
と消し、
CTreeViewを派生元としたViewのみを表示させるようにしてみましたが変わりませんでし

ちなみにViewでの処理は、初期化処理を含めて全てコメントアウトしてみましたがだめ
でした

なにぶんMFCを使うのは初めてなもので、いまいち原因を探りきれずにいます
何かアドバイスをいただけないでしょうか?
よろしくお願いします


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

XP のビジュアルスタイルを有効にしていると、そんな現象が出たような…


返信引用
憂
 憂
(@憂)
ゲスト
結合: 20年前
投稿: 72
Topic starter  

シャノンさん、レスありがとうございます

確かにXPビジュアルスタイルを適用するためにリソースにmanifestファイルを組み込ん
でありました
で、それをはずしてみると例の現象は発生しなくなりました

考えてみたらサンプルで作成してみたSDIプログラムはXPスタイルを適用させていなかっ
たので
現象が再現されなかったのでしょう・・・

まったく同じ状況で再現するかどうか試したつもりでしたが、
まさかそんなところに原因があったとは・・・盲点でした・・・

クライアント領域の1本線とへこんだような境界線の違いも
確かにビジュアルスタイルだと考えると全てが納得いきます
まだXPを導入して時間が経っていないので思い至らなかったようです

ちなみに同じようにドッキングツールバーを使っているフリーソフトを見てみたところ
同じようにXPビジュアルスタイルの場合のみで
例のツールバーのつまみ部分の描画がおかしくなっていました

原因はそこらあたりでまず間違いないようです

的確なご指摘感謝します
どうもありがとうございました


返信引用
Takahashi
 Takahashi
(@Takahashi)
ゲスト
結合: 21年前
投稿: 45
 

もう調べちゃったかもしれないけど、一応書いておきますね。
こうすればツールバーが正常になります。

<修正する前>
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0(Failed to create toolbar\n);
return -1; // 作成に失敗
}

<修正後>
if (!m_wndToolBar.CreateEx(this, 0, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0(Failed to create toolbar\n);
return -1; // 作成に失敗
}
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT); // 追加!


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> こうすればツールバーが正常になります。

へぇー。確かに。
でも、まだ万全じゃないみたいです。

> ツールバーのボタンの上で、マウスの両方のボタンを押し下げると
> ハングしてしまうのであきらめました。

> ちなみにクラッシックにしても、manifest があるとハングして
> しまいます。manifest ファイルを消せば、大丈夫なんです。。。。

http://forums.belution.com/ja/vc/000/067/12s.shtml


返信引用
Takahashi
 Takahashi
(@Takahashi)
ゲスト
結合: 21年前
投稿: 45
 

ああ、そういえばそうでしたね。
URL等、補足ありがとうございます。

# まあ、普通両方押さないから気づかなかったけどWindows XP SP2 でも未だに直ってな
いようですね。
# さっき試してみたら、やっぱりハングした。(^_^;


返信引用
憂
 憂
(@憂)
ゲスト
結合: 20年前
投稿: 72
Topic starter  

Takahashiさん、シャノンさん、レスありがとうございます

実は「ビジュアルスタイルの不具合ならしょうがないか・・・」と思い
半ば諦めてこのままでいいかなと思っていたところでした

ですが追加で書き込まれた情報とリンク先の情報を元にいくつか実験をしたので
その報告をします

まずTakahashiさんに教えていただいた方法を試してみました
CreateExでスタイルを指定せずに、作成後にModifyStyleでTBSTYLE_FLATを追加したとこ

描画の不具合はなくなりました

最終的にまったく同じスタイルになっているのではないかと思うのですが、
なぜこうするとうまく行くのは少し謎ですね・・・

また、左右のボタン同時押しによる不具合のチェックもしてみました

結果としては、やはり止まってしまいます
が、なんというかアプリ自体が完全にハングするというわけではないみたいです

ツールバーのボタン左右同時クリック
   ↓
ツールバーのほかのボタンを押すと押し下げ状態の表示で固定され、
ボタンを押した時の処理は成されない
   ↓
このとき、キーボード操作は一切受け付けなくなるようで、
Alt+Fなどのメニュー操作や、Alt+F4も受け付けなくなる
ただしAlt+TABは通常通り動作する
   ↓
この状態でそのウインドウ内のツールバー以外の領域をクリックすると、
不正終了することがある
   ↓
不正終了していない場合なら、
一度ウインドウを非アクティブにしてから再びアクティブにすると、
また操作できるようになる

だいたいこのような感じでした
原因とかはさっぱりわけわかりませんけど

それとツールバーではないのですが、
いろいろ試していたとき某IRCクライアント(XPビジュアルスタイル未対応)
にこちら側でmanifestファイルを作成しXPビジュアルスタイルを適用させたところ、
1行エディットで一度入力した文字を消したときに、
データ上は消えているが描画内容だけ残ってしまうという不具合が起こってました

実験報告は以上のような感じです

このような場合、ビジュアルスタイルを適用させたいのならば
この不具合は避けて通れないということなのでしょうね
Microsoft側で対応するのを待つしか・・・?

しかしビジュアルスタイルには対応させておきたいので、
上記の方法で対処しておくことにします

どうもありがとうございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました