YOU CAN CODE!

 

With The Case Of UCanCode.net  Release The Power OF  Visual C++ !   HomeProducts | PurchaseSupport | Downloads  
Download Evaluation
Pricing & Purchase?
E-XD++Visual C++/ MFC Products
Overview
Features Tour 
Electronic Form Solution
Visualization & HMI Solution
Power system HMI Solution
CAD Drawing and Printing Solution

Bar code labeling Solution
Workflow Solution

Coal industry HMI Solution
Instrumentation Gauge Solution

Report Printing Solution
Graphical modeling Solution
GIS mapping solution

Visio graphics solution
Industrial control SCADA &HMI Solution
BPM business process Solution

Industrial monitoring Solution
Flowchart and diagramming Solution
Organization Diagram Solution

Graphic editor Source Code
UML drawing editor Source Code
Map Diagramming Solution

Architectural Graphic Drawing Solution
Request Evaluation
Purchase
ActiveX COM Products
Overview
Download
Purchase
Technical Support
  General Q & A
Discussion Board
Contact Us

Links

Get Ready to Unleash the Power of UCanCode .NET


UCanCode Software focuses on general application software development. We provide complete solution for developers. No matter you want to develop a simple database workflow application, or an large flow/diagram based system, our product will provide a complete solution for you. Our product had been used by hundreds of top companies around the world!

"100% source code provided! Free you from not daring to use components because of unable to master the key technology of components!"


VC++ MFC Example: Place Combo Box, Edit Box, Progress Control, Check Box on toolbar, CComboBox, CEdit, CCheckBox

 
 By Randy More. 
How to place combo-boxes, edit boxes, progress controls, etc. into toolbars

It is very easy (once you see how it is done) to place combo-boxes, edit boxes, progress controls, etc. into toolbars. Below are two examples of this, in the first a ComboBox is placed on a toolbar, and in the second a cluster of checkboxes is added. In both cases the technique is the same:

Step 1: Place a button on the toolbar in the spot where you want the control(s) to eventually be. YOU MUST place a seperator on either side of the button!. Give the button an easily remembered resource name such as IDP_PLACEHOLDER2 in the example below.

Step 2: Derive a class from CToolBar and give it a member variable for the control you will be creating. For the ComboBox example that class looks like this. No extra methods are required, just a place for the instance of the control to live.

class CMainToolBar : public CToolBar 
{
public:
    CComboBox m_wndSnap;
};

Step 3: In your main frame's .h file replace the instance of the CToolBar with you new class. Be sure to add an include statement for the class definition created in step 1.

protected: // control bar embedded members
    CStatusBar m_wndStatusBar;
    CMainToolBar m_wndToolBar;

Step 4: At the end of your main frame's OnCreate method you replace the placeholder button with your control as follows:

Collapse
int SMCMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    /////////////////////////////////////////
    //Body of On Create goes here

    #define SNAP_WIDTH 80 //the width of the combo box

    //set up the ComboBox control as a snap mode select box
    //
    //First get the index of the placeholder's position in the toolbar
    index = 0;
    while (m_wndToolBar.GetItemID(index) != IDP_PLACEHOLDER2) index++;

    //next convert that button to a seperator and get its position
    m_wndToolBar.SetButtonInfo(index, IDP_PLACEHOLDER2, TBBS_SEPARATOR,
        SNAP_WIDTH);
    m_wndToolBar.GetItemRect(index, &rect);

    //expand the rectangle to allow the combo box room to drop down
    rect.top+=2;
    rect.bottom += 200;

    // then .Create the combo box and show it
    if (!m_wndToolBar.m_wndSnap.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL| 
                                       CBS_DROPDOWNLIST|CBS_HASSTRINGS,
                                       rect, &m_wndToolBar, IDC_SNAP_COMBO))
    {
        TRACE0("Failed to create combo-box\n");
        return FALSE;
    }
    m_wndToolBar.m_wndSnap.ShowWindow(SW_SHOW);

    //fill the combo box
    m_wndToolBar.m_wndSnap.AddString("SNAP OFF");
    m_wndToolBar.m_wndSnap.AddString("SNAP GRID");
    m_wndToolBar.m_wndSnap.AddString("SNAP RASTER");
    m_wndToolBar.m_wndSnap.AddString("SNAP VERTEX");
    m_wndToolBar.m_wndSnap.AddString("SNAP LINE");
    m_wndToolBar.m_wndSnap.SetCurSel(0);
}

The result looks like this:

