关于void CMainFrame::OnSize(UINT nType, int cx, int cy) 的使用?

保保亲水 2011-11-11 11:28:38
对这条语句不是很明白,请懂得的大侠给介绍一下。。。
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
HWND hWnd1 = m_wndSplitter1.GetSafeHwnd();
HWND hWnd2 = m_wndSplitter2.GetSafeHwnd();
HWND hWnd3 = m_wndSplitter3.GetSafeHwnd();
if( hWnd1 == NULL || !::IsWindow( hWnd1 ) ||
hWnd2 == NULL || !::IsWindow( hWnd2 )||
hWnd3 == NULL || !::IsWindow( hWnd3 ))
{
return;
}

// Resize each row of the second splitter
int cxCur, cxMin;
m_wndSplitter1.GetColumnInfo( 0, cxCur, cxMin ); [color=#FF0000]//这里什么意思????
m_wndSplitter1.SetColumnInfo( 0,450, cxMin );[/color] //这里什么意思???450是什么意思???

int cyCur, cyMin;
m_wndSplitter2.GetRowInfo( 0, cyCur, cyMin );
m_wndSplitter2.SetRowInfo( 0,300, cyMin ); //这里的300呢?

int czCur, czMin;
m_wndSplitter3.GetRowInfo( 0, czCur, czMin );
m_wndSplitter3.SetRowInfo( 0, 200, czMin );

//为什么会有 int cxCur, cxMin;int cyCur, cyMin;int czCur, czMin; 呢?这里的x,y,z是自己随意定义的吗?

// Ask each splitter to recalculate its layout
m_wndSplitter1.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();

m_wndSplitter1.SetActivePane( 0, 0, NULL ); //激活一个窗口 //为什么会有这句呢???
m_wndSplitter1.SetLock( TRUE ); //锁定分割器窗口
m_wndSplitter2.SetLock( TRUE ); //锁定分割器窗口
m_wndSplitter3.SetLock( TRUE ); //锁定分割器窗口
}

请给讲讲,谢谢了。。。
...全文
634 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
保保亲水 2011-11-16
  • 打赏
  • 举报
回复
谢谢楼上,现在已经搞定了,明白了OnSize的使用方法啦。。。
bazzi2011 2011-11-11
  • 打赏
  • 举报
回复
CSplitterWnd类提供一个分隔器窗口的功能,就是一个窗口中间有个分杠,类似于注册表那样,左面目录,右面详解。

========================================================

int cxCur, cxMin;
m_wndSplitter1.GetColumnInfo( 0, cxCur, cxMin ); 这里什么意思????


获取指定列的信息
具体参考下面说明


CSplitterWnd::GetColumnInfo
void GetColumnInfo( int col, int& cxCur, int& cxMin );

参数: col 指定一列。
cxCur 一个要用来设置列的当前宽度的int的引用。
cxMin 一个要用来设置列的当前最小宽度的int的引用。

说明:此成员函数用来获取指定列的信息。

========================================================

m_wndSplitter1.SetColumnInfo( 0,450, cxMin ); //这里什么意思???450是什么意思???[/color]

第二个参数是分隔器窗口列的理想宽度,你也可以改成其他数值。

函数具体意思参考下面说明

CSplitterWnd::SetColumnInfo
void SetColumnInfo( int col, int cxIdeal, int cxMin );

参数: col 指定一个分隔器窗口列。
cxIdeal 指定分隔器窗口列的以像素表示的理想宽度。
cxMin 指定分隔器窗口列以像素表示的最小宽度。

说明:
此成员函数用来设置一列的新的最小宽度和理想宽度。列的最小值确定了什么时候列将太小以至于不能被完全显示。
当框架显示分隔器窗口时,它从分隔器窗口的客户区的左上角至右下角,根据窗格的理想尺寸按行和列来排放各个窗格。

========================================================

m_wndSplitter2.SetRowInfo( 0,300, cyMin ); //这里的300呢?

第二个参数是高度,你也可是随便改成其他数值。


函数具体意思参考下面说明

CSplitterWnd::SetRowInfo

void SetRowInfo( int row, int cyIdeal, int cyMin );

参数: row 指定一个分隔器窗口行。
cyIdeal 指定分隔器窗口行的以像素表示的理想高度。
cyMin 指定分隔器窗口行以像素表示的最小高度。

说明:
此成员函数用来设置一行的新的最小高度和理想高度。行的最小值确定了什么时候行将太小以至于不能被完全显示。
当框架显示分隔器窗口时,它从分隔器窗口的客户区的左上角至右下角,根据窗格的理想尺寸按行和列来排放各个窗格。

========================================================
//为什么会有 int cxCur, cxMin;int cyCur, cyMin;int czCur, czMin; 呢?这里的x,y,z是自己随意定义的吗?

是的,是自己定义的,作为类函数的SetRowInfo参数调用,数值设定一个范围。
========================================================

m_wndSplitter1.SetActivePane( 0, 0, NULL ); //激活一个窗口 //为什么会有这句呢???

设置一个活动窗格,就是你能够用鼠标拖动那个屏幕的分隔符,使左右两边的分割宽度改变,你可以去试下拖动注册表的分割框试试。

函数具体意思参考下面说明

CSplitterWnd::SetActivePane

virtual void SetActivePane( int row, int col, CWnd* pWnd = NULL );

参数: row 如果pWnd是NULL,则此参数指定将要被激活的窗格中的行。
col 如果pWnd是NULL,则此参数指定将要被激活的窗格中的列。
pWnd 一个指向CWnd对象的指针。如果是NULL,则由row和col指定的窗格被置为活动窗格。如果不是NULL,则它指定了要被激活的窗格。

说明:
当用户将焦点改变到框架窗口中的某一个窗格时,框架调用此成员函数来设置一个活动窗格。你可以显式地调用SetActivePane来将焦点改变到指定的视。可以通过提供行和列,或pWnd来指定窗格。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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