基于对话框的工程OnPaint()函数里:
m_StatBar = new CStatusBarCtrl; // 在头文件定义:CStatusBarCtrl* m_StatBar;
CRect m_Rect;
GetClientRect(&m_Rect);
m_Rect.top=m_Rect.bottom-20; //
if(!m_StatBar->m_hWnd)
{
m_StatBar->Create(WS_BORDER|WS_VISIBLE,m_Rect,this,3); //创建状态栏
int nParts[4]={100,200,300,-1};
m_StatBar->SetParts(4,nParts);
m_StatBar->SetText(_T("这是第一个指示器"),0,0);
m_StatBar->SetText(_T("这是第二个指示器"),1,0);
//m_StatBar->ShowWindow(SW_SHOW);
}
else
{
m_StatBar->MoveWindow(&m_Rect,false);//如果已创建,就把状态栏移到新位置
}
运行时可以看到状态栏,但是拉动改变主对话框的大小时,
会显示出以前的状态栏(即看到很多状态栏),不知我这样表达,大家是否可以理解我的意思
对于这种情况,怎么解决啊???
m_StatBar = new CStatusBarCtrl; // 在头文件定义:CStatusBarCtrl* m_StatBar;
CRect m_Rect;
GetClientRect(&m_Rect);
m_Rect.top=m_Rect.bottom-20; //
if(!m_StatBar->m_hWnd)
{
m_StatBar->Create(WS_BORDER|WS_VISIBLE,m_Rect,this,3); //创建状态栏
int nParts[4]={100,200,300,-1};
m_StatBar->SetParts(4,nParts);
m_StatBar->SetText(_T("这是第一个指示器"),0,0);
m_StatBar->SetText(_T("这是第二个指示器"),1,0);
//m_StatBar->ShowWindow(SW_SHOW);
}
else
{
m_StatBar->MoveWindow(&m_Rect,false);//如果已创建,就把状态栏移到新位置
}
运行时可以看到状态栏,但是拉动改变主对话框的大小时,
会显示出以前的状态栏(即看到很多状态栏),不知我这样表达,大家是否可以理解我的意思
对于这种情况,怎么解决啊???
OnSize(UINT nType, int cx, int cy)
{
// 对话框宽度和高度的增量
int iIncrementX = cx - m_iClientWidth; //m_iClientWidth:对话框原宽度
int iIncrementY = cy - m_iClientHeight;//m_iClientHeight:对话框原高度 CRect rectSta;
m_StatusBar.GetWindowRect(rectSta);
ScreenToClient(rectSta);
int iLeft = rectSta.left;
int iTop = rectSta.top;
int iWidth = rectSta.Width();
int iHeight = rectSta.Height();
iTop+=iIncrementY; //相应增加
iWidth+=iIncrementX; //宽度,随着对话框相应增加
m_StatusBar.MoveWindow(iLeft, iTop, iWidth, iHeight);
}问题:拉动主对话框,只改变宽度时,可以显示出状态栏,而只改变高度时(高度和宽度都改变时),状态栏就消失了,是不是这代码 iTop+=iIncrementY; 不对??
解决问题就结贴
{
// ... // 在类头文件中有声明 CStatusBarCtrl m_wndStatusBar;
m_wndStatusBar.Create(WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP,
CRect(0, 0, 0, 0), this, 5000);
int nParts[4] = {100, 200, 300, -1};
m_wndStatusBar.SetParts(4, nParts);
m_wndStatusBar.SetText(_T("这是第一个指示器"), 0, 0);
m_wndStatusBar.SetText(_T("这是第二个指示器"), 1, 0); // ...
}void CTestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy); if (IsWindow(m_wndStatusBar.GetSafeHwnd()))
{
m_wndStatusBar.MoveWindow(0, 0, cx, cy);
}
}