Recent Posts

Pages: 1 ... 3 4 [5] 6 7 ... 10
41
The concept / Re: Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 27, 2023, 08:14:08 am »
Here is the Debug version, without the .vs hidden folder.

About the correct Debug settings, open the "Project" --> "Properties" to figure what to do.
The important parts are in these sections
> C/C++
> Linker
 Starting from now,, I shall try to add a Debug version in new tutors.

However keep in mind that the settings for Debug and Release are very different.

Have a look at these settings to produce standalone EXE without using the CRT.
http://www.objreader.com/index.php?topic=335.msg6044#msg6044
42
The concept / Re: Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Shao Voon Wong on August 27, 2023, 03:05:10 am »
Sorry I am unsure to understand your concern.
Do you want to build a 32-bit version of Tutor_14 in debug mode?
But what about the GDImage DLL that is 64-bit...

The first thing would be to create a 32-bit version of GDImage working only in ANSI rather than UNICODE.
This is exactly what the old PowerBASIC version does.
Or do you want to have a 32-bit UNICODE version ?

Or you just want to have a 64-bit version of Tutor_14 working in debug mode ?

In that case, I would want 64-bit version of Tutor_14 working in debug mode since I only have 64-bit GDImage. Please show me the relevant settings to make it compilable in 64-bit debug so that I'll know how to do it when I start a new GDImage project.

And can you kindly remove the hidden .vs folder from the source code since that .vs contains regenerated info whenever the solution is opened? And that .vs only contains info relevant to your dev machine which is not useful to me.

Thanks in advance.
43
The concept / Re: Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 26, 2023, 09:59:37 am »
Currently in GDImage the WCHAR constants are defined like this

Code: [Select]
static WCHAR*   $NULL               = L"";
static WCHAR*   $SPACE              = L" ";
static WCHAR*   $CHARNULL           = L"\0";
static WCHAR*   $COMMA              = L",";
static WCHAR*   $ANTI               = L"\\";
static WCHAR*   $DOT                = L".";
static WCHAR*   $SAVE_EXT           = L"PNG,JPG,BMP,TIF,GIF,EMF,WMF";
static WCHAR*   $FILTER             = L"*.PNG (Portable Network Graphic)|*.PNG|*.JPG (JPEG File Interchange)|*.JPG;*.JPEG|*.BMP (Windows Bitmap)|*.BMP|*.TIF (Tagged Image File)|*.TIF;*.TIFF|";
static WCHAR*   $JPG_PNG            = L"JPG,PNG";
static WCHAR*   $ZLIM               = L"|";
static WCHAR*   $LF                 = L"\n";
static WCHAR*   $RegistryKey        = L"SOFTWARE\\GDImage";
static WCHAR*   $RegistryPath       = L"LoadDefaultPathName";

const int SCROLLBAR_NONE     = 0;
const int SCROLLBAR_VERT     = 1;
const int SCROLLBAR_HORZ     = 2;
const int SCROLLBAR_BOTH     = 3;

const int CHECK_FOR_MULTISAMPLE     = TRUE;
const int WGL_SAMPLE_BUFFERS_ARB    = 0x2041;
const int WGL_SAMPLES_ARB           = 0x2042;
const int WGL_DRAW_TO_WINDOW_ARB    = 0x2001;
const int WGL_SUPPORT_OPENGL_ARB    = 0x2010;
const int WGL_ACCELERATION_ARB      = 0x2003;
const int WGL_FULL_ACCELERATION_ARB = 0x2027;
const int WGL_COLOR_BITS_ARB        = 0x2014;
const int WGL_ALPHA_BITS_ARB        = 0x201B;
const int WGL_DEPTH_BITS_ARB        = 0x2022;
const int WGL_STENCIL_BITS_ARB      = 0x2023;
const int WGL_DOUBLE_BUFFER_ARB     = 0x2011;
44
The concept / Re: Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 26, 2023, 09:45:30 am »
Sorry I am unsure to understand your concern.
Do you want to build a 32-bit version of Tutor_14 in debug mode?
But what about the GDImage DLL that is 64-bit...

