Is there any way to use IupBackgroundBox with CD?

I am currently using an IupCanvas and drawing into it successfully using CD. I 
would like to parent other controls onto this surface (such as IupMultitext, 
IupButton), but retain the ability to draw using CD since I have a lot of code 
written using that.

So if there was a way to copy the result from CD into IupBackgroundBox using 
IupDraw that would seem to do the job, but I can't quite seem to get it to 
work. The only way I could figure out to create a cdCanvas was to use 
CD_NATIVEWINDOW with a new Win32 HWND. The graphics are drawn into the HWND but 
then I can't get it copied out there into the BackgroundBox.

Here's what I have:

void win_create()
{
    
    win->notes_graph= IupBackgroundBox();

    IupSetCallback(win->notes_graph, "MAP_CB", (Icallback)graph_mapcb);
    IupSetCallback(win->notes_graph, "UNMAP_CB", (Icallback)graph_unmapcb);
    IupSetCallback(win->notes_graph, "RESIZE_CB", (Icallback)graph_resize);
    IupSetCallback(win->notes_graph, "BUTTON_CB", (Icallback)graph_button);
    IupSetCallback(win->notes_graph, "MOTION_CB", (Icallback)graph_motion);
    IupSetCallback(win->notes_graph, "KEYPRESS_CB", (Icallback)graph_keypress);
    IupSetCallback(win->notes_graph, "WHEEL_CB", (Icallback)graph_wheel);

    IupSetCallback(win->notes_graph, "ACTION", 
(Icallback)graph_draw_backbuffer_to_container);

}

int graph_mapcb(_HANDLE_PTR self)
{
    tWIN *win = (tWIN *)IupGetAttribute(self, "WIND");


   const wchar_t CLASS_NAME[] = L"BACKBUFFER";
        WNDCLASS wc = { 0 };
        wc.lpfnWndProc = DefWindowProc;
        wc.hInstance = 0;
        wc.lpszClassName = CLASS_NAME;
        RegisterClass(&wc);
        HWND hwnd = CreateWindowEx(
            0,                              // Optional window styles.
            CLASS_NAME,                     // Window class
            L"Learn to Program Windows",    // Window text
            WS_OVERLAPPEDWINDOW,            // Window style

            // Size and position
            CW_USEDEFAULT, CW_USEDEFAULT, win->screenWidth, win->screenHeight,

            NULL,       // Parent window   
            NULL,       // Menu
            0,  // Instance handle
            NULL        // Additional application data
        );

  
      win->notes_cdGraph = cdCreateCanvas(CD_NATIVEWINDOW, hwnd);
    return IUP_DEFAULT;
}

// I had to provide this signature for some reason even though I include cdim.h
void cdCanvasGetImImage(cdCanvas* canvas, imImage* image, int x, int y);

int graph_draw_backbuffer_to_container(_HANDLE_PTR self)
{
    tWIN* win = (tWIN*)IupGetAttribute(self, "WIND");
    cdCanvasGetImImage(win->cdGraph, win->backbuffer, 0, 0);
    Ihandle *iupImage = IupImageFromImImage(win->backbuffer);
    IupSetHandle("BACKBUFFER", iupImage);
    IupDrawImage(win->notes_graph, "BACKBUFFER", 0, 0, win->graphWidth, 
win->graphHeight);
    IupSetHandle("BACKBUFFER", NULL);
    IupDestroy(iupImage);
}
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to