我如何画一个HICON?

时间:2012-07-01 21:09:55

标签: c++ c winapi visual-c++ icons

我想在系统托盘中显示一个图标。

它似乎应该如此简单,但我无法弄清楚如何创建HICON并绘制它!所有“兼容的位图”,“兼容的DC”等等都让我很困惑。

如何绘制图标?

1 个答案:

答案 0 :(得分: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!