|
uh-oh... I'm a newbie.
What I meant is that from a CDocument class function I
want to change the status bar first pane text.
How can I write status bar from there?
I don't have inside CDOcument class the address of the CFrameWnd
class object to use CFrameWnd::SetMessageText.
|
|
|
|
|
Use this:
static_cast<CFrameWnd *>(AfxGetMainWnd())->SetMessageText("I'm on status bar now");
Keep in mind that this changes the status bar text until next idle update UI cycle is executed. Do you want to change this text permantently?
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
Still baffled...
I added the code, no effect.
I want to show on the status bar when the data was last time
saved successfully. Now it just shows the date & time once,
when CFrameWnd is created. CDocument object function
should be able to update the information permanently.
|
|
|
|
|
Anonymous wrote:
I want to show on the status bar when the data was last time
saved successfully
Instead of standard 'Ready' message, right? If this is the case, override CFrameWnd::GetMessageString:
void CMainFrame::GetMessageString(UINT nID, CString & rMessage) const
{
if (AFX_IDS_IDLEMESSAGE == nID)
{
rMessage = "I'm on status bar";
return;
}
CMDIFrameWnd::GetMessageString(nID, rMessage);
}
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
|
The link is a dead end...? Or is it just my Netscape Navigator 4.75?
|
|
|
|
|
Use ((CFrameWnd*) AfxGetMainWnd())->SetMessageText("...");
|
|
|
|
|
I take that you're able to create a status bar in MainFrame (including setting pane # and size). Once outside of MainFrame, youneed to get a pointer to it to modify the status bar remotely.
#include "MainFrm.h"//or equivalent .h
.
.
.
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;//pointer to mainframe object
.
.
.
pFrame->UpdateStatus(1, "1st panel message...");//and so on
ralf.riedel@usm.edu
|
|
|
|
|
Aaaahh... I'm a moron (but not moron enough not to write under anonymous
1st: status bar has this default feature to show "ready" or tooltip on it. I forgot that.
I had made my own simple status bar, and I mixed on the way SetMessageText
and SetPaneText.
2nd: I couldn't get my hands on the CMainFrame object. Thanks to the
replies, now I could!
3rd: (back to the being stupid) When I was instructed to use pFrame->UpdateStatus(1, "1st panel message...")
I was just baffled ".. but there is no UpdateStatus in CFrameWnd class..."
Ok, here is how it works now, in case this helps someone else. I am NOT
updating the default message text on the status bar, I have created my own
pane with a text:
in MainFrm.h must be lines
public:
void UpdateStatusBar(CString sMessage = "");
- - - - - -
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
UpdateStatusBar();
return 0;
}
- - - - - -
void CMainFrame::UpdateStatusBar(CString sMessage)
{
CWinApp* pApp = AfxGetApp();
// the values are read from the registry
CString strValue, strValue2;
strValue = pApp->GetProfileString("Latest update","Date");
strValue2 = pApp->GetProfileString("Latest update","State");
if (strValue.IsEmpty()) {
m_sPaneText = "Data saved: n/a"; }
else {
m_sPaneText.Format("Data saved: %s, %s", strValue, strValue2); }
CStatusBarCtrl &stCtrl = m_wndStatusBar.GetStatusBarCtrl();
// Let's keep it simple...
stCtrl.SetSimple();
// in case you want send a different message to the status bar
// m_sPaneText is a member of CMainFrame
if (sMessage.IsEmpty())
stCtrl.SetText(m_sPaneText,255,0);
else
stCtrl.SetText(sMessage,255,0);
}
- - - - - -
...and then at the same in another class...
In AppDoc.cpp must be line
#include "MainFrm.h"
- - - - - -
void CAppDoc::SaveDataToServer()
{
// blah blah blah... save data and other dull jobs...
// in my case write to registry. The values are read in
// UpdateStatusBar later on and displayed.
// update the status bar from CDocument class object
CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;//pointer to mainframe object
pFrame->UpdateStatusBar();
return;
}
- - - - - -
|
|
|
|
|
Hi again everyone,
Does anyone know of a good web resource or a book where I can find information regarding vtables and how to manipulate them with C++.
Thanks,
Pankaj
|
|
|
|
|
pankajdaga wrote:
where I can find information regarding vtables and how to manipulate them with C++.
What do you mean by 'manipulating vtables'?
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
I was just wondering if it is possible to directly access the contents of a vtable.
Pankaj
Without struggle, there is no progress
|
|
|
|
|
pankajdaga wrote:
if it is possible to directly access the contents of a vtable
It isn't possible in portable manner. Why do you want to do this?
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
Just for educational reasons. I am a student at a university. Just wanted to know if it was possible to access the vtable pointer from the C++ code.
Pankaj
Without struggle, there is no progress
|
|
|
|
|
The main topic is not vtables, but there is very nice code, i like this link
http://www.codeproject.com/atl/atl_underthehood_.asp
regards
-----
Mit freundlichen Grüssen/Best Regards/Un cordial saludo.
Ing. José Manuel Hostalet Wandosell, Fraunhofer IPA, Abt.323/Robotersysteme
Nobelstrasse 12, D-70569 Stuttgart (Germany)
mailto:jose.hostalet@ipa.fhg.de, http://www.ipa.fhg.de
|
|
|
|
|
pankajdaga wrote:
vtables and how to manipulate them with C++.
You are one courageous programmer!
Jeremy Pullicino
Professional C++ Developer
Done any hacking lately?
|
|
|
|
|
Take a look at Jan Gray's article C++: Under the Hood[^] (warning, hardcore stuff).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
No I don't, but it's pretty easy for plain (non-MI and non-virtual-baseclass) classes with virtual functions.
Basically it looks like:
classA* pClass points to memory like:
pclass+0: vfptr
pclass+4: reast of classA data
The at what the vfptr points to you have
addr+0: vfunc1 (often scalar d'tor IIRC)
addr+4: vfunc2
addr+8: vfunc3
...
This is for MSVC6. I don't know if it's incompatible for MSVC7.
|
|
|
|
|
I have an MDI with a property sheet embedded into a CFormView. I have two pages CPage1 and CPage2 in my property sheet.
I want a pointer in CPage2 to access data in CPage1.
Any suggestions?
|
|
|
|
|
When you add pages to the propertysheet can't you add a pointer to the CPage1 to CPage2?
Asim Hussain
e: asim@jawache.net
w: www.jawache.net
|
|
|
|
|
In CPage1:
((CMyPropertySheet*)GetParent())->m_page2
Pavel
Sonork 100.15206
|
|
|
|
|
I am openeing a file using fopen and FILE*.
I am getting problems with this structure later It seems to think the FILE is a
_FILEX structure?!?!?!
When I open the file the call stack is.
fopen
_fsopen
_getstream
and the _getstream function definately returns a FILE object in the line
stream.c >>>>>>
retval = (FILE *)__piob[i];
but later it tries to read from the FILE stream using fgets. The call stack here
is
fgets
_lock_file
There is an exception in _lock_file I've figured out what it is and basicaly the
system thinks the FILE structure is a _FILEX structure and tries to access a non
existant member variable so it asserts.
void __cdecl _lock_file (
void *pf
)
{
if ( (pf >= (void *)_iob) && (pf <= (void *)(&_iob[_IOB_ENTRIES-1])) )
_lock( _STREAM_LOCKS + ((FILE *)pf - _iob) );
else
EnterCriticalSection( &(((_FILEX *)pf)->lock) );
}
An exception is raised at
EnterCriticalSection( &(((_FILEX *)pf)->lock) );
I have a STRONG suspision its a simple project settings or maybe library linkage
problem since I have the exact same code in another application and it works
fine....
Working on VC6 SP5
Windows 2000 SP2
Asim Hussain
e: asim@jawache.net
w: www.jawache.net
|
|
|
|
|
Seems like you're mixing code using single-threaded and multi-threaded CRT. FILEX is just FILE in single-threaded CRT. In MT version, FILEX aggregates FILE with critical section.
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|
|
Thats a bit weird.
I had another look at my settings and changed from Static Linkage to Dynamic Linkage, In statis linkage it was using the Debug Multithreaded Archive and having the problems and in the dynamic linked build its using the Dynamic Multithreaded DLL and now it works?
Is this an issue with the Archive vs the DLL ? As I would really like to finaly make a static build and stop with all the installation problems i have.
Asim Hussain
e: asim@jawache.net
w: www.jawache.net
|
|
|
|
|
Jawache wrote:
Is this an issue with the Archive vs the DLL
I'm not sure what are you talking about here. By 'archive' you mean 'static library' or something else?
Your app is single .exe, or you have .exe and your own .dlls? Are you using 3rd party libraries?
Tomasz Sowinski -- http://www.shooltz.com
** Putt knot yore thrust inn spel chequers. **
|
|
|
|