問題タブ [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# - .NET での COMCTL32 バージョンの検出
C# .NET アプリケーションで使用されている comctl32.dll のバージョンを確認するにはどうすればよいですか? この質問に対する私が見た回答には、通常、Windows\System の物理ファイルからバージョン情報を取得することが含まれますが、サイド バイ サイドの考慮事項により、必ずしも実際に使用されているバージョンとは限りません。
winapi - Comtl32.dll ListView で長方形の複数選択動作を取得する方法
重複の可能性:
ListView の複数選択動作?
v6.0 では、次のようListView
にComtl32.dll
複数選択 (Shift キーを使用する場合) を行います (x は選択済みを意味します) 。
ListView の以前のバージョンでは、次のように実行されます。
p>最初の方法 (comctl32 v6.0 の方法) にする方法はありますか?
c - Win32 と Visual Styles を使用したボタンの背景の透明度
編集:誰かが以前に win32 でこれを試した場合、DrawThemeBackground() を使用して正しい方向に進んでいますか?
私は最近、バージョン 6 の ComCtl32.dll のマニフェストを使用して Visual Styles を有効にしました。Win32 の視覚スタイルの例:視覚スタイル
ボタンは見栄えがしますが、ボタンの周りの背景を透明にする方法がわかりません。サンプル画像をご覧ください: http://www.freeimagehosting.net/image.php?2bdeff33ba.jpg
私のメインウィンドウの背景色は、次のように濃い灰色に設定されています。
共通コントロールは次のように初期化されます。
そして、ボタン ウィンドウを次のように作成します。
ボタンは白い背景の上ではきれいに見えますが、境界線は他のものの上に表示されます。ボタンの枠線を透明にすることはできますか?
c# - C#: デバッガーの comctl32.dll バージョン 6
TaskDialogにWindowsAPICodePackを使用しています。ダイアログを表示しようとすると、バージョン 6 の comctl32.dll をロードする必要があると表示されます。ということで、app.manifestにバージョン6を追加して実行してみました。まだ運がありません。Debug フォルダーに移動し、Visual Studio を使用せずにプログラムを実行したところ、正常に動作しました。私は、Visual Studio がマニフェスト ファイルを使用していないと推測しています...これを行う方法があるかどうか疑問に思っていました。
c++ - 共通ファイルダイアログで現在選択されているファイルの本当の名前を取得しますか?
共通ダイアログのリストビューで、選択したアイテムのテキストを取得できます。ただし、PIDLを取得することはできません。また、ユーザーが既知の拡張子(デフォルト)を非表示にすることを選択した場合、拡張子またはPIDLがないと、どのファイルが選択されたかを実際に知ることはできません。
したがって、これを解決するための可能な方法は次のとおりです。
- 標準のファイルを開くダイアログからIShellViewを取得します。基礎となるIShellViewは、現在の選択に対するPIDLが何であるかを知ることができます。したがって、IShellViewを簡単に入手できれば、私は金色になります。残念ながら、それを行うCDM_xxxは見当たりません。そして、私はそれを達成するかもしれない何かの頭のてっぺんから考えることはできません!!! :(
- 他のアイデア?!
以前は、Windows 9x、2000、およびXPバージョンの共通ファイルダイアログが各アイテムのPIDLをLVITEMデータに保存しているという事実に依存していました(Paul DiLasciaの元のクレジット)。
LPCITEMIDLIST pidlItem =(LPCITEMIDLIST)pListCtrl-> GetItemData(nItem);
ただし、Vistaの一般的なコントロール以降では、その手法は失敗します:(
何かご意見は?
編集:リストビューで現在選択されているアイテムだけでなく、リストビューのすべてのアイテムについてこの情報を取得できる必要があります。
EDIT2:私がとても深く掘り下げる必要がある理由:
以前のバージョンのアプリでは、次の機能を提供しています。(1)カスタムボタン[プレビュー]を押してダイアログを閉じますが、ビューに現在表示されているアイテムのリストを、表示されている順序でアプリに転送します。現在強調表示されているもののインデックス。このリストは完全に指定する必要があります。すべて「J1329192」である3つのファイルを表示します(実際に3つのファイル「J1329192.xyz」「J1329192.xzy」および「J1329192.zyx」(この順序で)がある場合)は役に立ちません。
ユーザーは「ファイル名:」フィールドに部分的なファイル名フィルターを入力でき、共通ダイアログには、ユーザーが選択したソート順で、指定された部分的なフィルターに一致するファイルのみが表示されます。したがって、ユーザーがプレビューしたいものを正確にアプリに報告するには、リストビューコントロール(または共通ダイアログ自体)からその情報をクエリできる必要があります。
ファイルダイアログに他の機能拡張も行います。たとえば、ユーザーの現在の選択をサムネイルとして表示するインプレースプレビューペインや、カスタムの最近の場所のインターフェイスなどがあります。これはすべて可能でした(多くの場合) Vistaより前の作業)。ビスタ後、私は壁にぶつかりました。当面は、独自の機能がほとんどない標準のファイルダイアログを使用しますが、これは顧客との相性がよくありません(機能Xはどうなりましたか?!)
他にも機能強化がありますが、これは大まかな概要です。そして、それらはすべて、「本当に、正直なところ、インデックスXのビューに具体的にどのファイルがあるのか」という知識を必要とすることになります。そして、理由は不明ですが、Microsoftはそのようなインターフェイスを提供する必要性を感じていないようです。実際、彼らは決してしませんでした。いくつかのハッキングとリバースエンジニアリングによってのみ、内部で物事がどのように機能するかを理解し、必要な情報を得ることができました。そして、はい、それはサポートされていません、そしてはい、MSは必然的に私たちのコードを壊しました。私は彼らのせいではありません-私が不快だと思うのは、彼らの新しい、より洗練されたインターフェースが古いものよりもはるかに閉じていることです-そして彼らはこれらのダイアログの機能強化を行うためのより多くの先行インターフェース(サポートされているインターフェース)を提供していませんでした。
windows - TVM_GETITEM メッセージが comctl32.ocx または mscomctl.ocx ツリー ビューで失敗するのはなぜですか?
ツリー ビューがリモート プロセスにある場合でも、ツリー ビュー アイテムのテキストを生成できる関数を作成しました。この関数は、リモート プロセスに 2 つのメモリ チャンクを割り当て、TVITEM 構造体 (リモート プロセスにコピーされたもの) を設定し、TVM_GETITEM メッセージを送信し、最後に 2 番目のリモート メモリ チャンクの内容をローカル バッファに読み込みます。これはコードです:
WC_TREEVIEW
このコードは、クラス名をに渡すときに得られる単純なツリー ビューと非常にうまく連携しますCreateWindow
。ただし、MS Common Controls v5 (comctl32.ocx) または MS Common Controls v6 (mscomctl.ocx) によって提供される新しいツリーでは機能しないことに気付きました。そのような場合、返されるテキストは常に空です (バッファはすべてゼロです)。また、SendMessage 呼び出しがゼロを返すことにも気付きました (したがって、// handle error
上記のコメントで示されているエラー処理が開始されます)。これが本当にエラーを示しているかどうかは不明です。いずれにせよ、バッファはすべてゼロで埋められています。
他のすべてのツリー ビュー メッセージ (TVM_GETITEMRECT など) は完全に機能しているようです。
それがなぜなのか誰か知っていますか?UNICODE フラグをいじってみました (またはTVM_GETITEM
に定義されていることに気付きました) が、それは役に立たなかったようです。TVM_GETITEMA
TVM_GETITEMW
c++ - Visual スタイルを使用していない Word アドインのダイアログ
プレーンな Win32 API を使用して、C++ で Word アドインを作成しました。いくつかのダイアログが開きますが、これらは常に Vista 以降では commctl6 ビジュアル スタイルなしで表示されます。マニフェストは、RT_MANIFEST およびリソース ID - 2 として配置されます (以下を参照)。自分のテスト アプリから同じ機能/ダイアログを呼び出すと、ビジュアル スタイルは問題ありません。
マニフェストがあるにもかかわらず、Word がどのようにアドインで視覚スタイルを使用できないようにしているのですか?
windows - XPテーマ使用時のスキンダイアログ?
私は、WM_CTLCOLORSTATIC、WM_CTLCOLORBTN メッセージを使用して、ダイアログのスキニングを行ってきました。
このコードは、背景ブラシが低コントラストの画像を描画するため、すべての静的要素のテキストの色を白に設定します。
Ive (だけ) 最近、ダイアログで Common Controls 6 と XP-Themeing の外観を使用するように更新しましたが、コントロールのすべてのテキストは、デフォルトの黒で再び描画されるため、「消えて」しまいました。
XPテーマの下でコントロールのテキストの色を制御する他の方法はありますか? または、今 ownerdraw を考慮する必要がありますか :-( ?
(そして、所有者の描画は実際にはオプションではありません-すべてのコントロールを所有者として描画すると、最初に共通のコントロール6に切り替える動機全体が失われます)。
c++ - マニフェストなしでビジュアル スタイルを有効にする方法
ドキュメントによると:
「アプリケーションで ComCtl32.dll バージョン 6 を使用する場合は、アプリケーション マニフェストまたはコンパイラ ディレクティブを追加して、使用可能な場合はバージョン 6 を使用するように指定する必要があります。」
上記の論理 OR に注目してください。では、この謎のコンパイラ ディレクティブとは何なのでしょうか?
1 つの .cpp ファイルに完全に含まれているネイティブの Win32 C++ アプリケーションがあります。リソース ファイルやマニフェスト ファイルなどはありません。そのままにしておきたいのですが、ビジュアル スタイルも使用したいと考えています。
winapi - ListViewの複数選択動作?
Comtl32.dll v6.0のListViewは、次のように複数の選択を行います(Shiftキーを使用する場合)(xは選択されていることを意味します)
ListViewの以前のバージョンは、次のように実行します。
最初の方法(comctl32 v6.0の方法)を実行させる方法はありますか?
ありがとうジョン