I'm quite new to VC++ and I'm having a problem this morning that is driving me nuts. I'll try to explain it short and clear:
I have a dialog in my app. with just a CRichEditCtrl to make some testing stuff. The goal here is to get the CHARFORMAT from another rich edit view in the app. and set it to this control. I just need to see this test stuff working to get somewhere else, I'll spare you the details.
So I have a class called CTestRtfDialog with a typical TestRtfDialog.h declaration
[...]
class CTestRtfDialog : public CDialog
{
// Construction
public:
CTestRtfDialog(CWnd* pParent = NULL); // standard constructor
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTestRtfDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
[...]
Plus some event handlers I don't want to bore you with
Then in my CWinApp class' InitInstance method I have some typical things like DocTemplate, ParseCommandLine and at this point where evrything is supposed to be initialized (I've spent pretty enough time tracing to check it out) I have this lines to get the CHARFORMAT from that rich edit view I mentioned before:
This GetTestRtfDlg is a method in my CMainFrame that just returns a reference to the dialog with the CRichEditCtrl. SetDefaultFormat(CHARFORMAT &cf) is a method in CTestRtfDialog:
As you can figure out at this point I get my assertion fail as >>ASSERT(::IsWindow(m_hWnd));
inside >>BOOL CRichEditCtrl::SetDefaultCharFormat(CHARFORMAT &cf) is not satisfied.
So I said well, let's keep a copy of this CHARFORMAT in a member of my dialog at this point and set it later when the component compies the assertion:
// 2. Give InitDialogEvent a try
BOOL CTestRtfDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_TestRtf.SetDefaultCharFormat(m_DefaultCharFormat); // (!!!)
return TRUE;
}
Hum... doesn't crash but the format in the edit control and in the view don't match... why?
Some more tracing to check it out and I discover that OnInitDialog is triggered BEFORE the point where I call my SetDafaultFormat method, thus m_DefaultCharFormat has some random content.
To be some specific the event is triggered somewhere inside the
if (!ProcessShellCommand(cmdInfo))
return FALSE;
that is in InitInstance method and right before my code!
What doesn't make any sense to me is that inside the event handler the assertion complies but LATER in my SetDefaultFormat method IT DOESN'T!
Could someone explainme what's the problem here?
Thanks in advance
Last edited by fotw; February 2nd, 2009 at 08:47 AM.
Reason: misspeling
Bookmarks