- UID
- 3558
- 积分
- 418
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-3
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2005-4-25 20:13:27
|
显示全部楼层
青蛙跳井,不懂!
说的我都累了,算了,给你看看我的接口类CPaneHook,以他为基类重写里面的三个函数就可以了;再看懂我也没办法了。
[PHP]
#ifndef __PANEMANAGER_H__
#define __PANEMANAGER_H__
// XTP面板体系与主系统挂接基础类
class CPaneHook: public CWnd
{
protected:
CPaneHook();
virtual ~CPaneHook(){ unInstall(); }
void _Install();
void unInstall();
public:
BOOL Install(CFrameWnd *pTarget);//安装面板到主系统框架
protected:
virtual BOOL OnWndMsg(UINT message,WPARAM wParam,LPARAM lParam,LRESULT* pResult);
protected:
virtual void OnCreatePane() { return; }//缺省创建面板过程实现,在派生类中重写
virtual void OnDestroyPane() { return; }//缺省销毁面板过程实现,在派生类中重写
virtual LRESULT OnPaneNotify(WPARAM,LPARAM) { return 0; }//缺省面板通告回调实现,由消息处理转换形成,在派生类中重写
protected:
CXTPDockingPaneManager* m_paneManager;//停靠面板管理器
private:
CFrameWnd* m_pTarget; //主窗口指针
BOOL m_bInstalled; //是否已安装
};
__inline CPaneHook::CPaneManager()
{
m_paneManager = NULL;
m_pTarget = NULL;
m_bInstalled = FALSE;
}
__inline BOOL CPaneHook::Install(CFrameWnd *pTarget)
{
if(m_bInstalled || pTarget==NULL || !IsWindow(pTarget->GetSafeHwnd()))
return FALSE;
m_pTarget=pTarget;
return TRUE;
}
__inline void CPaneHook::_Install()
{
if(m_pTarget==NULL)
return;
m_paneManager=new CXTPDockingPaneManager;
m_paneManager->InstallDockingPanes(m_pTarget);
OnCreatePane();//调用面板创建过程
m_paneManager->SetOwner(this);
m_bInstalled=TRUE;
}
__inline void CPaneHook::unInstall()
{
if(!m_bInstalled)
return;
CWnd *pParent=m_paneManager->GetParent();
if(pParent!=NULL && IsWindow(pParent->GetSafeHwnd()))
m_paneManager->SetOwner(pParent);
OnDestroyPane();//调用面板销毁过程
m_paneManager->DestroyAll();
m_paneManager->DestroyWindow();
delete m_paneManager;
m_paneManager=NULL;
m_pTarget=NULL;
m_bInstalled=FALSE;
}
__inline BOOL CPaneHook::OnWndMsg(UINT message,WPARAM wParam,LPARAM lParam,LRESULT *pResult)
{
if(message==WM_CREATE)
{
BOOL bOk=CWnd::OnWndMsg(message,wParam,lParam,pResult);
if(!bOk)//继续创建过程
_Install();
return bOk;
}
else if(message==WM_DESTROY)
unInstall();
else if(message==XTPWM_DOCKINGPANE_NOTIFY)
{
if(OnPaneNotify(wParam,lParam))//调用面板通告处理函数
return TRUE;
}
return CWnd::OnWndMsg(message,wParam,lParam,pResult);
}
#endif
[/PHP] |
|