怎么很多功能不能使用?例如SetIcon, SetCursor等.

解决方案 »

  1.   

    我从CWnd派生一个类CPanel,现在我想让CPanel能显示超链接方式的文字,
    // Panel.h: interface for the CPanel class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_PANEL_H__E6AA09E1_2766_4B3A_B9F4_ACF7EAC14116__INCLUDED_)
    #define AFX_PANEL_H__E6AA09E1_2766_4B3A_B9F4_ACF7EAC14116__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class CPanel : public CWnd  
    {
    DECLARE_DYNAMIC(CPanel)
    public:
    CPanel();
    virtual ~CPanel();
    public:
    BOOL Create(const CRect &rect, CWnd *pParent, UINT nID, DWORD dwStyle=WS_CHILD|WS_VISIBLE);
    void SetBkColor(COLORREF crBack); // 设置背景色
    void SetBkBitmap(UINT nID); // 设置背景位图
    protected:
    void OnPaint();
    DECLARE_MESSAGE_MAP()
    private:
    COLORREF m_bkColor;
    CBitmap m_bmpBackground;
    CString m_strTip;
    };#endif // !defined(AFX_PANEL_H__E6AA09E1_2766_4B3A_B9F4_ACF7EAC14116__INCLUDED_)
      

  2.   

    // Panel.cpp: implementation of the CPanel class.
    //
    //////////////////////////////////////////////////////////////////////#include "stdafx.h"
    #include "Phone.h"
    #include "Panel.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    IMPLEMENT_DYNAMIC(CPanel, CWnd)
    BEGIN_MESSAGE_MAP(CPanel, CWnd)
    //{{AFX_MSG_MAP(CPanel)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    CPanel::CPanel()
    {
    m_bkColor = RGB(0, 0, 0);
    m_bmpBackground.m_hObject = NULL;
    m_strTip = "";}CPanel::~CPanel()
    {}BOOL CPanel::Create(const CRect &rect, CWnd *pParent, UINT nID, DWORD dwStyle)
    {
    CString className = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, AfxGetApp()->LoadStandardCursor(IDC_ARROW));
    BOOL bRet = CWnd::Create(className, "", dwStyle, rect, pParent, nID);
    if( !bRet )
    return FALSE; return TRUE;
    }void CPanel::OnPaint()
    {
    CPaintDC dc(this); // device context for painting

        // TODO: Add your message handler code here
        CRect rectClient(0,0,0,0);
        dc.GetClipBox(rectClient);
        rectClient.NormalizeRect();
        if (rectClient.IsRectEmpty())
        {
            return;
        }    GetClientRect(rectClient);
        CBrush brush;
        brush.CreateSolidBrush(m_bkColor);
        dc.FillRect(rectClient, &brush);
        brush.DeleteObject(); if(m_bmpBackground.m_hObject != NULL)
    {
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    CBitmap *oldBmp = memDC.SelectObject(&m_bmpBackground);
    BITMAP bm;
    m_bmpBackground.GetBitmap(&bm);
    dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(oldBmp);
    memDC.DeleteDC();
    }

    CPen pen;
    pen.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
    CPen *oldPen = dc.SelectObject(&pen);
    int OldMode = dc.SetBkMode(TRANSPARENT);
    dc.DrawText("你好!", 4, rectClient, DT_CALCRECT); 
    dc.SetBkMode(OldMode);
    dc.SelectObject(oldPen);
    }
    void CPanel::SetBkColor(COLORREF crBack)
    {
    m_bkColor = crBack;
    }
    void CPanel::SetBkBitmap(UINT nID)
    {
    m_bmpBackground.LoadBitmap(nID);
    }