Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Thread with base class CFormView

Posted on 1998-09-22
8
310 Views
Last Modified: 2013-11-19
How do I create a user-interface thread which has a base class of CFormView (instead of CWnd)?
0
Comment
Question by:p1
  • 4
  • 3
8 Comments
 
LVL 3

Expert Comment

by:Norbert
ID: 1322461
User Interface Thread base class is CWinThread it is never a CWnd or CWnd derived Class
0
 

Author Comment

by:p1
ID: 1322462
My question is to implement a project which is MDI based format and
it will contain two different views. We want one thread to be setup for
each view.

Thus we want to use user interface thread because we need to
'postmessage' between the two windows.

Can you list  the procedure needed to do this?
Or can you give me any example/source code?
Thanks

0
 
LVL 3

Expert Comment

by:plaroche
ID: 1322463
"Thus we want to use user interface thread because we need to
 'postmessage' between the two windows. "

What would that really change?  Simple threads can still post messages to other windows.

Could you clarify what the threads would be doing? Maybe a user-interface thread is too much for your use.

0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 

Author Comment

by:p1
ID: 1322464
Let me rephrase my original question again.
How do I create a USER-INTERFACE THREAD WINDOW which has a base class of CFormView (instead of CWnd). That is we like the user-interface thread to have its own window which is of base class CFormView.

I have difficulties in constructing it , and is asking for advices on how to do it.
Becasue I don't know how to combine the multithreading architecture and the CFormView construction code together - all I can do is to create a user-interface thread which has its own window of base class CWnd.

Once again, thank you for your time.

0
 
LVL 3

Accepted Solution

by:
Norbert earned 100 total points
ID: 1322465
Answer is coming
0
 
LVL 3

Expert Comment

by:Norbert
ID: 1322466
Generate a Class derived from CWinThread
Look into online help to see what you need building an CWinThread derived class
Start the Thread using
            AfxBeginThread(RUNTIME_CLASS(CYourWinThreadDerivedClass));
// have a look into online help for the parameters of AfxBeginThread
Now your Thread is running and AfxBeginThread or one of the functions that are called during the thread initialisation will call
InitInstance of the generated CYourWinThreadDerivedClass Object.
Inside the InitInstance function create a Frame window
and asign it to m_pMainWnd member variable of your CYourWinThreadDerivedClass Object  and create the View:
BOOL CYourWinThreadDerivedClass ::InitInstance()
{
  CCreateContext Context;
  CMenu MyMenu;
  CMainFrame* MyFrame=new CMainFrame;
  m_pMainWnd=MyFrame;
  if (!MyFrame->Create(NULL, _T("Title Of your Window")))
    return FALSE;
  MyMenu.LoadMenu(IDR_MAINFRAME);
  if(MyFrame->GetMenu())            MyFrame->GetMenu()->DestroyMenu();
  MyFrame->SetMenu(&MyMenu);
  MyMenu.Detach();
  Context.m_pNewViewClass=RUNTIME_CLASS(CYourView);
  CYourView* MyView=
         (CYourView*)MyFrame->CreateView(&Context);
   MyFrame->SetActiveView(MyView,TRUE);
  MyView->ShowWindow(SW_SHOW);
  ActivateFrame();
  RecalcLayout(TRUE);

  return true;
}

0
 

Author Comment

by:p1
ID: 1322467
Dear Norbert,

Sorry for replying late!!!
I have tried the method suggested by you but I found that the frame cannot be created.
I think this may due to the problem of the variable m_pMainWnd...each time
I execute my program, error occurs.

I used the debugger to locat the error, the error occurs at:

if (pParentWnd == NULL)
{
    CWnd* pMainWnd = AfxGetThread()->m_pMainWnd;
    ASSERT(pMainWnd != NULL);
    ASSERT_KINDOF(CMDIFrameWnd, pMainWnd);  // error occurs at here
    pParentWnd = (CMDIFrameWnd*)pMainWnd;
}

How can I correct this error?
Thanks
0
 
LVL 3

Expert Comment

by:Norbert
ID: 1322468
if I found the right location the assertion happens inside the CMDIChildWnd::Create(...) function so I will ask some questions:

1.From wich thread do you call the Create function ?
AfxGetThread returns a pointer to the actual running thread. So if you call the Create function from outside the thread you get the wrong pointer.

2.Peece of my suggested code:
CMainFrame* MyFrame=new CMainFrame;
  m_pMainWnd=MyFrame;
  if (!MyFrame->Create(NULL, _T("Title Of your Window")))
    return FALSE;
Is CMainFrame derived from CMDIFrameWnd

If you only want to create a child window of a CMDIFrameWnd inside the thread may be the following will work. But I am absolutely not sure about it because you are crossing threads and I do not know how thread safe the MFC is:
BOOL CYourWinThreadDerivedClass ::InitInstance()
{
  CCreateContext Context;
  CMenu MyMenu;
  CYourMDIChildClass* MyFrame=new CYourMDIChildClass;
  m_pMainWnd=AfxGetApp()->m_pMainWnd;
  if (!MyFrame->Create(NULL, _T("Title Of your Window")))
    return FALSE;
.
rest of InitInstance
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
MFC Dialog 9 51
Named range not carried over 10 65
pre4 challenge 19 103
My project did see openJDK that I installed. What could be the problem 7 150
Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

792 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question