找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 423|回复: 0

[求助]:还是关于CAcUiDockControlBar类的

[复制链接]
发表于 2003-3-2 19:04:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
做个测试关于CAcUiDockControlBar类的
代码如下:
为什么我在调用test的时候是正常的,DockControlBar也出来了,也显示出文字,但只要双击DockControlBar,使它浮动,之后在双击,使它还原。这样反复几次,就会出现系统资源严重不足的情况,这是怎么回事?
<code>
///////////////////////////////////////////////////////
//                 h file
//////////////////////////////////////////////////////


class CPropertiyDlg: public CAcUiDockControlBar
//class CPropertiyDlg : public CAcUiDialogBar
{
    DECLARE_DYNAMIC(CPropertiyDlg);
// Construction
public:
        CPropertiyDlg();   // standard constructor

public:
        virtual ~CPropertiyDlg();   // standard constructor


public:
        BOOL MsgOut();
        Draw();

// Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CPropertiyDlg)
        public:
        virtual BOOL Create(CWnd*pParent, LPCSTR lpszTitle);

        protected:

        virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
        virtual void SizeChanged(CRect* lpRect,BOOL bFloating,int flags);

        //}}AFX_VIRTUAL
private:
        CFont                m_font;
        CDC                m_MemDC;
        CRect                rcClient;
        CBitmap                m_Bitmap;


        bool CanFrameworkTakeFocus() { return false;}

// Implementation
protected:

        // Generated message map functions
        //{{AFX_MSG(CPropertiyDlg)
        afx_msg void OnPaint();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()

};



///////////////////////////////////////////////////////
//              cpp file        
///////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CPropertiyDlg, CAcUiDockControlBar)


CPropertiyDlg::CPropertiyDlg() : CAcUiDockControlBar()
{
        //{{AFX_DATA_INIT(CPropertiyDlg)
                // NOTE: the ClassWizard will add member initialization here
        //}}AFX_DATA_INIT
}

CPropertiyDlg::~CPropertiyDlg()
{
        m_MemDC.DeleteDC();
}



BEGIN_MESSAGE_MAP(CPropertiyDlg, CAcUiDockControlBar)
        //{{AFX_MSG_MAP(CPropertiyDlg)
        ON_WM_PAINT()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()



BOOL CPropertiyDlg::Create(CWnd*pParent, LPCSTR lpszTitle)
{
        CClientDC dc(this);
        LOGFONT logFont;
        ZeroMemory((void*)&logFont,sizeof(logFont));
        strcpy(logFont.lfFaceName,"宋体");
        logFont.lfHeight = -12;
        logFont.lfWeight = 400;
        logFont.lfCharSet = GB2312_CHARSET;
        logFont.lfOutPrecision = 3;
        logFont.lfClipPrecision = 2;
        logFont.lfQuality = 1;
        logFont.lfPitchAndFamily = 2;
        m_font.CreateFontIndirect(&logFont);

    CString strWndClass,strWndNote;
        strWndClass = AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW));
    CRect rect (0, 0, 200, 450);

    if (!CAcUiDockControlBar::Create (strWndClass,
                                                                           lpszTitle,
                                                                           WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
                                                                           rect,
                                       pParent, 0))
        return FALSE;

        GetClientRect(rcClient);                //获取图片框大小
        m_MemDC.CreateCompatibleDC(&dc);
        m_Bitmap.CreateCompatibleBitmap(&dc,1024,1024);


        return TRUE;
}



void CPropertiyDlg::SizeChanged (CRect *lpRect, BOOL bFloating, int flags)
{

        GetClientRect(rcClient);               

        Draw();
}



BOOL CPropertiyDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
        // TODO: Add your specialized code here and/or call the base class
        //
       
        if ( wParam == 0x1234 ){//如果是m_wndTree
                AfxMessageBox("Tree!!ok!!");
        }

        return CAcUiDockControlBar::OnNotify(wParam, lParam, pResult);

}




void CPropertiyDlg::OnPaint()
{
       
        CPaintDC dc(this); // device context for painting

        if (m_MemDC.GetSafeHdc() != NULL)
        {
                dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &m_MemDC, 0, 0, SRCCOPY);
        }

        CAcUiDockControlBar::OnPaint();
}




CPropertiyDlg::Draw()
{

        GetClientRect(rcClient);               

        CClientDC dc(this);

        m_MemDC.GetSafeHdc();

        CBrush bkBrush;
        bkBrush.CreateSolidBrush(RGB(255,255,207));
        CBrush* pOldBrush = m_MemDC.SelectObject(&bkBrush);
        m_MemDC.FillRect(rcClient,&bkBrush);        //画背景

        m_MemDC.SetViewportOrg(0,0);
        m_MemDC.SetViewportExt(rcClient.right,rcClient.bottom);
        m_MemDC.SetWindowOrg(0,0);
        m_MemDC.SetWindowExt(rcClient.right,rcClient.bottom);

        CFont font;
        font.CreateFont(20, 0,0,0,FW_NORMAL, 0,0,0,
        DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
        DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "隶书");

        CFont* pOldFont = m_MemDC.SelectObject(&font);
        m_MemDC.SetBkMode(TRANSPARENT);

        m_MemDC.SetTextColor(RGB(0,255,100));
        m_MemDC.TextOut(20, 20, "HELLO");
        m_MemDC.SelectObject(&pOldFont);

        DeleteObject(bkBrush);
        DeleteObject(font);

        m_MemDC.SelectObject(m_Bitmap);
        m_MemDC.SelectObject(&pOldBrush);
        InvalidateRect(rcClient);

}



///////////////////////////////////////////////////////////////////
//           命令调用
//////////////////////////////////////////////////////////////////

void test()
{
        CPropertiyDlg *g_pShowMessage;
        CMDIFrameWnd *pAcadFrame = acedGetAcadFrame();
        if(!g_pShowMessage)
        {
                g_pShowMessage = new CPropertiyDlg;
                CAcModuleResourceOverride resOverride;
                const char dlgName[] = "测试";
                g_pShowMessage->Create(pAcadFrame, dlgName);
        g_pShowMessage->SetToolID (&clsIDControlBar);

            g_pShowMessage->EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
                g_pShowMessage->DockControlBar( AFX_IDW_DOCKBAR_RIGHT,CRect(0,0,150,200));

        } else {
        pAcadFrame->ShowControlBar (g_pShowMessage, TRUE, FALSE);
        }
        pAcadFrame->ShowControlBar (g_pShowMessage, FALSE, FALSE);

}






</code>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-20 20:32 , Processed in 0.227869 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表