一个CDockablePane模板类,使用FeaturePack里面的CDockablePane

fietiger 2010-09-03 12:50:39
一个模板类,使用FeaturePack里面的CDockablePane会简单一些。
使用方法,在MainFrame.h里面声明:
CDockableDialogPane<CXXXDialog> m_wndXXPane ;//其中CXXXDalog派生自CDialog。欢迎指正讨论!
然后就可以像其它的CDockablePane派生类一样用了。
template<class SomeDialog>
class CDockableDialogPane : public CDockablePane
{
DECLARE_DYNAMIC(CDockableDialogPane##SomeDig)
public:
void AdjustLayout(){
if (GetSafeHwnd() == NULL)
{
return;
}
CRect rectClient;
GetClientRect(rectClient);
m_wndDialog.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + 1, rectClient.Width() - 2, rectClient.Height() - 2, SWP_NOACTIVATE | SWP_NOZORDER);
};
virtual BOOL IsResizable() const { return m_bIsResizable; }
virtual void SetResizeable(bool resizeable) { m_bIsResizable = resizeable; }
CDockableDialogPane(){ m_bIsResizable = TRUE;};
virtual ~CDockableDialogPane(){};
protected:
bool m_bIsResizable;
// CViewTree m_wndFileView;
SomeDialog m_wndDialog;
protected:
virtual const AFX_MSGMAP* GetMessageMap() const
{ return GetThisMessageMap(); } ;
static const AFX_MSGMAP* PASCAL GetThisMessageMap()
{
typedef CDockableDialogPane<SomeDialog> ThisClass;
typedef CDockablePane TheBaseClass;
static const AFX_MSGMAP_ENTRY _messageEntries[] =
{ ON_WM_CREATE()
ON_WM_SETFOCUS()
ON_WM_PAINT()
ON_WM_SIZE()
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
};
static const AFX_MSGMAP messageMap =
{ &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };
return &messageMap;
};
public:
virtual afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CRect rectDummy;
rectDummy.SetRectEmpty();
// 创建视图:
const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
// if (!m_wndFileView.Create(dwViewStyle, rectDummy, this, 4))
// {
// TRACE0("未能创建文件视图\n");
// return -1; // 未能创建
// }
if (!m_wndDialog.Create(SomeDialog::IDD, this))
{
TRACE("未能创建文件视图\n");
return -1; // 未能创建
}
return 0;
};
virtual afx_msg void OnSetFocus(CWnd* pOldWnd)
{
CDockablePane::OnSetFocus(pOldWnd);
// m_wndFileView.SetFocus();
m_wndDialog.SetFocus();
// TODO: Add your message handler code here
};
virtual afx_msg void OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CDockablePane::OnPaint() for painting messages
CRect rectTree;
// m_wndFileView.GetWindowRect(rectTree);
m_wndDialog.GetWindowRect(rectTree);
ScreenToClient(rectTree);
rectTree.InflateRect(1, 1);
dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW));
};
virtual afx_msg void OnSize(UINT nType, int cx, int cy)
{
if (!m_bIsResizable)
{
return ;
}
CDockablePane::OnSize(nType, 300, 180);
// TODO: Add your message handler code here
AdjustLayout();
m_wndDialog.SendMessage(WM_SIZE,0,0);
//m_bIsResizable = FALSE;
};
};
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-09-29
  • 打赏
  • 举报
回复
分享帖?
向立天 2010-09-29
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
悟迟 2010-09-03
  • 打赏
  • 举报
回复
学习了,
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