1

システムトレイにアイコンを表示したい。

とてもシンプルなはずですが、 を作成しHICONて描画する方法がわかりません! 「互換性のあるビットマップ」、「互換性のある DC」などのすべてのものは、私を本当に混乱させます。

アイコンを描画するにはどうすればよいですか?

4

1 に答える 1

3

あまり詳しく説明しなくても、次の C++ クラスを使用できます。

Windows Template Libraryを使用していますが、単純な C に変換するのは非常に簡単です。

using namespace WTL;
class CIconDC : public CDC
{
public:
    HBITMAP hBmpOld;

    CIconDC(int cx = GetSystemMetrics(SM_CXSMICON),  // width
            int cy = GetSystemMetrics(SM_CYSMICON),  // height
            HDC templateDC = CClientDC(NULL))  // automatically calls ReleaseDC
    {
        this->CreateCompatibleDC(templateDC);
        hBmpOld = this->SelectBitmap(CreateCompatibleBitmap(templateDC, cx, cy));
    }

    ~CIconDC() { DeleteObject(this->SelectBitmap(hBmpOld)); }

    HICON CreateIcon() const
    {
        // temporarily swap bitmaps to get handle of current bitmap
        HBITMAP hBitmap = this->GetCurrentBitmap();
        ICONINFO ii = { TRUE, 0, 0, hBitmap, hBitmap };
        return CreateIconIndirect(&ii);
    }
};

クラスの使用は非常に簡単です。

CIconDC dc;
dc.LineTo(10, 10);  // for example -- you can do whatever you want with the DC
CIcon hIcon = dc.CreateIcon();  // converted to an HICON!
于 2012-07-01T21:09:55.983 に答える