The first thing would be to create a 32-bit version of GDImage working only in ANSI rather than UNICODE.
This is exactly what the old PowerBASIC version does.
Or do you want to have a 32-bit UNICODE version ?

Or you just want to have a 64-bit version of Tutor_14 working in debug mode ?

45
The concept / Re: Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Shao Voon Wong on August 26, 2023, 09:02:41 am »
Hi Patrice,

I cannot build in debug x64 x86 build and release x86 build of your Tutor 14. There are some errors and many errors due to the invalid WCHAR* conversion. If I try out to write some GDImage code, I am not going to start from scratch; I am going to take your existing Tutor 14 code and remove the code which I do not need to write a zooming photo viewer application. I must be able to debug using the debug build when something goes wrong. Right now, I am unable to build a debug build.

In 1990s, using Turbo C. I was able to write something like

Code: [Select]
char* text = "Good Holidays";
Starting from the early 2000s, I was not allowed to do this. A const keyword must be used.

Code: [Select]
const char* text = "Good Holidays";
For example, given the MyFunction below

Code: [Select]
void MyFunction()
{
    char* text = "Good Holidays";
    // code that modifies the content which text is pointing to.
}

If MyFunction modifies "Good Holidays" which is a static memory area, then the next time, MyFunction is called again, the text won't be "Good Holidays". This is why const must be used for string literals. I never verify if this is true because it is an industry practice that every C/C++ developer and I has to follow.

Assigning char* to const char* is allowed.

Code: [Select]
char* text = ???
const char* text2 = text; // allowed

but the opposite is not allowed by the compiler.

Code: [Select]
const char* text = ???
char* text2 = text; // error: not allowed.

Can you modify all the in parameters of WCHAR* to const WCHAR* in GDImage? This is to cut down the compile errors I have to fix when compiling in debug build. The side effort of this modification is you cannot modify const WCHAR* argument inside your function.

What do you think?
46
The concept / Tutor_16 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 23, 2023, 08:21:50 am »
Sixteenth post of a series, translated from the "WinDev and PowerBASIC",
to explain the use of GDImage64 in procedural* programming mode with Visual Studio 2022.

About Tutor_16
This is a C++ transcription of a PowerBASIC demo written in 2009 with the official release of GDImage 5.00.
It was the first version able to mix 2D and 3D OpenGL into the same graphic control.
The application itself is skinned with WinLIFT, and share the same background wallpaper with all child controls.

Wallpaper
You can change them on the fly, by cliking on the top-left icon with either the left or right mouse button.
The wallpaper images are stored in the "Resource\Background" sub-folder.
The selected wallpaper is also used to change on the fly the texture for all 3D objects.

3D OpenGL animation
You can choose  between several FFP OpenGL 3D objects.
FFP means Fixed Function Pipeline, this refers to the set of configurable processing state present in older versions of OpenGL.
Thus they should work with any PC configuration.
Modern OpenGL are based on FBO (Framebuffer Objects), this is what the ObjReader 3D engine is using.

Custom controls
They are skinned on the fly using the WinLIFT skSkinChildCtrl() API.
All labels are created with the skSetLabelFont() API using a private font, this ensures the GUI looks always the same on every computer.

Settings
The user interface allows you to change on the fly many of the ZOBJECT sprite properties.

GDImage 7.16
Is an experimental version converted to VS2022, with a new API named "ZD_GLtoBitmap" to dynamically turn the OpenGL context into a ZOBJECT sprite bitmap (see the RenderAnimation() procedure).


Last but not least,
the size of the standalone binary EXE is only 22 Kb.


   
* procedural programming mode, is based on direct use of the FLAT API (Windows SDK) that is the core meat of the OS.
47
The concept / Tutor_15 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 18, 2023, 02:11:09 pm »
Fifteenth post of a series, translated from the "WinDev and PowerBASIC",
to explain the use of GDImage64 in procedural* programming mode with Visual Studio 2022.

About Tutor_15
This is a C++ transcription of a PowerBASIC demo written in 2009 with the official release of GDImage 5.00.
It was the first version able to mix 2D and 3D OpenGL into the same graphic control.
The application itself is skinned with WinLIFT, and share the same background wallpaper with all child controls.

