問題タブ [comctl32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - TTM_POPUP がすぐにフェードアウトせずに戻ってくるようにするにはどうすればよいですか?
テーブル コントロールでツールチップを処理する最も簡単な方法は、最初の遅延を自分で処理し、ツールチップを動的に作成し、不要になったら破棄することであると判断しました。私の問題はTTM_POPUP
、ツールチップを表示するために使用すると、すぐにフェードアウトし、しばらくしてから再び表示されることです。フェードインして、一度そこにとどまりたいです。
私の仮説は、ツールチップがツールチップの遅延自体を処理し、既存のチップをフェードアウトしてフェードインするというものです。それについてどうすればよいかわかりません。TTM_POPUP
遅延時間を 0 に設定して、それが機能することを期待する必要がありますか (まったく心配する必要はありません)。それとももっと良い方法がありますか?それとも私が間違っていますか?
以下のプログラムは、何が起こっているかを示しています。ウィンドウの上にマウスを置くだけで、ウィンドウが表示されます。
Windows XP および Windows 7 でテスト済み。これは Common Controls 6 に厳密に準拠しています。
編集さて、TTM_SETDELAYTIME
初期時間を 0 に設定する a を追加してみました (以下のプログラムには反映されていません)。うまくいきませんでした。その後をそのままにしておくと、TTM_POPUP
いつもよりも早くフェードアウトするだけです(これは私の仮説を証明しているのかもしれません)。を削除するとTTM_POPUP
、とにかくマウスを動かすまで表示されません。ツールチップをポップアップさせるためにできることは他にありますか?
ありがとう!
winapi - リスト ビュー アイテムにフォーカスを設定する方法は?
リスト ビューで特定の項目を選択してフォーカスするプログラムを作成しようとしています。
ListView_SetSelectionMark を呼び出しても (または LVM_SETSELECTIONMARK を送信しても)、リスト ビュー項目にフォーカスを設定できないのはなぜですか? ListView_SetSelectionMark を呼び出した後、フォーカスは新しい場所に移動するのではなく、元の場所に残ります。矢印キーを押すと、指定した項目ではなく、以前にフォーカスされていた項目から移動します。
アイテムを選択してフォーカスするコードのスニペットを次に示します。
ここに完全な要点があります。Ctrl-R を押すたびに、リスト ビューのランダムな項目が選択されます。
winapi - ツリー ビューでアイテムを置換するときのペイント アーティファクトを修正するにはどうすればよいですか?
タブ コントロールのコンテンツ領域に配置されたツリー ビューがあります (ツリー ビューはタブ コントロールの兄弟です)。ツリー ビュー アイテムを削除し、新しいツリー ビュー アイテムを追加して、そのうちの 1 つを選択すると、ツリー ビューが正しく描画されません。新しく作成された+選択されたアイテムの上にあるものはすべて灰色です。アイテムを削除して挿入した後、ツリー ビューにすべてを適切に描画させる方法はありますか?
所見:
- スクロール バーが表示されないほどツリー ビューの項目が少ない場合、ツリー ビューは問題ないように見えます。
- ツリー ビューにタブ コントロールが隣接していない場合、ツリー ビューは問題ないように見えます。
- ツリー ビューがタブ コントロールの子である場合、ツリー ビューは問題ないように見えます (ただし、Tabキーは GetNextDlgTabItem/IsDialogMessage を使用してタブ コントロールとツリー ビューの間を移動できません)。
- 新しいノードを挿入した後、ツリー ビューでアイテムを選択しなければ、ツリー ビューは問題ないように見えます。
ツリーにアイテムを挿入するときは、TreeView_InsertItem に続いて TreeView_SelectItem を呼び出します。完全なサンプルの要点。サンプル プログラムでは、Ctrl+Rアクセラレータがすべてのツリー ノードを置き換え、アーティファクトを引き起こします。
c - DTM_GETIDEALSIZE の適切な使用法は何ですか? 返されたサイズをピクセルとして扱うと、非常に大きく、場合によっては可変の高さが得られます
でいくつかの日時ピッカー コントロールのサイズを自動調整しようとしてDTM_GETIDEALSIZE
いますが、このメッセージを適切に使用する方法がよくわかりません。返された幅はピクセルとして扱われる場合は問題ないように見えますが、高さはかなりずれているだけでなく、時間の経過とともに変化することもあります!
以下のサンプル プログラムは、3 つの日時ピッカーを作成します。1 つ目は日付と時刻の両方をカスタム形式で表示し、2 つ目は日付のみをDTS_SHORTDATECENTURYFORMAT
で表示し、3 つ目は時刻のみを で表示しDTS_TIMEFORMAT
ます。ウィンドウのサイズを変更すると、 を使用して 3 つのピッカーすべてのサイズが変更されますDTM_GETIDEALSIZE
。幅は問題ないようです。ただし、最初の 2 つの高さは常に 100 であり、最後の (タイム ピッカー) の高さは 98 程度から始まり、16 に達するまでサイズ変更ごとに 2 ずつ減少し、その時点で 16 のままです。
これは、Windows Vista と Windows 7 の両方でテストされています。以下のプログラムのエラー チェックは一貫していません (ただし、これを簡単なテスト例にするために、一部のエラーはチェックされていません)。ただし、MSDNでは、エラー条件が指定されていないDTM_GETIDEALSIZE
場合にのみ返されると明示的に文書化されていることに注意してください。TRUE
ありがとう。
c++ - MFC プログラムがハングします。Vista で KB3059317 を更新した後、Comctl32.dll が壊れていますか?
更新プログラム3059317を適用する直前に正常に動作する MFC ベースのプログラムがあります。
MS15-060: Microsoft コモン コントロールの脆弱性により、リモートでコードが実行される: 2015 年 6 月 9 日)
アップデートはComctl32.dll
新しいバージョンに置き換わります。
この更新プログラムを適用した後、ダイアログを開くと、プログラムがハングするだけです。すべてのダイアログが影響を受けるわけではないようですが、プログラムをクラッシュさせることなく、印刷プレビューが一貫してハングします。無反応になるだけです。
この問題を回避する方法を見つけるために、この問題をデバッグする方法がわかりません。プログラムがハングしたときにメモリ ダンプを作成すると、次のスタック トレースが得られます。
それで、私たちは確かに立ち往生してComctl32.dll
います-今何ですか?
ちなみに、場合によっては、アップデートをアンインストールすると問題が解決することがあります。
アップデート
いずれの場合も、Aero をオフにすると常に問題が解決します。また、KB3059317 は、この奇妙な動作を示す 2015 年 6 月の Windows Vista の唯一の更新プログラムではないようです。
comctl32 - TListBox OnDrawItem が COMCTL32.dll で AV を引き起こす
アプリが COMCTL32.dll から TListBox::OnDrawItem へのアクセス違反を生成する原因を絞り込みました。TListBox.Style は lbOwnerDrawFixed です。
アプリは C++ Builder XE4 で構築され、Win7-64 および Win8-64 で実行されます。私はWin7でそれを実現できますが、IDE内からのみ、散発的にしか実現できません。Win7 のリリース ビルドではエラーは発生しませんが、Win8 では毎回発生します。
これは、フォームが最初に作成されたときにのみ発生します。フォームには、次/前のレコードに移動するためのボタンが含まれています。これは、コントロールを設定するすべてのコードを呼び出しますが、これらの呼び出しに問題はありません。フォーム構築後の初回のみ。
フォーム コンストラクターは、TTimer を 100 ミリ秒一時停止するように設定します。TTimer::OnTimer は、データをコントロールにロードする関数を呼び出します。TListBox が読み込まれた後、OnDrawItem イベントが呼び出されます。
TListBox.Style を lbStandard に設定し、カスタム OnDrawItem を削除しても問題ありません。
OnDrawItem ハンドラーのサンプルを次に示します。
TListBox.Canvas が NULL でないことを確認するためにテストしましたが、違いはありませんでした。どうやらそれは常にNULLではありません。
ここから先に進む方法がわかりません。提案を歓迎します。
ありがとう、キャスリーン
dll - rsrc セクションと comctl32.dll を必要とする 64 実行可能ファイルをリンクする方法は?
UltraDefrag をビルドしようとしています。
非常に単純に聞こえますが、rc.o をバイナリのリンク オブジェクトに追加するとすぐに、32 ビット バージョンの comctl32.dll が使用され、プログラムの起動時に 0xc0000007 エラーが発生します。
これは mingw64 の既知のバグですが、2011 年以降このバグに対する回答がなかったので、回避策が必要です(プログラムは cygwin.dll を使用しない必要があるため、cygwin を使用できません)。
何か案は ?
listview - Comctl32.dll < 6.0 のリスト コントロール LVN_ENDSCROLL エミュレーション
リスト コントロールでLVN_ENDSCROLL メッセージを使用したいと考えています。
このメッセージは、Comctl32.dll v6.0 でのみ表示されます。諸事情により使えません。
利用可能な回避策はありますか?
実際には、水平スクロールバーが移動したときに通知を受け取るだけでよく、LNV_ENDSCROLL メッセージの LPNMLVSCROLL パラメータは必要ありません。