yangzhi070:存在一个不足:显示"panal"的边框和背景色且未最小化时,当覆盖桌面的其它最大化窗口退出最大化让它显示出来的时候,"panel"的边框和背景不会同时显示。
可在CDynamicLayout类添加声明:
static UINT WhenPaint(LPVOID lParam);
实现:
UINT CDynamicLayout::WhenPaint(LPVOID lParam)
{
CDynamicLayout* pThis = (CDynamicLayout*)lParam;
Sleep(2);//释放CPU
pThis->m_pMainPanel->Draw();
return 0;
}
然后更改void CDynamicLayout::OnPaint()的实现为:
void CDynamicLayout::OnPaint()
{
//m_pMainPanel->Draw( );
AfxBeginThread( WhenPaint, this );
}
问题是在WindowProc内获取和处理对话框消息顺序引起的。如果让对话框先响应WM_PAINT消息,然后CDynamicLayout类再捕获和处理WM_PAINT消息,问题即可解决。上面用启动一个新的线程的方法来改变响应顺序,希望大家提出更好的解决办法。
(发表于2007-11-27 22:04:00)
xiexianyong380:该项目写的很是不错但有一个不足,存在着内存泄露 !
(发表于2007-12-13 16:30:00)
tiandongdong001:for yangzhi070,using Visual Leak Detector,modify it as below:
CDynamicLayout::~CDynamicLayout()
{
if( m_pMainPanel != NULL )
delete m_pMainPanel;
//below is added ,CLayoutSplit* pLS must be ~()ed.
POSITION pos;
void* pLP; void* pLS;
for( pos = m_mapSplit.GetStartPosition(); pos != NULL; )
{m_mapSplit.GetNextAssoc( pos, pLP , pLS );
delete pLS;}//CLayoutSplit* pLS is del.
}
(发表于2007-12-19 22:36:00)
tiandongdong001:代码写得很好啊,学习中。下面写的是内存泄漏解决,调用CLayoutSplit析构即可。
(发表于2007-12-19 22:40:00)
yangzhi070:谢谢大家的支持
动态分配的CLayoutSplit应该是释放了的。
内存分配是在CLayoutPanel::GetSplit()里,
析构过程在CLayoutPanel::~CLayoutPanel()里最终调用了CLayoutPanel::ClearSplit(),释放内存。
(发表于2007-12-21 12:38:00)
yangzhi070:应该在CLayoutPanelFrame::~CLayoutPanelFrame()内调用Clear();
多谢大家提醒
(发表于2007-12-21 12:47:00)
boxman:非常不错
(发表于2007-12-21 16:30:00)
yangzhi070:有点被弄晕了,居然同意了“内存泄漏”的观点。请大家仔细看代码里的CLayoutPanel::~CLayoutPanel().
(发表于2007-12-30 11:46:00)
rbagglo:我解压后编译出现了个问题想请教:
--------------------Configuration: DynamicLayoutTest - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1104: cannot open file "..\lib\DynamicLayout.lib"
Error executing link.exe.
DynamicLayoutTest.exe - 1 error(s), 0 warning(s)
(发表于2008-3-6 23:51:00)
lyd_253261362:本程序有两个项目,其中一个项目(DynamicLayout.dsw)是用来生成,DynamicLayout.lib
另一个项目(DynamicLayoutTest.dsw)调用上面的DynamicLayout.lib。
由于没有生成DynamicLayout.lib所以提示错误啊。
评价一下:代码是写的不错的。
(发表于2008-3-18 17:45:00)
JamesBond:谢谢这么好的例子,我下载后,将界面修改为:
左 右
右边分两行:右上,右下
右上再分两行:右上上,右上下
这种格式,
基本上就是左边一个控件
右边上下三个控件
但是拖动的时候控件的大小不改变,光背景改变,怎么回事呢?
(发表于2008-4-17 11:15:00)
JamesBond:好了,使用起来,0,1,1,1的还得好好捉摸捉摸呢
(发表于2008-4-17 11:40:00)
..........................................................................
--------------------next---------------------