Wallpaper
You can change them on the fly, by cliking on the top-left icon with either the left or right mouse button.
The wallpaper images are stored in the "Resource\Background" sub-folder.

3D OpenGL animation
The compass is using a spherical texture named "graduation.jpg" from the "Resource" folder.
You can change its orientation with the "Rotation" trackbar slider.
The "DrawObject3D" is the procedure where we render the OpenGL object.
It is converted on the fly in a sprite bitmap (IDS_3DOBJECT) inside of "RenderAnimation".

Custom controls
They are skinned on the fly using the WinLIFT skSkinChildCtrl() API.
All labels are created with the skSetLabelFont() API using a private font, this ensures the GUI looks always the same on every computer.

Linked sprite objects
All the sprites are linked together with the ZD_SetObjectLinked() API, to create a single entity that can be moved around holding down the left mouse button inside of the GDImage graphic control.

Settings
The user interface allows you to change on the fly many of the ZOBJECT sprite properties.

GDImage 7.16
Is an experimental version converted to VS2022, with a new API named "ZD_GLtoBitmap" to dynamically turn the OpenGL context into a ZOBJECT sprite bitmap (see the RenderAnimation() procedure).


Last but not least,
the size of the standalone binary EXE is only 22 Kb.


   
* procedural programming mode, is based on direct use of the FLAT API (Windows SDK) that is the core meat of the OS.
48
The concept / Tutor_14 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 15, 2023, 05:52:24 pm »
Fourteenth post of a series, translated from the "WinDev and PowerBASIC",
to explain the use of GDImage64 in procedural* programming mode with Visual Studio 2022.

About Tutor_14
It is based on a real application written in 2007 for a french administration (Prefecture du Vaucluse).
It uses markers to spot a specific location on a map or a plan.
It is able to manage several distinct projects, each one using a main background image, that is the surface used to display the markers and the annotations, the coordinates and properties of the objects are saved inside the application's "Map" subfolder. The file name used to save a project, is build on the name of the background image, followed with the extension ".gns".

Zoom Control
The ZI_SetProperty(gP.hCtrl, ZI_ZoomWindow, TRUE); enabled it.
It means that everything put inside of the graphic control could be resized on the fly.

Vertical selector
This is the same concept as the vertical sprite selector used in Tutor_13, except that this one is a tool window that can be moved around by dragging its caption.

Drag & drop
Uses the CreateDropImage procedure to create a WS_EX_LAYERED window to drag the selected sprite to its destination.

RTF help file
Please make sure to read the provided HELP_us.rtf by cliking the user icon shown aside the close button (bottom right side).

User interface
1. Contact sheet:
Located above the main working area, it allows the selection of a specific project.
The active project is shown in opaque mode, while the others are using half transparency.
2. Working area:
Located below the contact sheet and above the command pannel, it takes most of the main window area. The aspect of the working area relies on the zooming factor being used, and the view port section can be adjusted with the scrollbars. It is also possible to scroll the image using the left mouse button to drag directly the background.
3. Markers:
They are shown inside of the floating tool window located on the right side of the working area.
To add new markers on the working area, just use drag and drop from this window.
4. Command pannel:
It is at the bottom of the main window, under the working area. It is used to display the mouse coordinates and all the command buttons, as well as the "Close" button (on the right side). You can use the command panel, as you would do for a standard window caption, to move the whole window to another location (using drag and drop).
5. Moving and zooming:
This small floating toold window is located on the top left corner, it is used to display a thumbnail of the whole background image, altogether with a rectangular shape, using a red perimeter to delimit the part of the image currently shown in the working area. The size of the rectangle, is based on the current zoom level, that could be adjusted from the horizontal slider below the thumbnail. You can drag the inside of the rectangle, to adjust the viewport, just like what you would do with the scrollbars aside the working area.

