Re: update status in main frame window
Issue resolved. Thanks.
On Dec 4, 12:04 am, "AliR \(VC++ MVP\)" <A...@online.nospam> wrote:
The OnUpdatePage gets called automatically when the item ID_INDICATOR_TES=
T
needs to update its display, you can't call it directly.
What I was proposing was to send a custom message from your dialog to you=
r
main frame and in the handler of the custom message set the text of the
status bar panel.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
...
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TEST, OnUpdatePage)
ON_MESSAGE(UWM_UPDATESTATUS,OnUpdateStatus) //per joes suggestion
END_MESSAGE_MAP()
//you can define UWM_UPDATESTATUS using #define or using
RegisterWindowMessage
//if you use a registered window message then you will need to use
//ON_REGISTERED_MESSAGE instead of ON_MESSAGE
void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI)
{
pCmdUI->Enable(m_bEnabled);
}
LRESULT CMainFrame::OnUpdateStatus(WPARAM wParam,LPARAM lParam)
{
m_wndStatusBar.SetPanelText(wParam,(LPCTSTR)lParam);
}
/in your button handler
void CMyDialog::ButtonHandler()
{
AfxGetMainWnd()->SendMessage(UWM_UPDATESTATUS,1,(LPARAM)"This is =
a
test");
}
Just a side note, In your OnUpdatePage you were calling Enable without an=
y
parameter. That really doesn't do much unless you don't have a handler=
for
the item id in your active view or the frame. Typically when someone
handles the Update UI message of a menu item they have a flag that indica=
tes
whether the item should be enabled or not (unless of course they want to
turn it on all the time when don't have a ON_COMMAND entry for that menu
item).
AliR.
<aloha...@gmail.com> wrote in message
news:9a20249e-ff68-43e5-b453-7bb3f0824bb5@e1g2000pra.googlegroups.com...
Thanks AIR.
I followed the MSDN documentation
msdn.microsoft.com/en-us/library/a9ys3wsb.aspx
, and I created a handler
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
...
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TEST, OnUpdatePage)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CONNECTSTATUS,
};
void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
CString strPage;
strPage.Format(_T("TEST1)"));
pCmdUI->SetText(strPage);
}
Then in my child dialog, how can I call this handler to replace TEST1
with TEST2 at the status pane ?
in child function, I set
CMainFrame *pMain = (CMainFrame*) AfxGetMainWnd();
pMain->OnUpdatePage ...?
Thanks.
Regards,
Kenji
On Dec 3, 1:54 am, "AliR \(VC++ MVP\)" <A...@online.nospam> wrote:
1. WM_SETSTATUS is an example of a custom message. You will have to def=
ine
it somewhere. (I typically put them in a file called messages.h)
#define WM_SETSTATUS WM_APP+1
Then you need to put a handler for WM_SETSTATUS in your CMainFrame wind=
ow
and there do the m_wndStatusBar.SetPaneText
2. You will accomplish this the same way you change the status window
text.
You tell the main frame which menu to disable, and it has to keep track=
of
this information and when the OnUpdateUI handler of the menu item is
called
you are able to disable it there. If you have any questions on how the
ON_UPDATE_COMMAND_UI works let me know.
AliR.
<aloha...@gmail.com> wrote in message
news:17302485-3f24-4ad6-9534-1e1e272c4e98@u18g2000pro.googlegroups.com..=
..
Hi,
1. ok. I used the AfxGetMainWnd()->SendMessage(WM_SETSTATUS,0,pStr);
but I got:
error C2065: 'WM_SETSTATUS' : undeclared identifier
how to declare it ?
2. One more thing is how can I SendMessage to disable certain menu in
main frame window ?
Many thank to your kind help.
Regards.
On Dec 3, 1:21 am, "AliR \(VC++ MVP\)" <A...@online.nospam> wrote:
There are several ways.
From you button handler you can either do this:
CMainFrame *pWnd = (CMainFrame *)AfxGetMainWnd();
ASSERT(pWnd);
pWnd->GetStatusBar().SetPaneText(0,"Test 123");
note that you need to write a method for GetStatusBar in your CMainFr=
ame
class
CStatusBar &GetStatusBar();
Or you can send a message to the main window
AfxGetMainWnd()->SendMessage(WM_SETSTATUS,0,pStr);
AliR.
<aloha...@gmail.com> wrote in message
news:66d2d089-60c1-453a-8f4e-c0e052ad0e71@z6g2000pre.googlegroups.com.=
...
Hi Expert,
I'm using SDI application
In Mainfrm.cpp, i have
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_TEST,
};
I added a child dialog with one test button on it.
The child dialog is triggered via menu in main frame windows. the
class of child dialog is CDialog base.
class CChildDlg : public CDialog
{
public:
CChildDlg();
...
}
void CMainApp::OnEditDialog()
{
CChildDlg childDlg;
childDlg.DoModal();
}
void CChildDlg::OnBtnTest()
{
// how can I update the status bar in main frame windows ?
// the following code will trigger exception...!!!
CStatusBar m_wndStatusBar;
m_wndStatusBar.CommandToIndex(ID_INDICATOR_TEST);
m_wndStatusBar.SetPaneText(0, "TEST 123", TRUE);
m_wndStatusBar.UpdateWindow();
}
How can I update the status bar in main frame windows, upon clickin=
g
Test button.
Thanks in advance.
Regards,
Kenji