Re: Do Exchage Data
On Tue, 17 Jun 2008 10:42:19 -0700 (PDT), Peter <pvrequiz@gmail.com> wrote:
Hello everyone,
I am having some problem displaying data in a CEdit control.
I am doing a application which read data-serial and displayed it on
CEdit control (I have simplified it as much as possible)
When I do it in a Dialog base app, it works fine.
The problem is when I try to display it on TOOLBOX Dialog windows in a
Multi Document base App, Simple doesn't happened anything. I even put
a button to displayed text in the IDC_EDIT1 and doesnt appear at all.
I have notices if I used this code, IMPORTANT: In the *View.cpp (which
is "class *View : public CView) it works.
CMainFrame *cFrame = reinterpret_cast<CMainFrame
*>(AfxGetMainWnd());
CEdit *pEditWin1 = reinterpret_cast<CEdit *>(cFrame-
m_wndToolbox.GetDlgItem(IDC_EDIT1));
Replace those reinterpret_casts with static_casts. The reinterpret_cast
operator is for casting between pointers and integral types and unrelated
pointer types. As there is a default conversion from CMainFrame to CWnd and
CEdit to CWnd, you should use static_cast to go the other direction. While
it works here, conceptually, it's the wrong cast, and it will fail when
multiple inheritance is involved.
(If there is any question of the window existing, you can use dynamic_cast
and test its result.)
pEditWin1->SetWindowText(_T("194"));
How can you help, if you got code and knowledge on:
I need to sent the string of data from
class *Dlg : public CDialog
to
class *View : public CView - on to a TOOLBOX which as a IDC_EDIT1
CEdit control
Thanks for anything you can do to help here,
Assuming this is done while the dialog is still open, it would be much
better design to use an event subscription model, in which the view
subscribes to events published by the dialog. That way, the dialog doesn't
need to know anything about the view's internals. If it's done after the
dialog is closed, presumably the consumer of the dialog's data would update
the view.
As for why "nothing happens" after you SetWindowText, you're either
referencing the wrong control, or you're not dropping back into your
message loop and so need to call UpdateWindow to cause the control to be
redrawn. You can verify the control is receiving the text with
GetWindowText, of course.
--
Doug Harrison
Visual C++ MVP