2009-04-15 9 views
0

VistaでListviewコントロールで問題が発生しています。特に、ヘッダーにカスタムアイコンを設定しています。私は(C++で)アイコンを追加した場合、通常XPまたはWindowsの以前のバージョンのいずれかの下で、私は次のようにそれを行うことができます:その後、VistaでListviewヘッダーイメージを消去する

HeaderItem.mask  = HDI_FORMAT | HDI_IMAGE; 
Header_GetItem(HeaderHWND, Column, &HeaderItem); 

TurnOn(HeaderItem.fmt, HDF_IMAGE); 
HeaderItem.iImage = Image; 
if (Header_SetItem(HeaderHWND, Column, &HeaderItem) == 0) 
    printf("Failed to set header [%d:%.8X]\n", GetLastError(), GetLastError()); 

および特定の列に、画像を削除するには、I同じプロセスを使用できますが、HDF_IMAGEビットをオンにする代わりに、単にオフにしてください。

しかし、私がそれをオフにすると、実際には変更を受け入れていないようです。ですから、例えば、私は私のFMTを起動したときです:

0x4000の(または基本的にHDF_STRING)

私はアイコンをオンにし、それは次のようになります。

0x5800(または基本的にはHDF_STRING | HDF_IMAGE | HDF_BITMAP_ON_RIGHT)

私は再びそれをオフにし、その結果は次のとおりです。

0x4800(または基本的にHDF_STRING | HDF_IMAGE)

私はチェックして、それをHDF_STRINGだけに設定しましたが、一度HDF_IMAGEが設定されると、削除することは不可能に思えます。 Header_SetImageはエラーを返さないので、私は何をすべきかまで迷っています。私はまた、コントロールからImagelistを削除しようとしましたが、そこにまだ画像があるかのようにスペースを残しています。

最後にアイコンを追加したり削除したりする必要があります。アイコンが削除されると、すべてのヘッダースペースが再度利用可能になります(表示される前の状態です)。大歓迎! - 事前のおかげで

答えて

1

ドキュメントhttp://msdn.microsoft.com/en-us/library/bb775247(VS.85).aspxを読んだら、HDI_IMAGEをマスクに指定すると、iImageが有効なインデックスである必要があります。削除するには、I_IMAGENONEに設定する必要があります。

あなたはこのような何かをしなければならない画像remveしたい場合:

HeaderItem.mask = HDI_FORMAT | HDI_IMAGE; 
Header_GetItem(HeaderHWND, Column, &HeaderItem); 
HeaderItem.fmt &= ~(HDF_IMAGE | HDF_BITMAP_ON_RIGHT); 
HeaderItem.iImage = I_IMAGENONE; 
Header_SetItem(HeaderHWND, Column, &HeaderItem); 
+0

をはい、私は彼らのオンラインドキュメントにいることを確認 - VS2005にドキュメント(彼らは言及していないことを反映するものではありませんI_IMAGENONE)。私の不満は、あなたがiImageを設定しているかどうかにかかわらず、それが以前に働いていたこと、そしてそれが黙って失敗したことです。少なくとも今は2つの選択肢があります - ありがとう! :) – Mark

0

UHGは、私はちょうどそれを考え出した - 彼らは少し物事は限り渡されたパラメータとして、今作業方法を変更したとき、私、私は常に0にiImageを設定

、前に。 HDF_IMAGE属性を削除していましたが、Setを実行し、マスクにHDI_IMAGEが含まれている場合、明示的に行ってもHDF_IMAGEビットは削除されません。

解決策は、削除しようとしている場合は画像関連のものを送信しないようにすることです。私はネットを磨き、これについて何も見つけられなかったので、このポストは似たような問題を抱えている人を助けることを願っています。