Question

Creating a simple Custom Control

Asked by: x4u

Hello, once again I wasted a lot of time today trying to get something supposedly trivial done that was actually supposed to save me some time.

- Put some controls (a textfield, 2 buttons and maybe a static label or picture control) into a small property sheet and layout them within the resource editor.
- Create a subclass of CDialog with variables for these controls and initialize them with the mentioned property sheet.
- Put a dozen of these subclass instances into another dialog and layout them as Custom Controls.

It worked more or less well except the "... and initialize them with the mentioned property sheet" part.

I'm pretty new to MFC and Win32 and assumed that all I need to do is to get the DoDataExchange method invoked from somewhere and this would create and initialize the subcontrols. But I keep getting Assertion failed and various errors when I try to do this in a similar way as seems to be done by the CTabCtrl. The class itself (without it's contents) run's well and instances of it can be placed in a dialog.

I'm sure someone of you can help me to get this done.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2004-09-08 at 21:41:30ID21124085
Tags

custom

,

mfc

Topic

Windows MFC Programming

Participating Experts
3
Points
500
Comments
11

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. MFC CView into a CDialog
    I have a MFC MDI application. I wish to change the way it behaves under certain conditions. For instance, I want it to change its behaviour to simulate a Dialog based application while staying in MDI... this way, I can switch back and forth between the two modes. Now... wh...
  2. CDialog in a thread
    I'm trying to create a CDialog inside a thread. The problem is that the thread is altogether outside of the main windows and dosen't have any access to member of the main windows. So when I try to create the CDialog (CDialog.Create(IDD X, CWnd *)) inside the thread, I run int...
  3. AfxMessageBox - Assertion Error
    I've got a simple client server application, the client requests data from the server and then displays it in a messagebox (supposedly). When then client requests the information, the application exits with an Assertion Error. int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT...
  4. Running a CDialog in a separate Thread
    My app is an SDI. I Have a class that serves as a Singleton and it contains a meethod that should start a thread and display a modeless CDialog derived class within that thread. The reason I do this is so that when the Dialog is displayed, the user can still do something else...
  5. create of CDialog faild
    what could be the reason for failure in Create of CDialog derived class? if ( m_pTrendGraphDlg ) delete m_pTrendGraphDlg; m_pTrendGraphDlg = new CExperimentGraphDialog( pilSpots, nGels ); BOOL bSuccess = m_pTrendGraphDlg->Create( IDD_EXPERIMENT_G...
  6. Modless CDialog in MFC Extension DLL
    I am trying to open a modless dialog in a MFC extension DLL to use it as a child window of a window in my DLL. I am getting assertion error saying that the resource ID is not valid. But, I chacked the id with IS_INTRESOURCE() macro, and it returned TRUE. below is where ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: AndyAinscowPosted on 2004-09-08 at 22:42:27ID: 12013295

First do you want a property sheet (tab control + different page) or just a dialog.

For a dialog.  In resource editor choose addnew / dialog.  Add controls you require.  Select class wizard, it prompts for you to create a new class, choose CDialog as base.  From class wizard go to the second tab - variables - assign variables to the controls you want mapping.

For a property sheet (with VC 6 there is a wizard - component gallery to help) you have more work to do.  The PAGES to be displayed are created as above BUT you require CPropertyPage as the base class.  You then need a class based on CPropertySheet and it is to this you add the pages.
eg.

CMyPropertySheet::CMyPropertySheet(CWnd* pWndParent)
       : CPropertySheet(IDS_PROPSHT_CAPTION, pWndParent)
{
      // Add all of the property pages here.  Note that
      // the order that they appear in here will be
      // the order they appear in on screen.  By default,
      // the first page of the set is the active one.
      // One way to make a different property page the
      // active one is to call SetActivePage().

      AddPage(&m_Page1);
      AddPage(&m_Page2);
}

 

by: AlexFMPosted on 2004-09-08 at 23:09:09ID: 12013362

 

by: x4uPosted on 2004-09-09 at 16:44:42ID: 12022550

Thank you for your feedback.

AndyAinscow, I tried it this way and it worked well. But how do I place this dialog into another one now? When I add it as a custom control another dialog I run into the following Assert:

Assertion failed in winocc.cpp line 330:

BOOL CWnd::ShowWindow(int nCmdShow)
{
----->      ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

      if (m_pCtrlSite == NULL)
            return ::ShowWindow(m_hWnd, nCmdShow);
      else
            return m_pCtrlSite->ShowWindow(nCmdShow);
}

The debugger says:
m_hWnd = 0x00000000
m_pCtrlSite = 0x00000000


AlexFM, this is the example I started with and it worked well. But now I have the problem how to place other controls into this custom control.


Well, now I have a custom dialog where I can put some controls into and I have a custom control that can itself be put into a dialog. What I want is a custom dialog control that allows me to do both.

 

by: DanRollinsPosted on 2004-09-09 at 19:14:54ID: 12023212

It can be difficult to use a dialogbox as a control within another dialogbox.   Before getting into this relatively complex arena, answer this:  

Are you sure that is necessary?  Can't you just put whatever you are putting in the control-dialog directly into the parent dialog?  Or perhaps make a series of property pages (depending upon your ultimate goal).

 

by: x4uPosted on 2004-09-09 at 21:20:49ID: 12023666

> Are you sure that is necessary?

Well, I have two cases where this would be helpfull.

First one is a configuration dialog that displays about a dozen very similar options where each needs a text field, two buttons and a readonly text field or an image that displays some state. It is not yet clear whether the customer ultimatly want's a combo box instead of the text field or a slider instead of the buttons. There is also some logic and validating neccessary for each option and the sub controls need to interact with each other. I think think this cries for some kind of encapsulation although I do not necessarily need to be able to layout the sub controls in the visual resource editor.

The second one is is a rather complex dialog which I need only once. But it is not yet decided whether this will become a page in a tab control or should be part of the main window without a tab control around it (maybe even configurable by the user).

 

by: AndyAinscowPosted on 2004-09-09 at 23:15:36ID: 12023998

If you mean you want for example 5 sub dialogs all looking the same but displaying different info then I would jst have one dialog and reset the contents depending on what needs to be shown.
To display different sub dialogs dynamically swapped inside another is a description of the PropertySheet - PropertyPage logic.

 

by: x4uPosted on 2004-09-10 at 07:37:50ID: 12027177

AndyAinscow, I'm not sure whether I understand you right. I need these similar subdialogs to be visible side by side at the same time inside a larger dialog not just one at a time. Is this possible with PropertySheet - PropertyPage logic? How?

 

by: AndyAinscowPosted on 2004-09-10 at 07:49:46ID: 12027303

Sorry - not with PropertySheet/Propertypage.
Your two cases - I took your first to mean you would be showing/hiding one after another.

I still think your simplest method is to have just one dialog (You can 'group' controls with frames for a visual display).

 

by: DanRollinsPosted on 2004-09-11 at 12:58:47ID: 12035580

I agree.  By the time you do all of the jinking around to make the keyboard (especially the tab key) work the way people expect it to work and add the logic to position the sub-dialogs and the extra work that is normally handled by DDX and a few clicks in the ClassWizard ... you are simply better off not trying to encapulate such trival functionality... just group the controls and handle them normally.

That's not to say that you couldn't or shouldn't write some shared code that would be used by each group if that code got complicated.   When in similar situation, I have used "cut-and-paste encapulation" to just duplicate functionality by adding _2 and _3, etc to the fn names.  But then, I'm the original pragmatic programmer... program purity is pretty low on my list compared to such mandates as "keep it simple" and "if you got to explain it to the maintenance kid, you probably made it too complicated and there goes your lunch hour."

Another consideration might be if there were a variable number of such groups (say, anywhere from 3 ro 20 groups, depending upon some outside parameter).  If that were the case then it might make more sense.  But if there is a fixed number of these groups, it's just not worth it.

-- Dan

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...