how to resize statusbar automatically in MFC

I have written one program in VC++ using MFC. In this program I have created statusbar using Create() function and I have divided that statusbar in three equal parts. I have put this Create() function in another used defined function named Initstatusbar() and called it from the constructor of my window class. Then, during run time when I resize my window, status bar doesn’t resize automatically. Then, I have tried to resize it manually by making a call to Initstatusbar() from  the OnSize() message handler. But still it doesn’t resize.
Can you pl.help me.
jyotiwebAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

AndyAinscowFreelance programmer / ConsultantCommented:
In the onsize you need to set the pane size of each of the three panes individually

eg.
UINT nStyle = m_statusBar.GetPaneStyle(0);
m_statusBar.SetPaneInfo(0, ID_PANE1, nStyle, cx);  where cx is the new width you require

From the help files.

CStatusBar::SetPaneInfo
void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWidth );

Parameters

nIndex

Index of the indicator pane whose style is to be set.

nID

New ID for the indicator pane.

nStyle

New style for the indicator pane.

cxWidth

New width for the indicator pane.

0
vijay_visanaCommented:
try
WM_SIZEPARENT
message
0
jyotiwebAuthor Commented:
I have tried your solution. But statusbar is not displayed when I run my program even though value returned by Create() function is nonzero.

UINT a[3];
UINT *aa;
CstatusBar sb;
void CMainWin::Initstatusbar()
{
      a[0]=ID_ONE;
      a[1]=ID_TWO;
      a[2]=ID_THREE;
        aa=a;

      sb.Create(this,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,ID D_STATUS);
      sb.SetIndicators(aa,3);

}

For above coding I have also created String Table control.

Also tell me how to do same thing using CstatusBarCtrl class because it doesn’t consist of SetPaneInfo() function.
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

vijay_visanaCommented:
BOOL CStatusBarCtrl::SetText( LPCTSTR lpszText, int nPane, int nType );
use this function

here

nType

Type of drawing operation. It can be one of these values:

0   The text is drawn with a border to appear lower than the plane of the status bar.


SBT_NOBORDERS   The text is drawn without borders.


SBT_OWNERDRAW   The text is drawn by the parent window.


SBT_POPOUT   The text is drawn with a border to appear higher than the plane of the status bar.


where
BOOL CStatusBarCtrl::SetParts( int nParts, int* pWidths );
will let you set width of each part

Threre are other interesting function too
like
GetTipText: Retrieves the tooltip text for a pane in a status bar.  
SetTipText: Sets the tooltip text for a pane in a status bar.
SetBkColor: Sets the background color in a status bar.
SetIcon: Sets the icon for a pane in a status bar.  

good luck
vijay




0
AndyAinscowFreelance programmer / ConsultantCommented:
I have written one program in VC++ using MFC. In this program I have created statusbar using Create() function and I have divided that statusbar in three equal parts. I have put this Create() function in another used defined function named Initstatusbar() and called it from the constructor of my window class. Then, during run time when I resize my window, status bar doesn’t resize automatically. Then, I have tried to resize it manually by making a call to Initstatusbar() from  the OnSize() message handler. But still it doesn’t resize.


Call your Initstatusbar from the OnCreate NOT the constructor.
Use the SetParts member fn if you are using a CStatusBarCtrl to set the widths of the panes when resizing.

eg.
const int nParts = 4;
CRect rect;

m_wndStatusBarCtrl.GetClientRect(&rect);
int widths[nParts] = { rect.right-300, rect.right-200, rect.right-100, -1 };

VERIFY( m_wndStatusBarCtrl.SetParts(nParts, widths) );

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
AndyAinscowFreelance programmer / ConsultantCommented:
My comment would be a way to achieve the desired effect
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.