class CMemDC
{
public:
CMemDC()
{
hMemDC = CreateCompatibleDC(NULL);
hBitmap = CreateCompatibleBitmap(hMemDC, 16, 16);
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); SetTextColor(hMemDC, RGB(255,0,0));
TextOut(hMemDC, 0, 0, _T("OK"), 2);
}
virtual ~CMemDC()
{
SelectObject(hMemDC, hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hMemDC);
}public:
HDC hMemDC;
HBITMAP hBitmap;protected:
HBITMAP hOldBitmap;
};class CMyDlg
{
CMemDC memDC;
};BOOL CMyDlg::OnInitDialog()
{
CStatic *pImage=(CStatic*)GetDlgItem(IDC_IMAGE);
pImage->SetBitmap(memDC.hBitmap);
}
问题是:pImage->SetBitmap(memDC.hBitmap);为什么不起效?
而且,我把CMemDC中所有代码都移入CMyDlg::OnInitDialog(),却又能看到效果。

解决方案 »

  1.   

    class CMemDC
    {
    public:
        CMemDC()
        {
            hMemDC = CreateCompatibleDC(NULL);
            hBitmap = CreateCompatibleBitmap(hMemDC, 16, 16);
            hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);        SetTextColor(hMemDC, RGB(255,0,0));
            TextOut(hMemDC, 0, 0, _T("OK"), 2);
            SelectObject(hMemDC, hOldBitmap);
        }
        virtual ~CMemDC()
        {
            
            DeleteObject(hBitmap);
            DeleteDC(hMemDC);
        }public:
        HDC hMemDC;
        HBITMAP hBitmap;protected:
        HBITMAP hOldBitmap;
    };试试