Here is one that is a little trickier:

Four check boxes are placed in the toolbar. In addition to adding multiple controls in place of a single button this example shows how to change the font of the checkboxes.

1. Derive the new toolbar class and add it to the main frame. Also add a CFont called gSmallFont to the Main Frame.

class CCoupleToolBar : public CToolBar
{
public:
    CButton m_wndCenter;
    CButton m_wndEdge;
    CButton m_wndTrack;
    CButton m_wndZoom;
};

2. Place a placeholder button on the toolbar resource MAKING SURE to leave a space on either side. This is done just as in the first example.

3. At the end of OnCreate in the main frame, first set up the font we are going to use, then replace the placeholder button with the new controls.

Collapse
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ////////////////////////////////
    // Body of OnCreate here
    
    //set up the small font to use for the button text
    // remember to declare CFont gSmallFont in the .h file
    // font for tool bar use
    CClientDC DC(GetDesktopWindow());
    long logical_pixels = DC.GetDeviceCaps(LOGPIXELSX);
    if(logical_pixels <100)

    {
        gSmallFont.CreatePointFont(67, "DEFAULT", NULL);  
    }    
    else 
    {   
        gSmallFont.CreatePointFont(50, "DEFAULT", NULL); 
    }   
    
    //create the four check boxes  
    #define CHECK_WIDTH 94  
    int index;   
    CRect rect;   
    CRect safe_rect;
    index = 0;  
     
    while (m_wndViewBar.GetItemID(index) != IDP_PLACHOLDER) index++;     
    
    // Create the "CENTER" check box   
    m_wndViewBar.SetButtonInfo(index, IDP_PLACHOLDER, TBBS_SEPARATOR,
        CHECK_WIDTH); 
    m_wndViewBar.GetItemRect(index, &rect); 
    safe_rect=rect;    
    rect.left +=2;   
    rect.right=rect.left + ((CHECK_WIDTH / 2)-4);   
    rect.top=2;

    rect.bottom=rect.top + 10;   
    if (!m_wndViewBar.m_wndCenter.Create("CNTR",
        BS_CHECKBOX|WS_CHILD|WS_VISIBLE, rect, &m_wndViewBar,
        IDM_COUPLE)) 
    { 
        TRACE0("Failed to create CENTER check-box\n");       
        return FALSE;    
    }    
    m_wndViewBar.m_wndCenter.SendMessage(WM_SETFONT,
        (WPARAM)HFONT(gSmallFont),TRUE);  
    rect.top = rect.bottom += 2;   
    rect.bottom = rect.top + 10;    
    if (!m_wndViewBar.m_wndEdge.Create("EDGE",
        BS_CHECKBOX|WS_CHILD|WS_VISIBLE, rect, &m_wndViewBar,
        IDM_COUPLE_EDGE))
    {         
        TRACE0("Failed to create EDGE check-box\n");        
        return FALSE; 
    }    
    m_wndViewBar.m_wndEdge.SendMessage(WM_SETFONT,
        (WPARAM)HFONT(gSmallFont), TRUE);
    rect = safe_rect;
    rect.left += ((CHECK_WIDTH / 2) + 4);   
    rect.top = 2;

    rect.bottom = rect.top + 10; 
    if (!m_wndViewBar.m_wndZoom.Create("ZOOM",
        BS_CHECKBOX|WS_CHILD|WS_VISIBLE, rect, &m_wndViewBar,
        IDM_LOCK_ZOOMS))
    {      
        TRACE0("Failed to create ZOOM check-box\n");    
        return FALSE;   
    }    
    m_wndViewBar.m_wndZoom.SendMessage(WM_SETFONT,
        (WPARAM)HFONT(gSmallFont),TRUE);   
    rect.top = rect.bottom += 2;   
    rect.bottom = rect.top + 10;  
    if (!m_wndViewBar.m_wndTrack.Create("TRKR",
        BS_CHECKBOX|WS_CHILD|WS_VISIBLE, rect, &m_wndViewBar,
        IDM_SHOW_TRACKING))  
    {       
        TRACE0("Failed to create EDGE check-box\n");    
        return FALSE;   
    }   
    m_wndViewBar.m_wndTrack.SendMessage(WM_SETFONT,
        (WPARAM)HFONT(gSmallFont), TRUE); 
} 

 

 

Copyright ?1998-2009 UCanCode.Net Software , all rights reserved.
Other product and company names herein may be the trademarks of their respective owners.

Please direct your questions or comments to webmaster@ucancode.net