CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発 Windows

デュアルモニターでツールバーをドラッグすると枠非表示で残像が出る

投稿日:

デュアルモニター環境で、MFCで作ったアプリをメインモニター側に出して、アプリのツールーバー(CToolBar)をドラッグすると、枠がメインモニター側に表示されずに、サブモニター側に枠と残像が表示されるという現象が、ここ最近出はじめた。
どうやらWindows 11 24H2のバグのようだが、MFC(Microsoft Foundation Class)という枯れた技術を使ったアプリなため、ネットで騒がれることもなく、問題視されていない。動作速度が重要視されるCAD界隈で少し話題になっており、おいらも自分とこのCADで現象が出ることを確認し、最初は自分とこだけの問題かと怪しんだが、VisualStudioのウィザードで作った簡単なアプリでも再現したので一般性のある問題だと確信できた。アプリはこんな。

ツールバーをドッキングしている分には問題ない。マウス操作でドラッグしてフローティング状態にしようとすると枠が表示されずに、ドラッグを完了させるべくマウス左ボタンをはなすと指定位置に移動されている。メインモニターではそんな挙動となるのに対して、左側にあるサブモニターで枠と残像が表示されている。つまり、メインモニターの左側にサブモニターがあると現象が顕著になるということ。1がサブモニターで、2がメインモニター。

サブモニター側の残像はこんな感じ。ドラッグ終了時に消えることもあるし、消えないこともある。アクティブウインドウ切り替えで消えるので、ずっと残っているわけでもない。

以下、実装面での考察。MFCのツールバークラスはCToolBar。ドラッグ時に中身が表示されずに枠しか出ないという動きなので、今っぽくなくて昔々から使われてきた過去の遺跡なのかもしれない。CMFCToolBarというクラスもあって、こっちであればこの問題がおきないのはわかっている。ただ、CToolBarをCMFCToolBarに置き換えるだけではダメで、親クラスのCMainFrameの継承元をCFrameWndからCFrameWndExに変えるなど、周囲を取り巻く関係クラスをごっそりと変更しなければいけないっぽい。つまり、PG実装面から回避することは容易ではないということ。

さて、この問題についてマイクロソフトさんはいつ直してくるだろうか。おいらが積極的に働きかけるつもりはない。ネットの動向を見守ろう。

-ソフト開発, Windows

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

WinMergeで複数拡張子を対象とするファイルフィルタと簡単な行フィルタ指定をやってみた

WinMergeでファイル比較することは、SEだったらみんなやっていることと思う。でもファイルフィルタと行フィルタは使ったことがないと思う。おいらだって、何年もWinMergeを使ってきたけど、正規表 …

PDFium ViewerによるPDFレンダリングがイケてる

PDFが電子ペーパーの絶対的な標準になったなか、PDFをプログラムであつかうのがとても簡単になってきた。

VisualStudioのアイコンエディタはクソで、Paint.NETが素晴らしいじゃん

アプリケーションエンジニアならicoファイルを自由自在に作れるかっていうとそうでもなくて、今までだましだまし適当に作っていた。Photoshopなんかで画像を作るとこまではいいんだけど、それをVisu …

no image

いたちごっこ3

開発者の考えた対策は空しく敗れ、3度目の戦いが始まるところから話は始まります。 ●3度目のクラック 開発者の考えたトラップに、クラッカーは見事に”はまって”くれました。でも、依 …

Windowsアプリで引数を受け取る(改)

MFCを使ったWindowsアプリの実装に関する話。 CWinAppを継承したクラスでは、m_lpCmdLineで起動時のパラメータを取得できる。そのパラメータは1個の文字列だが、半角スペースで区切ら …