GDImage 7.15
Is an experimental version converted to VS2022, and designed specifically to run all the Tutor applications.


   
* procedural programming mode, is based on direct use of the FLAT API (Windows SDK) that is the core meat of the OS.
49
The concept / Tutor_13 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 10, 2023, 03:14:09 pm »
Thirteenth post of a series, translated from the "WinDev and PowerBASIC",
to explain the use of GDImage64 in procedural* programming mode with Visual Studio 2022.

About Tutor_13
This tutor introduces the use of a vertical sprite selector to perform drag & drop onto the main graphic control.
It is using two distinct GDImage controls, the main that is transparent (DWM composited), and a vertical sprite selector.

Vertical selector
This is the same concept as the horizontal contact sheet used in Tutor_10, except that you have to use drag & drop to drop the selected sprite at a specific location onto the main graphic control.

Drag & drop
This one is using the CreateDropImage procedure to create a WS_EX_LAYERED window to drag the selected sprite to its destination.

Contextual popup menu
It is fired when you right click the mouse on a specific sprite to set up its properties.
The commands are:
Display next frame, in case of sprite multi-frame, switch to next one in loop mode.
Note: you can also double click on the sprite to achieve the same result.
Flip horizontally, as the name implies.
Flip vertically, as the name implies.
Rotate counter clock, as the name implies.
Rotate clockwise, as the name implies.
Move up, increase the z-order.
On top, on top of the z-order.
Move down, decrease the z-order.
On bottom, on bottom of the z-order.
Clone, duplicate the sprite.
Lock, lock/unlock the sprite (the menu icon shows the current state).
Delete, remove this sprite from the graphic control.

GDImage logo
The Resource(L"logo.png") is a fixed sprite that couldn't be moved around using the ZD_SetObjectLocked API.
It also use the ZD_SetObjectHidden state, that means it couldn't be detected, and in case of zoom control it is unaffected by the zoom factor.
It is transparent to mouse events, sent to the underlaying sprite(s) in order of appearance (z-order).

Extra goodies
// Remove the CS_DROPSHADOW effect from the popup menu
HHOOK HookMenu = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC) HookMenuProc, 0, GetCurrentThreadId());

This procedure allows you to customize the tooltip color.
void CreateToolTip(IN HWND hWnd) {
    if (IsWindow(hWnd)) {
        // Add tooltip support to the hWnd GDImage control.
        HWND hTooltip = ZI_CreateToolTip(hWnd, L"");
        if (hTooltip) {
            SetWindowTheme(hTooltip, L"", L""); // Theme must be disabled to use custom colors.
            SendMessage(hTooltip, TTM_SETTIPTEXTCOLOR, RGB(0,0,0), 0);
            SendMessage(hTooltip, TTM_SETTIPBKCOLOR, RGB(177,197,255), 0);

        }
    }
}


GDImage 7.15
Is an experimental version converted to VS2022, and designed specifically to run all the Tutor applications.


   
* procedural programming mode, is based on direct use of the FLAT API (Windows SDK) that is the core meat of the OS.
50
The concept / Tutor_12 (C++ VS2022 GDImage64 tutorial)
« Last post by Patrice Terrier on August 01, 2023, 09:07:22 am »
twelfth post of a series, translated from the "WinDev and PowerBASIC",
to explain the use of GDImage64 in procedural* programming mode with Visual Studio 2022.

About Tutor_12
This tutor introduces the use of EXIF Tags to read/write image annotations.

EXIF stands for "Exchangeable Image File Format".
The annotations are formatted according to the TIFF specification, and may be found also in JPG, PNG, and many TIFF-based RAW images.

This project is a console application.

ZI_GetImageInfoList
This API uses a zTrace window to list the tags found in the Annecy.jpg file.

zCloneImage
This low level API duplicates the image before writing a new title tag to it: "This is the title of the new clone image".

Extracting Thumbnail
If the EXIF tag contains thumbnail data, then we create a file named "thumbnail.jpg".

GDImage 7.14
Is an experimental version converted to VS2022, and designed specifically to run all the Tutor applications.


   
* procedural programming mode, is based on direct use of the FLAT API (Windows SDK) that is the core meat of the OS.
Pages: 1 ... 3 4 [5] 6 7 ... 10