如何改变CSplitterWnd的大小
2008-01-27 16:01
387 查看
如何改变CSplitterWnd的大小
今天在写一个程序,界面中我使用CSplitterWnd将窗口分为上下两个窗口,但是在程序缩放、最大化时,放大和缩小的都是分割条下面的窗口,可我需要的是放大缩小分割条上面的窗口。
我截获了CChildFrame的WM_SIZE消息,在这里重新计算分割条两个窗口的大小,使分割条下面的窗口高度保持不变。在运行时发现,随着应用程序的缩放,下面的窗口变的越来越大,研究后发现是计算时没有减去分割条的高度,所以导致每次缩放都有一个误差。知道原因后,解决就比较简单了。
首先,在OnSize中,保存当前窗户区的大小,然后比较上次保存的大小,得到x,y轴上的偏移,将分割条上面的窗口高度加上偏移量即可。代码如下所示:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
if ( m_hSplitterWnd.GetSafeHwnd() != NULL && m_bIsViewCreated )
{
int y = cy - m_sizeClient.cy;
int nHeight0, nMinHeight0;
int nHeight1, nMinHeight1;
m_hSplitterWnd.GetRowInfo( 0, nHeight0, nMinHeight0 );
m_hSplitterWnd.GetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.SetRowInfo( 0, nHeight0 + y, nMinHeight0 );
m_hSplitterWnd.SetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.RecalcLayout();
}
m_sizeClient.cx = cx;
m_sizeClient.cy = cy;
}
今天在写一个程序,界面中我使用CSplitterWnd将窗口分为上下两个窗口,但是在程序缩放、最大化时,放大和缩小的都是分割条下面的窗口,可我需要的是放大缩小分割条上面的窗口。
我截获了CChildFrame的WM_SIZE消息,在这里重新计算分割条两个窗口的大小,使分割条下面的窗口高度保持不变。在运行时发现,随着应用程序的缩放,下面的窗口变的越来越大,研究后发现是计算时没有减去分割条的高度,所以导致每次缩放都有一个误差。知道原因后,解决就比较简单了。
首先,在OnSize中,保存当前窗户区的大小,然后比较上次保存的大小,得到x,y轴上的偏移,将分割条上面的窗口高度加上偏移量即可。代码如下所示:
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
if ( m_hSplitterWnd.GetSafeHwnd() != NULL && m_bIsViewCreated )
{
int y = cy - m_sizeClient.cy;
int nHeight0, nMinHeight0;
int nHeight1, nMinHeight1;
m_hSplitterWnd.GetRowInfo( 0, nHeight0, nMinHeight0 );
m_hSplitterWnd.GetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.SetRowInfo( 0, nHeight0 + y, nMinHeight0 );
m_hSplitterWnd.SetRowInfo( 1, nHeight1, nMinHeight1 );
m_hSplitterWnd.RecalcLayout();
}
m_sizeClient.cx = cx;
m_sizeClient.cy = cy;
}
相关文章推荐
- 【CSplitterWnd技巧二】使分割窗口不能改变大小
- 【CSplitterWnd技巧一】改变分割窗口拖动条的大小
- 【CSplitterWnd技巧二】使分割窗口不能改变大小
- 【CSplitterWnd技巧一】改变分割窗口拖动条的大小
- 【CSplitterWnd技巧二】使分割窗口不能改变大小
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- vc6.0不用鼠标拖动CSplitterWnd的分割条,用代码改变分割窗口
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用CSplitterWnd和重绘窗口大小时发生的问题
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 总算解决如何在view上应用CSplitterWnd来切分窗口
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 如何使用css自动使得图片自己改变大小
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- 关于自定义分割窗口类(派生于CSplitterWnd)遇到的问题
- winform中,如何控制控件位置随窗体的大小改变而改变
- 使用CSplitterWnd实现拆分窗口(多视图显示)
- eclipse的注释字体大小如何修改?不改变代码的字体