Click here to Skip to main content
Click here to Skip to main content

CCurveDlg - Curve Interpolation

By , 15 Sep 2001
 

Sample Image - CurveDlg.gif

Introduction

Welcome to CCurveDlg, a Freeware MFC Curve Class

Its appearance is similar to the curves dialog as seen in the Adobe Photoshop. The classes are split up into a document/view architecture.

  • CCurveWnd, derived from CWnd, for the visual representation of the curve. This class takes care of drawing and user interaction.
  • CCurveObject, derived from CObject for the data representation of the curve. This class holds the curve data, and does all calculation calls, to perform the curve interpolation.

The actual calculation is done with the help of the XlXtrFun.dll. This is actually an Excel extension DLL or XLL, but I have written a wrapper class CCurveDllImpl for it, so it can easily be used in VC++. For more info regarding this DLL, check their website.

Usage

Adding a CCurveWnd is simple, just follow the next steps:

  1. Add the following files to your project workspace:
    • CurveWnd.h and CurveWnd.cpp
    • CurveObject.h, CurveObject.cpp and CurveObjectDef.h
    • CurveDllImpl.h and CurveDllImpl.cpp.
  2. Copy the XlXtrFun.dll to your project directory

    You should also ensure that the 3 cursors (namely, IDC_ARRBLCK, IDC_ARRWHITE and IDC_ARRBLCKCROSS) are copied over into your rc file and renamed properly.

  3. Add the following include statement to your project stdafx.h file
    #include "resource.h"
  4. Then add a CCurveWnd member to your own CDialog class:
    CCurveWnd m_cCurveWnd;

    In your CDialog::OnInitDialog(), you need to create the CurveWnd:

     m_cCurveWnd.Create("", 
     CRect(25, 55, 235, 265), this, 2001, true);

    The Create method is defined as follows:

    BOOL Create(LPCTSTR lpszCurveName,   //Points to a null-terminated 
                                         //character string that 
                                         //contains the window name
                const RECT &rect,        // The size and position 
                                         //of the window, in client 
                                         //coordinates of pParentWnd
                CWnd* pWndParent,        // The parent window
                UINT nID,                // The ID of the child window
                BOOL CreateCurveObj)     // Set to true if the create 
                                         // function has to
                                         // create a curve object

Note: If you set CreateCurveObj = false and you don't create a curve object manually by calling CCurveWnd::CreateCurveObject(CString strCurve), the application may assert.

If you want the CurveWnd to draw a parabolic curve, you have to add the following code:

CCurveObject* pCurve = m_cCurveWnd.GetCurveObject();
pCurve->m_bParabolic = true;

The GetCurveObject method is defined as follows:

CCurveObject* GetCurveObject(); // Returns a pointer to the curveobject

Basically that will do the job.

API Functions

Full description of the API functions is not yet available, I haven't had the time to write it. But I will come up with the first update of the code, so until then just email me if u have problems and questions.

History

  • v1.0 (16 september 2001)

    CCurveDlg first released.

Planned Enhancements

If you have any suggested improvements, please let me know so that I can incorporate them into the next release.

Special Thanks

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Janssens Johan
Web Developer
Russian Federation Russian Federation
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Generalupgrade this article ...memberRedDK2 Jun '11 - 7:11 
GeneralI've ripped all of my hair out.. :(memberaquawicket24 May '07 - 10:38 
QuestionHow to get output from input [modified]memberaquawicket22 May '07 - 8:24 
AnswerRe: How to get output from inputmemberaquawicket22 May '07 - 12:19 
QuestionVC++ Source Code to draw a parabola and find the location of co-ordinates and display them in a list box.memberavins12345621 Oct '06 - 7:25 
Questionhow to insert point(x,y) in your codememberDAR TO9 Jan '05 - 18:33 
Generalthere is another way (to access the excel curve calculations)memberspare_me19 Jul '04 - 20:44 
GeneralDeveloping CCurveDllImplmemberMichael Robbins24 Oct '03 - 4:24 
GeneralProgram only runs under WinNT/2000memberJanssens Johan17 Sep '01 - 12:19 
This is why.
 
I'm using LoadLibraryEx to load the XlXtrFun.dll, actually this is a XLL (an Excel Extension Dll).
The only way, to obtain a handle to the mapped module, is to use the following code.
 
HMODULE hDll = LoadLibraryEx("XlXtrFun.dll", NULL, DONT_RESOLVE_REFERENCES)

DONT_RESOLVE_REFERENCES is described as follows
 
Windows NT/ 2000: If this value is used, and the executable module is a DLL, the system does not call DllMain for process and thread initialization and termination. Also, the system does not load additional executable modules that are referenced by the specified module.
If this value is not used, and the executable module is a DLL, the system calls DllMain for process and thread initialization and termination. The system loads additional executable modules that are referenced by the specified module.
 
So, this will only work under Win NT/2000.
 
Has anyone an idea how to map a dll whitout calling it's DllMain function in Win95/98 ? This is necessary, because otherwise LoadLibrary or LoadLibraryEx returns 0 !
 
Greets Johan Confused | :confused:

GeneralRe: Program only runs under WinNT/2000memberPaolo Messina20 Sep '01 - 6:32 
GeneralXlXtrFun.dll can't be loadedmemberMatthias Mann17 Sep '01 - 6:37 
GeneralRe: XlXtrFun.dll can't be loadedmemberJanssens Johan17 Sep '01 - 10:47 
GeneralTypo in linkmemberRavi Bhavnani17 Sep '01 - 4:03 
GeneralRe: Typo in linkmemberJanssens Johan17 Sep '01 - 11:07 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 16 Sep 2001
Article Copyright 2001 by Janssens Johan
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid