問題タブ [common-controls]

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.

0 投票する
1 に答える
913 参照

c - GWL_WNDPROC を使用してリッチエディットをサブクラス化する際の問題

edit と richedit の両方でこれとまったく同じことを行いますが、後者ではアクセス違反が発生します。なぜですか? tabctrl に対しても同じことが起こります。私は何を間違っていますか?どうすれば動作させることができますか?

私はvc++ 6を使用しています。

前もって感謝します。

0 投票する
0 に答える
255 参照

c++ - コモン コントロール ダイアログ フックから Win7 ライブラリへの参照を取得するにはどうすればよいですか?

OFNHookProcWindows 7 で共通コントロール ダイアログをインストルメント化するために実装してGetOpenFileName()います。インストルメンテーションは C++ で記述されています。ユーザーがライブラリ (ドキュメントや画像など) を選択するまで、問題なく動作します。これが発生すると、CDN_FOLDERCHANGE期待どおりに通知を受け取りCDM_GETFOLDERPATHますが、新しく選択したフォルダーを取得するメッセージをダイアログに送信すると、-1 のエラーが返され、CommDlgExtendedError0 が返されます。ある意味では、これは理にかなっています。フォルダーではありませんが、他のメッセージはどれも機能していないようです (CDM_GETFOLDERIDLISTまたは などCDM_GETFILEPATH)。

OFNHookProcでは、現在選択されているアイテムまたはフォルダーがライブラリであることを からどのように判断しますか? それがライブラリであることがわかったら、どのファイル システム フォルダがライブラリを構成しているかを把握できるように、ライブラリへのインターフェイスをどのように取得しますIShellItemか?IShellLibrary

(ダイアログを作成するコードはレガシ コードであるため、Windows 7 で推奨されているライブラリを適切な方法でサポートするインターフェイスにGetOpenFileName置き換えることはできません)。IFileOpenDialog

0 投票する
1 に答える
418 参照

windows - CHOOSECOLORダイアログでフォントを変更する

私はWindowsの共通コントロールのCHOOSECOLORダイアログを使用していますが、Win 7では、まだ「古い」Tahomaフォントを使用しているため、親指のように突き出ています。

ChooseColorダイアログ

Segoe UIまたは他のフォントを使用するためのかなり簡単な方法はありますか?

重要な場合は、Delphi / C++Builderを使用しています...

0 投票する
1 に答える
955 参照

winapi - XP Common Controls マニフェスト: processorArchitecture='x86' vs. processorArchitecture='*'

と言うメリットは

それ以外の

マニフェストを指定するとき?

0 投票する
2 に答える
1470 参照

visual-studio - Common Controls 機能を保持しながら、マニフェストでビジュアル スタイルを無効にする

私は純粋な WINAPI を使用しており、TB_GETMETRICSメッセージを送信する必要があります。ただし、このメッセージは、Common Controls バージョン 6.0 への参照を含むマニフェスト ファイルをアプリケーションに追加した場合にのみ機能します。追加しました。メッセージは機能していますが、アプリケーションで Vista/Windows 7 のビジュアル スタイルが使用されていません。これは望ましくありません。

マニフェスト ファイルを変更するか、何らかの API 関数を呼び出して、Classic テーマを使用している間、Common Controls 6.0 参照を維持する方法はありますか?

注: SetWindowThemeを試しましたが、Classic と Aero が混在した結果になりました。

編集: SetWindowTheme 関数を正しく読んでいなかったので、親 hWnd に対して呼び出すと、そのすべての子に対して自動的に呼び出されると考えていました。Windows クラシックを使用するコントロールごとに呼び出す必要があることがわかりました。現在は正常に機能しています。

0 投票する
1 に答える
3878 参照

delphi - アルファブレンドアイコンのあるイメージリストは透明性を失います

これが(多かれ少なかれ)関連する質問です:Delphi-実行時にアイコンでイメージリストを作成します'破壊'透明度

@TOndrejの回答をテストしました。しかし、これを機能させるには、ビジュアルスタイル(XPマニフェスト)を有効にする必要があるようです(Windowsの共通コントロールのバージョン6.0が使用されます-今は必要ありません)。実行時にとを介してアイコンを追加しExtractIconExますImageList_AddIcon

