Mathlink Question
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg801] Mathlink Question
- From: Paolo Aldeghi <ALDEGHI at imimnvx.irfmn.mnegri.it>
- Date: Fri, 21 Apr 1995 01:40:20 -0400
Dear Sirs, I'm developing a program to study two dimensional Dinamical System. My application uses Mathematica Kernel to make simbolic and numeric calculous. I'm writing in Microsoft Visual C++ and I use Mathlink to connect to Mathematica kernel. To draw the postscript output that Mathematica produce to the window screen, I use the three functions included in MVPOST.DLL. These three functions are: PSStart(char *) PSAddData(char *) PSDraw(HWND,HDC,int,int,int,int) Because I don't find any documentation about them, I saw the FE Visual Basic Example that is included in MathLink distribution disckette. In that example, the call to PSDraw function, is the following: hPS = PSDraw(Form1!PSOut.hWnd, Form1!PSOut.hDC, 0, 0, Form1!PSOut.ScaleWidth, Form1!PSOut.ScaleHeight) If I understand, PSDraw create a new bitmap and a new DC. In the bitmap it draw the graphic output and then insert the bitmap in the DC created. PSDraw return the handle of device context created. Infact, used in this mode, with a call to the subsequent BitBlt function, the graphic appear in the window. My problem is the following: because a Device Context must be deleted with DeleteDC function when it does not be usefull, and because it must hold the initial handle of bitmap when I try to delete it, I can't make it because the handle of the initial bitmap was lost in DLL function call. This produce some errors in my program, when I execute it because the Debuger tell me "Too many GetDC call. GetDC cache is full". I tried to put a initial object from another DC in the device context returned from PSDraw and then Delete it, but it doesn't seem to work. By this trick, I could minimizing the lost of memory because I could delete the bitmap returned from SelectObject. But the device context produce always the same error. However, also the Fe.exe example program produce same errors when it draw the graphic output of Mathematica. Infact, fe.exe lost the memory used by PSDraw to create the bitmap. Also, I'd like to know why I must call PSDraw with HWND and HDC, and if someone know if the handle returned by PSDraw is from a GetDC or from a CreateCompatibleDC, or from CreateDC call. If someone know a host where I can find some document about my problem, or if someone know the solution of it, I'll be grateful. Best Regards. Paolo Aldeghi Istituto di Ricerche Farmacologiche Mario Negri via Eritrea 62 20157 Milano Italy ALDEGHI at IMIMNVX.IRFMN.MNEGRI.IT ALDEGHI at GHOST.DSI.UNIMI.IT