どうやらImageList.Handleシステムイメージリストハンドルを使用するように設定すると、XPマニフェストは必要ありません。そのため、D3で書き戻した古いプログラムでも、システムイメージリストを使用してファイルリストを表示すると(を使用してTListView)、アルファブレンドアイコンが正しく表示されます。

私はさまよっていました。システムイメージリストの何が特別で、どのように作成されるので、すべての場合にアルファブレンディングをサポートしますか?私はそれを理解することはできません。サンプルコードは次のとおりです。


無効なビジュアルスタイル:

ここに画像の説明を入力してください

有効なビジュアルスタイル:

ここに画像の説明を入力してください


回避策は、ここに示すようにインターポーザークラスまたはサブクラスを使用TImageListしてオーバーライドすることですが、私が本当に知りたいのは、システムイメージリストと同じイメージリストを作成する方法です。DoDraw

注:この場合、私はそれを知ってTPngImageListいますが、使用したくありません。


編集: @Davidの答え(およびコメント)は正確でした:

ImageList_Create(v6)に明示的にリンクする必要があります。そうしないと、モジュールのロード時に暗黙的にリンクされ、v5.8にバインドされるためです。

サンプルコード(アクティベーションコンテキストAPIを使用しない):


Edi2: ActivationContextAPIを介して正しく実行される方法を示す@Davidによるサンプルコード。

0 投票する
3 に答える
13821 参照

c# - Could not find file 'Microsoft.Windows.Common-Controls, Version=6.0.0.0, Culture=*, PublicKeyToken=6595b64144ccf1df,

I'm trying to integrate this library into my application.

At first it crashed with

so I uncommented

as was recommended here.

Now the application won't compile with the following message:

Deleting app.manifest causes the app to crash, because I'm using Microsoft Ribbon.

How do I fix this error?

0 投票する
2 に答える
2754 参照

c++ - ComboBox サブクラス化リストボックス

いくつかのカスタマイズ上の理由から、リストボックスとコンボボックスの編集コントロールをサブクラス化しようとしています。以下はコード作業です。Edit Control のサブクラス化は完璧に機能していますが、Listbox は MouseDown のメッセージを受け取りません。

0 投票する
1 に答える
1667 参照

listview - 空のテキストを含む ListView の ListItems

しばらく変更されていない古い VB6 プログラムがありますが、現在は新しい動作をしています。共通コンポーネントがその下からアップグレードされたと思います。詳細はこちら。

SmallIcon モードの標準の ListView コントロールがあります。コードスニペット:

追加されるほとんどの ListItems には、SmallIcon と Caption (Text) の両方があります。TextBackground は Opaque として設定されます。つまり、テキストは色付きの四角形で囲まれてレンダリングされます。

ただし、キャプションが提供されていないアイテムや、キャプションがないようにユーザーが変更できるアイテムもあります。SmallIcon だけが表示されていれば、これは以前は問題ありませんでした。しかし、空の Text プロパティを持つ ListItem は、内部にテキストのないかなり幅の広い四角形をレンダリングします (ユーザーが一連のスペースをキー入力したかのように)。

ListItem を追加するコードは単純です。

ここでデバッガーを停止し、即時ウィンドウで次のことを実行しました。

ご覧のとおり、Text が空になるまで ListItem.Width が正しく再計算され、その後 96 ピクセルにジャンプします。

この動作を補う方法を知っている人はいますか? デフォルトの空の wdith を構成するために使用できる Windows メッセージがありますか? ListView の動作の変更に関する情報も役立つ場合があります。

0 投票する
0 に答える
1160 参照

c++ - ListView 内の項目の色を永続的に変更するにはどうすればよいですか?

リストビューを作成しました

そして、LPNMLVCUSTOMDRAW を使用してカラー アイテムを挿入します。

getcolor は関数応答 colorref です。各アイテムには独自のテキスト色があります。ただし、親ウィンドウを非表示にして再度表示すると、アイテムの色が変わります。変更しないようにする方法、またはテキストの色を設定する別の方法があります

もう1つ、この方法で新しいリストビューアイテムを作成します(誰かが必要な場合に備えて)